Rev 1460 | Rev 1583 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1460 | Rev 1502 | ||
|---|---|---|---|
| Line 97... | Line 97... | ||
| 97 | 97 | ||
| 98 | /** Sleep in futex wait queue. |
98 | /** Sleep in futex wait queue. |
| 99 | * |
99 | * |
| 100 | * @param uaddr Userspace address of the futex counter. |
100 | * @param uaddr Userspace address of the futex counter. |
| 101 | * @param usec If non-zero, number of microseconds this thread is willing to sleep. |
101 | * @param usec If non-zero, number of microseconds this thread is willing to sleep. |
| 102 | * @param trydown If usec is zero and trydown is non-zero, conditional operation will be attempted. |
102 | * @param flags Select mode of operation. |
| 103 | * |
103 | * |
| 104 | * @return One of ESYNCH_TIMEOUT, ESYNCH_OK_ATOMIC and ESYNCH_OK_BLOCKED. See synch.h. |
104 | * @return One of ESYNCH_TIMEOUT, ESYNCH_OK_ATOMIC and ESYNCH_OK_BLOCKED. See synch.h. |
| 105 | * If there is no physical mapping for uaddr ENOENT is returned. |
105 | * If there is no physical mapping for uaddr ENOENT is returned. |
| 106 | */ |
106 | */ |
| 107 | __native sys_futex_sleep_timeout(__address uaddr, __u32 usec, int trydown) |
107 | __native sys_futex_sleep_timeout(__address uaddr, __u32 usec, int flags) |
| 108 | { |
108 | { |
| 109 | futex_t *futex; |
109 | futex_t *futex; |
| 110 | __address paddr; |
110 | __address paddr; |
| 111 | pte_t *t; |
111 | pte_t *t; |
| 112 | ipl_t ipl; |
112 | ipl_t ipl; |
| Line 128... | Line 128... | ||
| 128 | 128 | ||
| 129 | interrupts_restore(ipl); |
129 | interrupts_restore(ipl); |
| 130 | 130 | ||
| 131 | futex = futex_find(paddr); |
131 | futex = futex_find(paddr); |
| 132 | 132 | ||
| 133 | return (__native) waitq_sleep_timeout(&futex->wq, usec, trydown); |
133 | return (__native) waitq_sleep_timeout(&futex->wq, usec, flags | SYNCH_FLAGS_INTERRUPTIBLE); |
| 134 | } |
134 | } |
| 135 | 135 | ||
| 136 | /** Wakeup one thread waiting in futex wait queue. |
136 | /** Wakeup one thread waiting in futex wait queue. |
| 137 | * |
137 | * |
| 138 | * @param uaddr Userspace address of the futex counter. |
138 | * @param uaddr Userspace address of the futex counter. |