Lines Matching refs:wp
302 futex_put(struct futex *f, struct waiting_proc *wp) in futex_put() argument
304 LIN_SDT_PROBE2(futex, futex_put, entry, f, wp); in futex_put()
306 if (wp != NULL) { in futex_put()
307 if ((wp->wp_flags & FUTEX_WP_REMOVED) == 0) in futex_put()
308 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_put()
309 free(wp, M_FUTEX_WP); in futex_put()
443 futex_get(uint32_t *uaddr, struct waiting_proc **wp, struct futex **f, in futex_get() argument
448 LIN_SDT_PROBE3(futex, futex_get, entry, uaddr, wp, f); in futex_get()
451 *wp = malloc(sizeof(struct waiting_proc), M_FUTEX_WP, M_WAITOK); in futex_get()
452 (*wp)->wp_flags = 0; in futex_get()
459 free(*wp, M_FUTEX_WP); in futex_get()
465 TAILQ_INSERT_HEAD(&(*f)->f_waiting_proc, *wp, wp_list); in futex_get()
466 (*wp)->wp_futex = *f; in futex_get()
494 futex_sleep(struct futex *f, struct waiting_proc *wp, struct timespec *ts) in futex_sleep() argument
518 LIN_SDT_PROBE3(futex, futex_sleep, entry, f, wp, sbt); in futex_sleep()
520 f->f_uaddr, wp, sbt, f->f_refcount); in futex_sleep()
522 error = msleep_sbt(wp, &f->f_lck, PCATCH, "futex", sbt, prec, C_ABSOLUTE); in futex_sleep()
523 if (wp->wp_flags & FUTEX_WP_REQUEUED) { in futex_sleep()
524 KASSERT(f != wp->wp_futex, ("futex != wp_futex")); in futex_sleep()
528 f->f_uaddr, wp, wp->wp_futex->f_uaddr, in futex_sleep()
529 wp->wp_futex->f_refcount); in futex_sleep()
534 error, f->f_uaddr, wp, wp->wp_futex->f_uaddr, in futex_sleep()
535 wp->wp_futex->f_refcount); in futex_sleep()
537 f = wp->wp_futex; in futex_sleep()
542 f->f_uaddr, wp); in futex_sleep()
545 error, f->f_uaddr, wp); in futex_sleep()
548 futex_put(f, wp); in futex_sleep()
557 struct waiting_proc *wp, *wpt; in futex_wake() local
568 TAILQ_FOREACH_SAFE(wp, &f->f_waiting_proc, wp_list, wpt) { in futex_wake()
569 LIN_SDT_PROBE3(futex, futex_wake, iterate, f->f_uaddr, wp, in futex_wake()
572 f->f_uaddr, wp, f->f_refcount); in futex_wake()
577 if (!(wp->wp_futex->f_bitset & bitset)) in futex_wake()
580 wp->wp_flags |= FUTEX_WP_REMOVED; in futex_wake()
581 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_wake()
582 LIN_SDT_PROBE1(futex, futex_wake, wakeup, wp); in futex_wake()
583 wakeup_one(wp); in futex_wake()
595 struct waiting_proc *wp, *wpt; in futex_requeue() local
603 TAILQ_FOREACH_SAFE(wp, &f->f_waiting_proc, wp_list, wpt) { in futex_requeue()
606 f->f_uaddr, wp); in futex_requeue()
607 wp->wp_flags |= FUTEX_WP_REMOVED; in futex_requeue()
608 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_requeue()
609 LIN_SDT_PROBE1(futex, futex_requeue, wakeup, wp); in futex_requeue()
610 wakeup_one(wp); in futex_requeue()
613 f->f_uaddr, wp, f2->f_uaddr); in futex_requeue()
615 f->f_uaddr, wp, f2->f_uaddr); in futex_requeue()
616 wp->wp_flags |= FUTEX_WP_REQUEUED; in futex_requeue()
618 TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list); in futex_requeue()
619 TAILQ_INSERT_HEAD(&f2->f_waiting_proc, wp, wp_list); in futex_requeue()
626 wp->wp_futex = f2; in futex_requeue()
640 futex_wait(struct futex *f, struct waiting_proc *wp, struct timespec *ts, in futex_wait() argument
645 LIN_SDT_PROBE4(futex, futex_wait, entry, f, wp, ts, bitset); in futex_wait()
653 error = futex_sleep(f, wp, ts); in futex_wait()
743 struct waiting_proc *wp; in linux_sys_futex() local
801 error = futex_get(args->uaddr, &wp, &f, in linux_sys_futex()
810 futex_put(f, wp); in linux_sys_futex()
828 futex_put(f, wp); in linux_sys_futex()
835 error = futex_wait(f, wp, ts, args->val3); in linux_sys_futex()