Lines Matching refs:lwp
29 static void _futex_lock(rt_lwp_t lwp, int op_flags) in _futex_lock() argument
34 LWP_LOCK(lwp); in _futex_lock()
47 static void _futex_unlock(rt_lwp_t lwp, int op_flags) in _futex_unlock() argument
52 LWP_UNLOCK(lwp); in _futex_unlock()
104 static rt_futex_t _pftx_create_locked(int *uaddr, struct rt_lwp *lwp) in _pftx_create_locked() argument
115 if (lwp) in _pftx_create_locked()
140 if (lwp_user_object_add(lwp, obj)) in _pftx_create_locked()
150 futex->node.data = &lwp->address_search_head; in _pftx_create_locked()
161 lwp_avl_insert(&futex->node, &lwp->address_search_head); in _pftx_create_locked()
172 static rt_futex_t _pftx_get(void *uaddr, struct rt_lwp *lwp, int op, in _pftx_get() argument
179 LWP_LOCK(lwp); in _pftx_get()
185 node = lwp_avl_find((avl_key_t)uaddr, lwp->address_search_head); in _pftx_get()
194 futex = _pftx_create_locked(uaddr, lwp); in _pftx_get()
201 LWP_UNLOCK(lwp); in _pftx_get()
234 static rt_futex_t _sftx_create(struct shared_futex_key *key, struct rt_lwp *lwp) in _sftx_create() argument
239 if (lwp) in _sftx_create()
274 static rt_futex_t _sftx_get(void *uaddr, struct rt_lwp *lwp, int op, in _sftx_get() argument
282 RD_LOCK(lwp->aspace); in _sftx_get()
283 varea = rt_aspace_query(lwp->aspace, uaddr); in _sftx_get()
289 RD_UNLOCK(lwp->aspace); in _sftx_get()
292 _futex_lock(lwp, op & ~FUTEX_PRIVATE); in _sftx_get()
297 futex = _sftx_create(&key, lwp); in _sftx_get()
303 _futex_unlock(lwp, op & ~FUTEX_PRIVATE); in _sftx_get()
307 RD_UNLOCK(lwp->aspace); in _sftx_get()
315 static rt_futex_t _futex_get(void *uaddr, struct rt_lwp *lwp, int op_flags, in _futex_get() argument
322 futex = _pftx_get(uaddr, lwp, op_flags, rc); in _futex_get()
326 futex = _sftx_get(uaddr, lwp, op_flags, rc); in _futex_get()
392 static int _futex_wait(rt_futex_t futex, struct rt_lwp *lwp, int *uaddr, in _futex_wait() argument
408 _futex_lock(lwp, op_flags); in _futex_wait()
422 _futex_unlock(lwp, op_flags); in _futex_wait()
428 _futex_unlock(lwp, op_flags); in _futex_wait()
436 _futex_unlock(lwp, op_flags); in _futex_wait()
451 _futex_unlock(lwp, op_flags); in _futex_wait()
459 static long _futex_wake(rt_futex_t futex, struct rt_lwp *lwp, int number, in _futex_wake() argument
473 _futex_lock(lwp, op_flags); in _futex_wake()
484 _futex_unlock(lwp, op_flags); in _futex_wake()
499 struct rt_lwp *lwp, int nr_wake, int nr_requeue, in _futex_requeue() argument
566 static long _futex_lock_pi(rt_futex_t futex, struct rt_lwp *lwp, int *uaddr, in _futex_lock_pi() argument
583 _futex_lock(lwp, op_flags); in _futex_lock_pi()
594 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
597 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
605 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
614 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
625 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
644 _futex_unlock(lwp, op_flags); in _futex_lock_pi()
652 _futex_lock(lwp, op_flags); in _futex_lock_pi()
658 _futex_unlock(lwp, op_flags); 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
666 _futex_lock(lwp, op_flags); in _futex_unlock_pi()
669 _futex_unlock(lwp, op_flags); in _futex_unlock_pi()
672 _futex_unlock(lwp, op_flags); in _futex_unlock_pi()
697 struct rt_lwp *lwp = RT_NULL; in sys_futex() local
711 lwp = lwp_self(); in sys_futex()
712 ret = lwp_futex(lwp, uaddr, op, val, timeout, uaddr2, val3); in sys_futex()
719 rt_err_t lwp_futex(struct rt_lwp *lwp, int *uaddr, int op, int val, in lwp_futex() argument
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()
739 futex2 = _futex_get(uaddr2, lwp, op_flags, &rc); in lwp_futex()
742 _futex_lock(lwp, op_flags); in lwp_futex()
743 rc = _futex_requeue(futex, futex2, lwp, val, (long)timeout, in lwp_futex()
745 _futex_unlock(lwp, op_flags); in lwp_futex()
749 futex2 = _futex_get(uaddr2, lwp, op_flags, &rc); in lwp_futex()
750 _futex_lock(lwp, op_flags); in lwp_futex()
761 rc = _futex_requeue(futex, futex2, lwp, val, in lwp_futex()
764 _futex_unlock(lwp, op_flags); 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()
813 struct rt_lwp *lwp; in _handle_futex_death() local
820 lwp = thread->lwp; in _handle_futex_death()
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()