summaryrefslogtreecommitdiff
path: root/kern/rtmutex.h
diff options
context:
space:
mode:
Diffstat (limited to 'kern/rtmutex.h')
-rw-r--r--kern/rtmutex.h15
1 files changed, 7 insertions, 8 deletions
diff --git a/kern/rtmutex.h b/kern/rtmutex.h
index 86c3793..e5cb5e5 100644
--- a/kern/rtmutex.h
+++ b/kern/rtmutex.h
@@ -28,6 +28,7 @@
#include <kern/assert.h>
#include <kern/error.h>
+#include <kern/macros.h>
#include <kern/rtmutex_i.h>
#include <kern/rtmutex_types.h>
@@ -58,11 +59,11 @@ rtmutex_trylock(struct rtmutex *rtmutex)
prev_owner = rtmutex_lock_fast(rtmutex);
- if (prev_owner == 0) {
- return 0;
+ if (unlikely(prev_owner != 0)) {
+ return ERROR_BUSY;
}
- return ERROR_BUSY;
+ return 0;
}
/*
@@ -81,11 +82,9 @@ rtmutex_lock(struct rtmutex *rtmutex)
prev_owner = rtmutex_lock_fast(rtmutex);
- if (prev_owner == 0) {
- return;
+ if (unlikely(prev_owner != 0)) {
+ rtmutex_lock_slow(rtmutex);
}
-
- rtmutex_lock_slow(rtmutex);
}
/*
@@ -101,7 +100,7 @@ rtmutex_unlock(struct rtmutex *rtmutex)
prev_owner = rtmutex_unlock_fast(rtmutex);
- if (!(prev_owner & RTMUTEX_CONTENDED)) {
+ if (prev_owner & RTMUTEX_CONTENDED) {
return;
}