diff options
Diffstat (limited to 'kern/mutex')
-rw-r--r-- | kern/mutex/mutex_adaptive_i.h | 12 | ||||
-rw-r--r-- | kern/mutex/mutex_pi_i.h | 8 | ||||
-rw-r--r-- | kern/mutex/mutex_plain_i.h | 14 |
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) |