Lines Matching refs:sem
82 __sem_wait_32_finish (struct new_sem *sem);
88 struct new_sem *sem = (struct new_sem *) arg; in __sem_wait_cleanup() local
92 atomic_fetch_add_relaxed (&sem->data, -((uint64_t) 1 << SEM_NWAITERS_SHIFT)); in __sem_wait_cleanup()
94 __sem_wait_32_finish (sem); in __sem_wait_cleanup()
105 do_futex_wait (struct new_sem *sem, clockid_t clockid, in do_futex_wait() argument
112 (unsigned int *) &sem->data + SEM_VALUE_OFFSET, 0, in do_futex_wait()
114 sem->private); in do_futex_wait()
116 err = __futex_abstimed_wait_cancelable64 (&sem->value, SEM_NWAITERS_MASK, in do_futex_wait()
117 clockid, abstime, sem->private); in do_futex_wait()
125 __new_sem_wait_fast (struct new_sem *sem, int definitive_result) in __new_sem_wait_fast() argument
136 uint64_t d = atomic_load_relaxed (&sem->data); in __new_sem_wait_fast()
141 if (atomic_compare_exchange_weak_acquire (&sem->data, &d, d - 1)) in __new_sem_wait_fast()
147 unsigned int v = atomic_load_relaxed (&sem->value); in __new_sem_wait_fast()
152 if (atomic_compare_exchange_weak_acquire (&sem->value, in __new_sem_wait_fast()
164 __new_sem_wait_slow64 (struct new_sem *sem, clockid_t clockid, in __new_sem_wait_slow64() argument
172 uint64_t d = atomic_fetch_add_relaxed (&sem->data, in __new_sem_wait_slow64()
175 pthread_cleanup_push (__sem_wait_cleanup, sem); in __new_sem_wait_slow64()
183 err = do_futex_wait (sem, clockid, abstime); in __new_sem_wait_slow64()
198 atomic_fetch_add_relaxed (&sem->data, in __new_sem_wait_slow64()
203 d = atomic_load_relaxed (&sem->data); in __new_sem_wait_slow64()
214 if (atomic_compare_exchange_weak_acquire (&sem->data, in __new_sem_wait_slow64()
254 atomic_fetch_add_acquire (&sem->nwaiters, 1); in __new_sem_wait_slow64()
256 pthread_cleanup_push (__sem_wait_cleanup, sem); in __new_sem_wait_slow64()
262 v = atomic_load_relaxed (&sem->value); in __new_sem_wait_slow64()
278 while (!atomic_compare_exchange_weak_release (&sem->value, in __new_sem_wait_slow64()
284 err = do_futex_wait (sem, clockid, abstime); in __new_sem_wait_slow64()
294 v = atomic_load_relaxed (&sem->value); in __new_sem_wait_slow64()
303 while (!atomic_compare_exchange_weak_acquire (&sem->value, in __new_sem_wait_slow64()
309 __sem_wait_32_finish (sem); in __new_sem_wait_slow64()
318 __sem_wait_32_finish (struct new_sem *sem) in __sem_wait_32_finish() argument
325 unsigned int wguess = atomic_load_relaxed (&sem->nwaiters); in __sem_wait_32_finish()
333 atomic_fetch_and_acquire (&sem->value, ~SEM_NWAITERS_MASK); in __sem_wait_32_finish()
339 unsigned int wfinal = atomic_fetch_add_release (&sem->nwaiters, -1); in __sem_wait_32_finish()
346 unsigned int v = atomic_fetch_or_relaxed (&sem->value, in __sem_wait_32_finish()
355 futex_wake (&sem->value, v, sem->private); in __sem_wait_32_finish()