summaryrefslogtreecommitdiff
path: root/kern/mutex
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-07-30 20:55:20 +0200
committerRichard Braun <rbraun@sceen.net>2018-07-30 20:55:20 +0200
commit5f202c9f744a5d9c5b751038edd2379b3d244227 (patch)
treec5bce5b9e1d9c4b01dfed4ff941ad9944814b93c /kern/mutex
parentd3e43f5bfda0bdad7a829a7ed8c1272a395b196b (diff)
Rework assertive functions
Instead of combining assertions and checking into single functions, rework those into pure checking functions usable with assert(). Those functions were introduced because of warnings about unused functions/variables caused by an earlier implementation of assert().
Diffstat (limited to 'kern/mutex')
-rw-r--r--kern/mutex/mutex_adaptive_i.h12
-rw-r--r--kern/mutex/mutex_pi_i.h8
-rw-r--r--kern/mutex/mutex_plain_i.h14
3 files changed, 27 insertions, 7 deletions
diff --git a/kern/mutex/mutex_adaptive_i.h b/kern/mutex/mutex_adaptive_i.h
index e29fdb43..e171c9f1 100644
--- a/kern/mutex/mutex_adaptive_i.h
+++ b/kern/mutex/mutex_adaptive_i.h
@@ -25,6 +25,7 @@
#include <assert.h>
#include <errno.h>
+#include <stdbool.h>
#include <stdint.h>
#include <kern/atomic.h>
@@ -48,7 +49,14 @@ mutex_adaptive_init(struct mutex *mutex)
mutex->owner = 0;
}
-#define mutex_adaptive_assert_locked(mutex) assert((mutex)->owner != 0)
+static inline bool
+mutex_adaptive_locked(const struct mutex *mutex)
+{
+ uintptr_t owner;
+
+ owner = atomic_load(&mutex->owner, ATOMIC_RELAXED);
+ return (owner != 0);
+}
static inline int
mutex_adaptive_lock_fast(struct mutex *mutex)
@@ -89,7 +97,7 @@ void mutex_adaptive_unlock_slow(struct mutex *mutex);
*/
#define mutex_impl_init mutex_adaptive_init
-#define mutex_impl_assert_locked mutex_adaptive_assert_locked
+#define mutex_impl_locked mutex_adaptive_locked
static inline int
mutex_impl_trylock(struct mutex *mutex)
diff --git a/kern/mutex/mutex_pi_i.h b/kern/mutex/mutex_pi_i.h
index f3bb28fa..1b79c202 100644
--- a/kern/mutex/mutex_pi_i.h
+++ b/kern/mutex/mutex_pi_i.h
@@ -23,6 +23,7 @@
" use <kern/mutex.h> instead"
#endif
+#include <stdbool.h>
#include <stdint.h>
#include <kern/mutex_types.h>
@@ -38,8 +39,11 @@ mutex_impl_init(struct mutex *mutex)
rtmutex_init(&mutex->rtmutex);
}
-#define mutex_impl_assert_locked(mutex) \
- rtmutex_assert_locked(&(mutex)->rtmutex)
+static inline bool
+mutex_impl_locked(const struct mutex *mutex)
+{
+ return rtmutex_locked(&mutex->rtmutex);
+}
static inline int
mutex_impl_trylock(struct mutex *mutex)
diff --git a/kern/mutex/mutex_plain_i.h b/kern/mutex/mutex_plain_i.h
index a7928295..d3ce2d30 100644
--- a/kern/mutex/mutex_plain_i.h
+++ b/kern/mutex/mutex_plain_i.h
@@ -25,12 +25,14 @@
#include <assert.h>
#include <errno.h>
+#include <stdbool.h>
#include <stdint.h>
#include <kern/atomic.h>
#include <kern/init.h>
#include <kern/mutex_types.h>
+/* TODO Fix namespace */
#define MUTEX_UNLOCKED 0
#define MUTEX_LOCKED 1
#define MUTEX_CONTENDED 2
@@ -41,8 +43,14 @@ mutex_plain_init(struct mutex *mutex)
mutex->state = MUTEX_UNLOCKED;
}
-#define mutex_plain_assert_locked(mutex) \
- assert((mutex)->state != MUTEX_UNLOCKED)
+static inline bool
+mutex_plain_locked(const struct mutex *mutex)
+{
+ unsigned int state;
+
+ state = atomic_load(&mutex->state, ATOMIC_RELAXED);
+ return (state != MUTEX_UNLOCKED);
+}
static inline int
mutex_plain_lock_fast(struct mutex *mutex)
@@ -82,7 +90,7 @@ void mutex_plain_unlock_slow(struct mutex *mutex);
*/
#define mutex_impl_init mutex_plain_init
-#define mutex_impl_assert_locked mutex_plain_assert_locked
+#define mutex_impl_locked mutex_plain_locked
static inline int
mutex_impl_trylock(struct mutex *mutex)