Lines Matching refs:wp
299 futex_put(struct futex *f, struct waiting_proc *wp) in futex_put() argument
301 LIN_SDT_PROBE2(futex, futex_put, entry, f, wp); in futex_put()
303 if (wp != NULL) { in futex_put()
304 if ((wp->wp_flags & FUTEX_WP_REMOVED) == 0) in futex_put()
305 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_put()
306 free(wp, M_FUTEX_WP); in futex_put()
440 futex_get(uint32_t *uaddr, struct waiting_proc **wp, struct futex **f, in futex_get() argument
445 LIN_SDT_PROBE3(futex, futex_get, entry, uaddr, wp, f); in futex_get()
448 *wp = malloc(sizeof(struct waiting_proc), M_FUTEX_WP, M_WAITOK); in futex_get()
449 (*wp)->wp_flags = 0; in futex_get()
456 free(*wp, M_FUTEX_WP); in futex_get()
462 TAILQ_INSERT_HEAD(&(*f)->f_waiting_proc, *wp, wp_list); in futex_get()
463 (*wp)->wp_futex = *f; in futex_get()
491 futex_sleep(struct futex *f, struct waiting_proc *wp, struct timespec *ts) in futex_sleep() argument
515 LIN_SDT_PROBE3(futex, futex_sleep, entry, f, wp, sbt); in futex_sleep()
517 f->f_uaddr, wp, sbt, f->f_refcount); in futex_sleep()
519 error = msleep_sbt(wp, &f->f_lck, PCATCH, "futex", sbt, prec, C_ABSOLUTE); in futex_sleep()
520 if (wp->wp_flags & FUTEX_WP_REQUEUED) { in futex_sleep()
521 KASSERT(f != wp->wp_futex, ("futex != wp_futex")); in futex_sleep()
525 f->f_uaddr, wp, wp->wp_futex->f_uaddr, in futex_sleep()
526 wp->wp_futex->f_refcount); in futex_sleep()
531 error, f->f_uaddr, wp, wp->wp_futex->f_uaddr, in futex_sleep()
532 wp->wp_futex->f_refcount); in futex_sleep()
534 f = wp->wp_futex; in futex_sleep()
539 f->f_uaddr, wp); in futex_sleep()
542 error, f->f_uaddr, wp); in futex_sleep()
545 futex_put(f, wp); in futex_sleep()
554 struct waiting_proc *wp, *wpt; in futex_wake() local
565 TAILQ_FOREACH_SAFE(wp, &f->f_waiting_proc, wp_list, wpt) { in futex_wake()
566 LIN_SDT_PROBE3(futex, futex_wake, iterate, f->f_uaddr, wp, in futex_wake()
569 f->f_uaddr, wp, f->f_refcount); in futex_wake()
574 if (!(wp->wp_futex->f_bitset & bitset)) in futex_wake()
577 wp->wp_flags |= FUTEX_WP_REMOVED; in futex_wake()
578 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_wake()
579 LIN_SDT_PROBE1(futex, futex_wake, wakeup, wp); in futex_wake()
580 wakeup_one(wp); in futex_wake()
593 struct waiting_proc *wp, *wpt; in futex_requeue() local
601 TAILQ_FOREACH_SAFE(wp, &f->f_waiting_proc, wp_list, wpt) { in futex_requeue()
604 f->f_uaddr, wp); in futex_requeue()
605 wp->wp_flags |= FUTEX_WP_REMOVED; in futex_requeue()
606 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_requeue()
607 LIN_SDT_PROBE1(futex, futex_requeue, wakeup, wp); in futex_requeue()
608 wakeup_one(wp); in futex_requeue()
611 f->f_uaddr, wp, f2->f_uaddr); in futex_requeue()
613 f->f_uaddr, wp, f2->f_uaddr); in futex_requeue()
614 wp->wp_flags |= FUTEX_WP_REQUEUED; in futex_requeue()
616 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_requeue()
617 TAILQ_INSERT_HEAD(&f2->f_waiting_proc, wp, wp_list); in futex_requeue()
624 wp->wp_futex = f2; in futex_requeue()
638 futex_wait(struct futex *f, struct waiting_proc *wp, struct timespec *ts, in futex_wait() argument
643 LIN_SDT_PROBE4(futex, futex_wait, entry, f, wp, ts, bitset); in futex_wait()
647 futex_put(f, wp); in futex_wait()
652 error = futex_sleep(f, wp, ts); in futex_wait()
742 struct waiting_proc *wp; in linux_sys_futex() local
800 error = futex_get(args->uaddr, &wp, &f, in linux_sys_futex()
809 futex_put(f, wp); in linux_sys_futex()
827 futex_put(f, wp); in linux_sys_futex()
834 error = futex_wait(f, wp, ts, args->val3); in linux_sys_futex()