aboutsummaryrefslogtreecommitdiffstats
path: root/include/condvar.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/condvar.h')
-rw-r--r--include/condvar.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/include/condvar.h b/include/condvar.h
index cba7678..8ee3859 100644
--- a/include/condvar.h
+++ b/include/condvar.h
@@ -6,7 +6,7 @@
6#include <sys/syscall.h> 6#include <sys/syscall.h>
7#include <linux/futex.h> 7#include <linux/futex.h>
8 8
9#include "ticketlock.h" 9#include "spinlock.h"
10 10
11typedef int seq_t; 11typedef int seq_t;
12 12
@@ -36,32 +36,32 @@ static inline void cv_init_shared(cv_t* cv)
36 *cv = CV_INITIALIZER_PUBLIC; 36 *cv = CV_INITIALIZER_PUBLIC;
37} 37}
38 38
39static inline int cv_wait(cv_t* cv, ticketlock_t* l) 39static inline int cv_wait(cv_t* cv, spinlock_t* l)
40{ 40{
41 int ret; 41 int ret;
42 int wait_mode = (cv->mode == CV_PRIVATE) ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT; 42 int wait_mode = (cv->mode == CV_PRIVATE) ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT;
43 seq_t seq = cv->seq; 43 seq_t seq = cv->seq;
44 44
45 ++cv->waiters; 45 ++cv->waiters;
46 tl_unlock(l); /* memory barrier */ 46 spin_unlock(l); /* memory barrier */
47 ret = syscall(SYS_futex, &cv->seq, wait_mode, seq, NULL, NULL, 0); 47 ret = syscall(SYS_futex, &cv->seq, wait_mode, seq, NULL, NULL, 0);
48 tl_lock(l); 48 spin_lock(l);
49 --cv->waiters; 49 --cv->waiters;
50 50
51 return ret; 51 return ret;
52} 52}
53 53
54#ifndef PGM_PREEMPTIVE 54#ifndef PGM_PREEMPTIVE
55static inline int cv_wait_np(cv_t* cv, ticketlock_t* l, unsigned long *flags) 55static inline int cv_wait_np(cv_t* cv, spinlock_t* l, unsigned long *flags)
56{ 56{
57 int ret; 57 int ret;
58 int wait_mode = (cv->mode == CV_PRIVATE) ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT; 58 int wait_mode = (cv->mode == CV_PRIVATE) ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT;
59 seq_t seq = cv->seq; 59 seq_t seq = cv->seq;
60 60
61 ++cv->waiters; 61 ++cv->waiters;
62 tl_unlock_np(l, *flags); /* memory barrier */ 62 spin_unlock_np(l, *flags); /* memory barrier */
63 ret = syscall(SYS_futex, &cv->seq, wait_mode, seq, NULL, NULL, 0); 63 ret = syscall(SYS_futex, &cv->seq, wait_mode, seq, NULL, NULL, 0);
64 tl_lock_np(l, flags); 64 spin_lock_np(l, flags);
65 --cv->waiters; 65 --cv->waiters;
66 66
67 return ret; 67 return ret;