Lines Matching refs:futex

72     rt_futex_t futex = (rt_futex_t)data;  in _pftx_destroy_locked()  local
74 if (futex) in _pftx_destroy_locked()
85 lwp_avl_remove(&futex->node, in _pftx_destroy_locked()
86 (struct lwp_avl_struct **)futex->node.data); in _pftx_destroy_locked()
89 if (futex->mutex) in _pftx_destroy_locked()
91 rt_mutex_delete(futex->mutex); in _pftx_destroy_locked()
92 futex->mutex = RT_NULL; in _pftx_destroy_locked()
94 rt_free(futex); in _pftx_destroy_locked()
106 rt_futex_t futex = RT_NULL; in _pftx_create_locked() local
117 futex = (rt_futex_t)rt_malloc(sizeof(struct rt_futex)); in _pftx_create_locked()
118 if (futex) in _pftx_create_locked()
121 obj = rt_custom_object_create("pftx", (void *)futex, in _pftx_create_locked()
125 rt_free(futex); in _pftx_create_locked()
126 futex = RT_NULL; in _pftx_create_locked()
144 rt_free(futex); in _pftx_create_locked()
145 futex = RT_NULL; in _pftx_create_locked()
149 futex->node.avl_key = (avl_key_t)uaddr; in _pftx_create_locked()
150 futex->node.data = &lwp->address_search_head; in _pftx_create_locked()
151 futex->custom_obj = obj; in _pftx_create_locked()
152 futex->mutex = RT_NULL; in _pftx_create_locked()
153 rt_list_init(&(futex->waiting_thread)); in _pftx_create_locked()
161 lwp_avl_insert(&futex->node, &lwp->address_search_head); in _pftx_create_locked()
166 return futex; in _pftx_create_locked()
176 rt_futex_t futex = RT_NULL; in _pftx_get() local
188 futex = rt_container_of(node, struct rt_futex, node); in _pftx_get()
194 futex = _pftx_create_locked(uaddr, lwp); in _pftx_get()
196 if (!futex) in _pftx_get()
204 return futex; in _pftx_get()
214 rt_futex_t futex = (rt_futex_t)data; in _sftx_destroy() local
216 if (futex) in _sftx_destroy()
219 futex_global_table_delete(&futex->entry.key); in _sftx_destroy()
220 if (futex->mutex) in _sftx_destroy()
222 rt_mutex_delete(futex->mutex); in _sftx_destroy()
223 futex->mutex = RT_NULL; in _sftx_destroy()
225 rt_free(futex); in _sftx_destroy()
236 rt_futex_t futex = RT_NULL; in _sftx_create() local
241 futex = (rt_futex_t)rt_calloc(1, sizeof(struct rt_futex)); in _sftx_create()
242 if (futex) in _sftx_create()
245 obj = rt_custom_object_create("sftx", (void *)futex, _sftx_destroy); in _sftx_create()
248 rt_free(futex); in _sftx_create()
249 futex = RT_NULL; in _sftx_create()
253 if (futex_global_table_add(key, futex)) in _sftx_create()
256 rt_free(futex); in _sftx_create()
257 futex = RT_NULL; in _sftx_create()
261 futex->mutex = RT_NULL; in _sftx_create()
262 rt_list_init(&(futex->waiting_thread)); in _sftx_create()
263 futex->custom_obj = obj; in _sftx_create()
268 return futex; in _sftx_create()
277 rt_futex_t futex = RT_NULL; in _sftx_get() local
293 error = futex_global_table_find(&key, &futex); in _sftx_get()
297 futex = _sftx_create(&key, lwp); in _sftx_get()
298 if (!futex) in _sftx_get()
311 return futex; in _sftx_get()
318 rt_futex_t futex = RT_NULL; in _futex_get() local
322 futex = _pftx_get(uaddr, lwp, op_flags, rc); in _futex_get()
326 futex = _sftx_get(uaddr, lwp, op_flags, rc); in _futex_get()
329 return futex; in _futex_get()
333 rt_futex_t futex, in _suspend_thread_timeout_locked() argument
344 rc = rt_thread_suspend_to_list(thread, &futex->waiting_thread, in _suspend_thread_timeout_locked()
359 static rt_err_t _suspend_thread_locked(rt_thread_t thread, rt_futex_t futex) in _suspend_thread_locked() argument
367 return rt_thread_suspend_to_list(thread, &futex->waiting_thread, in _suspend_thread_locked()
392 static int _futex_wait(rt_futex_t futex, struct rt_lwp *lwp, int *uaddr, in _futex_wait() argument
427 rc = _suspend_thread_timeout_locked(thread, futex, to); in _futex_wait()
435 rc = _suspend_thread_locked(thread, futex); in _futex_wait()
459 static long _futex_wake(rt_futex_t futex, struct rt_lwp *lwp, int number, in _futex_wake() argument
474 if (rt_susp_list_dequeue(&futex->waiting_thread, RT_EOK)) in _futex_wake()
566 static long _futex_lock_pi(rt_futex_t futex, struct rt_lwp *lwp, int *uaddr, in _futex_lock_pi() argument
620 if (futex->mutex == RT_NULL) in _futex_lock_pi()
622 futex->mutex = rt_mutex_create("futexpi", RT_IPC_FLAG_PRIO); in _futex_lock_pi()
623 if (futex->mutex == RT_NULL) in _futex_lock_pi()
630 rt_spin_lock(&(futex->mutex->spinlock)); in _futex_lock_pi()
631 futex->mutex->owner = thread; in _futex_lock_pi()
632 futex->mutex->hold = 1; in _futex_lock_pi()
633 rt_spin_unlock(&(futex->mutex->spinlock)); in _futex_lock_pi()
646 err = rt_mutex_take_interruptible(futex->mutex, to); in _futex_lock_pi()
663 static long _futex_unlock_pi(rt_futex_t futex, struct rt_lwp *lwp, int op_flags) in _futex_unlock_pi() argument
667 if (!futex->mutex) in _futex_unlock_pi()
674 err = rt_mutex_release(futex->mutex); in _futex_unlock_pi()
722 rt_futex_t futex, futex2; in lwp_futex() local
727 futex = _futex_get(uaddr, lwp, op_flags, &rc); in lwp_futex()
733 rc = _futex_wait(futex, lwp, uaddr, val, timeout, op_flags); in lwp_futex()
736 rc = _futex_wake(futex, lwp, val, op_flags); in lwp_futex()
743 rc = _futex_requeue(futex, futex2, lwp, val, (long)timeout, in lwp_futex()
761 rc = _futex_requeue(futex, futex2, lwp, val, in lwp_futex()
767 rc = _futex_lock_pi(futex, lwp, uaddr, timeout, op_flags, in lwp_futex()
771 rc = _futex_unlock_pi(futex, lwp, op_flags); in lwp_futex()
774 rc = _futex_lock_pi(futex, lwp, uaddr, 0, op_flags, RT_TRUE); in lwp_futex()
814 rt_futex_t futex; in _handle_futex_death() local
834 futex = _futex_get(uaddr, lwp, FUTEX_PRIVATE, &rc); in _handle_futex_death()
837 _futex_wake(futex, lwp, 1, FUTEX_PRIVATE); in _handle_futex_death()
865 _futex_wake(futex, lwp, 1, FUTEX_PRIVATE); in _handle_futex_death()