/Linux-v4.19/tools/testing/selftests/futex/include/ |
D | futextest.h | 74 #define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ macro 84 return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); in futex_wait() 94 return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags); in futex_wake() 105 return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset, in futex_wait_bitset() 116 return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset, in futex_wake_bitset() 128 return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags); in futex_lock_pi() 137 return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags); in futex_unlock_pi() 147 return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op, in futex_wake_op() 163 return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0, in futex_requeue() 176 return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2, in futex_cmp_requeue() [all …]
|
/Linux-v4.19/tools/perf/bench/ |
D | futex.h | 36 #define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ macro 46 return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); in futex_wait() 56 return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags); in futex_wake() 65 return futex(uaddr, FUTEX_LOCK_PI, 0, timeout, NULL, 0, opflags); in futex_lock_pi() 74 return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags); in futex_unlock_pi() 86 return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2, in futex_cmp_requeue()
|
D | futex-lock-pi.c | 26 u_int32_t *futex; member 93 ret = futex_lock_pi(w->futex, NULL, futex_flag); in workerfn() 98 w->tid, w->futex, ret); in workerfn() 106 ret = futex_unlock_pi(w->futex, futex_flag); in workerfn() 109 w->tid, w->futex, ret); in workerfn() 129 worker[i].futex = calloc(1, sizeof(u_int32_t)); in create_threads() 130 if (!worker[i].futex) in create_threads() 133 worker[i].futex = &global_futex; in create_threads() 217 worker[i].tid, worker[i].futex, t); in bench_futex_lock_pi() 220 free(worker[i].futex); in bench_futex_lock_pi()
|
D | Build | 4 perf-y += futex-hash.o 5 perf-y += futex-wake.o 6 perf-y += futex-wake-parallel.o 7 perf-y += futex-requeue.o 8 perf-y += futex-lock-pi.o
|
D | futex-hash.c | 46 u_int32_t *futex; member 87 ret = futex_wait(&w->futex[i], 1234, NULL, futex_flag); in workerfn() 165 worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex)); in bench_futex_hash() 166 if (!worker[i].futex) in bench_futex_hash() 210 worker[i].tid, &worker[i].futex[0], t); in bench_futex_hash() 213 worker[i].tid, &worker[i].futex[0], in bench_futex_hash() 214 &worker[i].futex[nfutexes-1], t); in bench_futex_hash() 217 free(worker[i].futex); in bench_futex_hash()
|
D | futex-wake-parallel.c | 47 static u_int32_t futex = 0; variable 81 waker->nwoken = futex_wake(&futex, nwakes, futex_flag); in waking_workerfn() 132 if (futex_wait(&futex, 0, NULL, futex_flag) != EINTR) in blocked_workerfn() 269 &futex, nwaking_threads, nwakes); in bench_futex_wake_parallel()
|
/Linux-v4.19/Documentation/ |
D | pi-futex.txt | 7 - in the user-space fastpath a PI-enabled futex involves no kernel work 64 locks (such as futex-based pthread mutexes) is priority inheritance: 80 normal futex-based locks: a 0 value means unlocked, and a value==TID 85 To handle the slowpath, we have added two new futex ops: 92 remaining work: if there is no futex-queue attached to the futex address 93 yet then the code looks up the task that owns the futex [it has put its 94 own TID into the futex value], and attaches a 'PI state' structure to 95 the futex-queue. The pi_state includes an rt-mutex, which is a PI-aware, 98 futex value. Then this task tries to lock the rt-mutex, on which it 100 futex value to its own TID and returns. Userspace has no other work to [all …]
|
D | robust-futexes.txt | 15 A futex is in essence a user-space address, e.g. a 32-bit lock variable 20 creates a 'futex queue' internally, so that it can later on match up the 22 When the owner thread releases the futex, it notices (via the variable 25 taken and released the lock, the futex is again back to 'uncontended' 27 completely forgets that there ever was a futex at that address. This 42 There is a big conceptual problem with futex based mutexes though: it is 44 the kernel cannot help with the cleanup: if there is no 'futex queue' 51 is needed to release that futex based lock. This is one of the leading 76 are to be cleaned up, because a robust futex might have been registered 77 in another task, and the futex variable might have been simply mmap()-ed [all …]
|
D | robust-futex-ABI.txt | 2 The robust futex ABI 26 waiting on a particular futex, and waking up the next waiter on a 27 particular futex. 80 lock variable used by the futex mechanism, in conjunction with 82 waiting for a lock on a threads exit if that next thread used the futex 85 For each futex lock currently held by a thread, if it wants this 91 that lock using the futex mechanism. 118 existing futex mechanism to wait for, and wakeup, locks. The kernels 123 There may exist thousands of futex lock structures in a threads shared 128 A given futex lock structure in a user shared memory region may be held [all …]
|
D | futex-requeue-pi.txt | 5 Requeueing of tasks from a non-PI futex to a PI futex requires 56 user space already holding the PI futex. The glibc implementation 105 and pthread_cond_timedwait()) to block on the initial futex and wait 106 to be requeued to a PI-aware futex. The implementation is the 116 PI futex on behalf of the top waiter. If it can, this waiter is 118 nr_wake+nr_requeue tasks to the PI futex, calling
|
D | 00-INDEX | 161 futex-requeue-pi.txt 162 - info on requeueing of tasks from a non-PI futex to a PI futex 311 pi-futex.txt 345 robust-futex-ABI.txt 346 - documentation of the robust futex ABI.
|
/Linux-v4.19/tools/testing/selftests/powerpc/benchmarks/ |
D | futex_bench.c | 18 #define futex(A, B, C, D, E, F) syscall(__NR_futex, A, B, C, D, E, F) macro 29 futex(&addr, FUTEX_WAKE, 1, NULL, NULL, 0); in test_futex()
|
/Linux-v4.19/tools/testing/selftests/futex/ |
D | README | 3 Futex Test is intended to thoroughly test the Linux kernel futex system call 6 Functional tests shall test the documented behavior of the futex operation 54 based on the primary futex operation they test. Eventually this will become a
|
/Linux-v4.19/tools/perf/scripts/python/bin/ |
D | futex-contention-report | 4 perf script $@ -s "$PERF_EXEC_PATH"/scripts/python/futex-contention.py
|
/Linux-v4.19/tools/perf/Documentation/ |
D | perf-bench.txt | 58 'futex':: 189 SUITES FOR 'futex' 204 Suite for evaluating futex lock_pi calls.
|
/Linux-v4.19/include/linux/ |
D | restart_block.h | 36 } futex; member
|
/Linux-v4.19/kernel/ |
D | futex.c | 2669 restart->futex.uaddr = uaddr; in futex_wait() 2670 restart->futex.val = val; in futex_wait() 2671 restart->futex.time = *abs_time; in futex_wait() 2672 restart->futex.bitset = bitset; in futex_wait() 2673 restart->futex.flags = flags | FLAGS_HAS_TIMEOUT; in futex_wait() 2688 u32 __user *uaddr = restart->futex.uaddr; in futex_wait_restart() 2691 if (restart->futex.flags & FLAGS_HAS_TIMEOUT) { in futex_wait_restart() 2692 t = restart->futex.time; in futex_wait_restart() 2697 return (long)futex_wait(uaddr, restart->futex.flags, in futex_wait_restart() 2698 restart->futex.val, tp, restart->futex.bitset); in futex_wait_restart() [all …]
|
D | sys_ni.c | 137 COND_SYSCALL(futex); 138 COND_SYSCALL_COMPAT(futex);
|
/Linux-v4.19/arch/m68k/include/asm/ |
D | Kbuild | 8 generic-y += futex.h
|
/Linux-v4.19/arch/um/include/asm/ |
D | Kbuild | 12 generic-y += futex.h
|
/Linux-v4.19/arch/unicore32/include/asm/ |
D | Kbuild | 12 generic-y += futex.h
|
/Linux-v4.19/arch/c6x/include/asm/ |
D | Kbuild | 14 generic-y += futex.h
|
/Linux-v4.19/drivers/staging/android/ |
D | TODO | 21 superseded by the futex and is there for legacy reasons.
|
/Linux-v4.19/arch/nios2/include/asm/ |
D | Kbuild | 18 generic-y += futex.h
|
/Linux-v4.19/arch/h8300/include/asm/ |
D | Kbuild | 18 generic-y += futex.h
|