futex
unsigned int futex;
stub_data->futex = FUTEX_IN_KERN;
os_futex_wake(&stub_data->futex);
d->futex = FUTEX_IN_KERN;
res = stub_syscall3(__NR_futex, (unsigned long)&d->futex,
res = stub_syscall4(__NR_futex, (unsigned long)&d->futex,
} while (res == -EINTR || d->futex == FUTEX_IN_KERN);
data->futex = FUTEX_IN_CHILD;
CATCH_EINTR(syscall(__NR_futex, &data->futex,
ret = syscall(__NR_futex, &data->futex,
} while (data->futex == FUTEX_IN_CHILD);
proc_data->futex = FUTEX_IN_CHILD;
} futex;
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
restart->futex.uaddr = uaddr;
restart->futex.val = val;
restart->futex.time = *abs_time;
restart->futex.bitset = bitset;
restart->futex.flags = flags | FLAGS_HAS_TIMEOUT;
u32 __user *uaddr = restart->futex.uaddr;
if (restart->futex.flags & FLAGS_HAS_TIMEOUT)
tp = &restart->futex.time;
return (long)futex_wait(uaddr, restart->futex.flags,
restart->futex.val, tp, restart->futex.bitset);
COND_SYSCALL(futex);
worker[i].futex = calloc(params.nfutexes, sizeof(*worker[i].futex));
if (!worker[i].futex)
worker[i].tid, &worker[i].futex[0], t);
worker[i].tid, &worker[i].futex[0],
&worker[i].futex[params.nfutexes-1], t);
zfree(&worker[i].futex);
u_int32_t *futex;
ret = futex_wait(&w->futex[i], 1234, NULL, futex_flag);
ret = futex_lock_pi(w->futex, NULL, futex_flag);
w->tid, w->futex, ret);
ret = futex_unlock_pi(w->futex, futex_flag);
w->tid, w->futex, ret);
worker[i].futex = calloc(1, sizeof(u_int32_t));
if (!worker[i].futex)
worker[i].futex = &global_futex;
worker[i].tid, worker[i].futex, t);
zfree(&worker[i].futex);
u_int32_t *futex;
if (futex_wait(&futex, 0, NULL, futex_flag) != EINTR)
&futex, params.nwakes, nwakes);
static u_int32_t futex = 0;
waker->nwoken = futex_wake(&futex, nwakes, futex_flag);
futex_numa->futex = 0;
futex_numa->futex = 0;
futex = shm;
ksft_print_dbg_msg("Calling shared (file backed) futex_wait on futex: %p\n", futex);
ksft_print_dbg_msg("Calling shared (file backed) futex_wake on futex: %p\n", futex);
void *futex;
if (futex_wait(futex, 0, &to, flags))
futex = &f_private;
ksft_print_dbg_msg("Calling private futex_wait on futex: %p\n", futex);
ksft_print_dbg_msg("Calling private futex_wake on futex: %p\n", futex);
res = futex_wake(futex, 1, FUTEX_PRIVATE_FLAG);
futex = shared_data;
ksft_print_dbg_msg("Calling shared (page anon) futex_wait on futex: %p\n", futex);
ksft_print_dbg_msg("Calling shared (page anon) futex_wake on futex: %p\n", futex);
res = futex_wake(futex, 1, 0);
head->futex_offset = (size_t) offsetof(struct lock_struct, futex) -
_Atomic(unsigned int) *futex = &lock->futex;
if (atomic_compare_exchange_strong(futex, &zero, tid)) {
tid = atomic_load(futex);
atomic_store(futex, tid);
ret = futex_wait((futex_t *) futex, tid, &to, 0);
struct lock_struct lock = { .futex = 0 };
_Atomic(unsigned int) *futex = &lock.futex;
ASSERT_TRUE(*futex & FUTEX_OWNER_DIED);
struct lock_struct lock = { .futex = 0 };
_Atomic(unsigned int) *futex = &lock.futex;
ASSERT_TRUE(*futex & FUTEX_OWNER_DIED);
locks[i].futex = 0;
if (!(lock->futex & FUTEX_OWNER_DIED)) {
_Atomic(unsigned int) futex;
futex_t futex;
return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags);
return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags);
return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset,
return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset,
return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags);
return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags);
return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op,
return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0,
return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2,
return futex(uaddr, FUTEX_WAIT_REQUEUE_PI, val, timeout, uaddr2, 0,
return futex(uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake, nr_requeue, uaddr2,
futex(&addr, FUTEX_WAKE, 1, NULL, NULL, 0);