diff options
author | Richard Braun <rbraun@sceen.net> | 2017-04-09 16:02:36 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-04-09 16:03:29 +0200 |
commit | 42b089048fc0d3e67fa10cb411767afa161c7222 (patch) | |
tree | 56338238b840f8dcdec3227f01aba62b974cf87d /kern/mutex.h | |
parent | 239d8d2d4c14f917767c8c6d177aeb934df2c53a (diff) |
kern/{mutex,rtmutex,spinlock}: optimize fast paths
Rework so that fast paths occupy the first indentation level, and use
the unlikely macro on the relevant conditions.
Diffstat (limited to 'kern/mutex.h')
-rw-r--r-- | kern/mutex.h | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/kern/mutex.h b/kern/mutex.h index f9fcd35a..1100b77d 100644 --- a/kern/mutex.h +++ b/kern/mutex.h @@ -70,6 +70,7 @@ mutex_unlock(struct mutex *mutex) #include <kern/assert.h> #include <kern/error.h> +#include <kern/macros.h> #include <kern/mutex_i.h> #include <kern/thread.h> @@ -100,11 +101,12 @@ mutex_trylock(struct mutex *mutex) state = mutex_lock_fast(mutex); - if (state == MUTEX_UNLOCKED) { - return 0; + if (unlikely(state != MUTEX_UNLOCKED)) { + assert((state == MUTEX_LOCKED) || (state == MUTEX_CONTENDED)); + return ERROR_BUSY; } - return ERROR_BUSY; + return 0; } /* @@ -122,13 +124,10 @@ mutex_lock(struct mutex *mutex) state = mutex_lock_fast(mutex); - if (state == MUTEX_UNLOCKED) { - return; + if (unlikely(state != MUTEX_UNLOCKED)) { + assert((state == MUTEX_LOCKED) || (state == MUTEX_CONTENDED)); + mutex_lock_slow(mutex); } - - assert((state == MUTEX_LOCKED) || (state == MUTEX_CONTENDED)); - - mutex_lock_slow(mutex); } /* @@ -144,7 +143,7 @@ mutex_unlock(struct mutex *mutex) state = mutex_unlock_fast(mutex); - if (state != MUTEX_LOCKED) { + if (unlikely(state != MUTEX_LOCKED)) { assert(state == MUTEX_CONTENDED); mutex_unlock_slow(mutex); } |