Home
last modified time | relevance | path

Searched refs:futex (Results 1 – 25 of 54) sorted by relevance

123

/linux/Documentation/translations/zh_CN/userspace-api/
H A Dfutex2.rst16 futex,或者称为快速用户互斥锁(fast user mutex),是一组允许用户空间创建高性能同步
20 futex2是初代futex系统调用的后续版本,旨在克服原有接口的限制。
28 等待一个futex数组,可由其中任意一个唤醒::
41 地址, ``val`` 为期望值, ``flags`` 为指定的类型(如private)和futex的大小。
58 - 某个列表中的futex被唤醒,返回那个被唤醒的futex的索引。
60 关于如何使用接口的例子可以在 ``tools/testing/selftests/futex/functional/futex_waitv.c``
70 futex的类型
73 futex既可以是私有的也可以是共享的。私有用于多个进程共享同样的内存空间,并且futex的虚拟
74 地址对所有进程都是一样的。这允许在内核中进行优化。要使用私有futex,需要在futex标志中指定
75 ``FUTEX_PRIVATE_FLAG`` 。对于那些不在同一内存空间共享的进程,可以让同一个futex拥有不同
[all …]
/linux/tools/testing/selftests/futex/functional/
H A Dfutex_wait.c20 void *futex; variable
33 if (futex_wait(futex, 0, &to, flags)) in waiterfn()
46 futex = &f_private; in TEST()
49 ksft_print_dbg_msg("Calling private futex_wait on futex: %p\n", futex); in TEST()
55 ksft_print_dbg_msg("Calling private futex_wake on futex: %p\n", futex); in TEST()
56 res = futex_wake(futex, 1, FUTEX_PRIVATE_FLAG); in TEST()
83 futex = shared_data; in TEST()
85 ksft_print_dbg_msg("Calling shared (page anon) futex_wait on futex: %p\n", futex); in TEST()
91 ksft_print_dbg_msg("Calling shared (page anon) futex_wake on futex: %p\n", futex); in TEST()
92 res = futex_wake(futex, 1, 0); in TEST()
[all …]
H A Drobust_list.c62 _Atomic(unsigned int) futex;
100 head->futex_offset = (size_t) offsetof(struct lock_struct, futex) - in set_list()
113 _Atomic(unsigned int) *futex = &lock->futex; in mutex_lock()
124 if (atomic_compare_exchange_strong(futex, &zero, tid)) { in mutex_lock()
150 tid = atomic_load(futex); in mutex_lock()
153 atomic_store(futex, tid); in mutex_lock()
155 ret = futex_wait((futex_t *) futex, tid, &to, 0); in mutex_lock()
209 struct lock_struct lock = { .futex = 0 }; in TEST()
210 _Atomic(unsigned int) *futex = &lock.futex; in TEST()
236 ASSERT_TRUE(*futex & FUTEX_OWNER_DIED); in TEST()
[all …]
H A Dfutex_numa_mpol.c151 futex_numa->futex = 0; in TEST()
195 futex_numa->futex = 0; in TEST()
/linux/tools/testing/selftests/futex/include/
H A Dfutextest.h92 #define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ macro
102 return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); in futex_wait()
112 return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags); in futex_wake()
123 return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset, in futex_wait_bitset()
134 return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset, in futex_wake_bitset()
146 return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags); in futex_lock_pi()
155 return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags); in futex_unlock_pi()
165 return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op, in futex_wake_op()
181 return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0, in futex_requeue()
194 return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2, in futex_cmp_requeue()
[all …]
/linux/Documentation/locking/
H A Dpi-futex.rst7 - 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 …]
H A Drobust-futexes.rst15 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 …]
H A Drobust-futex-ABI.rst2 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 …]
H A Dfutex-requeue-pi.rst5 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
/linux/Documentation/userspace-api/
H A Dfutex2.rst9 futex, or fast user mutex, is a set of syscalls to allow userspace to create
14 futex2 is a followup version of the initial futex syscall, designed to overcome
37 and ``flags`` to specify the type (e.g. private) and size of futex.
59 - Some futex at the list was woken, returning the index of some waked futex.
61 An example of how to use the interface can be found at ``tools/testing/selftests/futex/functional/f…
71 Types of futex
74 A futex can be either private or shared. Private is used for processes that
75 shares the same memory space and the virtual address of the futex will be the
77 private futexes, it's necessary to specify ``FUTEX_PRIVATE_FLAG`` in the futex
79 have different virtual addresses for the same futex (using, for instance, a
[all …]
/linux/tools/perf/bench/
H A Dfutex-lock-pi.c29 u_int32_t *futex; member
100 ret = futex_lock_pi(w->futex, NULL, futex_flag); in workerfn()
105 w->tid, w->futex, ret); in workerfn()
113 ret = futex_unlock_pi(w->futex, futex_flag); in workerfn()
116 w->tid, w->futex, ret); in workerfn()
144 worker[i].futex = calloc(1, sizeof(u_int32_t)); in create_threads()
145 if (!worker[i].futex) in create_threads()
148 worker[i].futex = &global_futex; in create_threads()
243 worker[i].tid, worker[i].futex, t); in bench_futex_lock_pi()
246 zfree(&worker[i].futex); in bench_futex_lock_pi()
H A Dfutex-hash.c46 u_int32_t *futex; member
95 ret = futex_wait(&w->futex[i], 1234, NULL, futex_flag); in workerfn()
189 worker[i].futex = calloc(params.nfutexes, sizeof(*worker[i].futex)); in bench_futex_hash()
190 if (!worker[i].futex) in bench_futex_hash()
239 worker[i].tid, &worker[i].futex[0], t); in bench_futex_hash()
242 worker[i].tid, &worker[i].futex[0], in bench_futex_hash()
243 &worker[i].futex[params.nfutexes-1], t); in bench_futex_hash()
246 zfree(&worker[i].futex); in bench_futex_hash()
H A DBuild6 perf-bench-y += futex.o
7 perf-bench-y += futex-hash.o
8 perf-bench-y += futex-wake.o
9 perf-bench-y += futex-wake-parallel.o
10 perf-bench-y += futex-requeue.o
11 perf-bench-y += futex-lock-pi.o
H A Dfutex-wake-parallel.c49 static u_int32_t futex = 0; variable
89 waker->nwoken = futex_wake(&futex, nwakes, futex_flag); in waking_workerfn()
143 if (futex_wait(&futex, 0, NULL, futex_flag) != EINTR) in blocked_workerfn()
303 &futex, params.nwakes, nwakes); in bench_futex_wake_parallel()
/linux/kernel/futex/
H A Dwaitwake.c726 restart->futex.uaddr = uaddr; in futex_wait()
727 restart->futex.val = val; in futex_wait()
728 restart->futex.time = *abs_time; in futex_wait()
729 restart->futex.bitset = bitset; in futex_wait()
730 restart->futex.flags = flags | FLAGS_HAS_TIMEOUT; in futex_wait()
740 u32 __user *uaddr = restart->futex.uaddr; in futex_wait_restart()
743 if (restart->futex.flags & FLAGS_HAS_TIMEOUT) in futex_wait_restart()
744 tp = &restart->futex.time; in futex_wait_restart()
748 return (long)futex_wait(uaddr, restart->futex.flags, in futex_wait_restart()
749 restart->futex.val, tp, restart->futex.bitset); in futex_wait_restart()
/linux/Documentation/translations/zh_CN/locking/
H A Dindex.rst31 * pi-futex
32 * futex-requeue-pi
36 * robust-futex-ABI
/linux/arch/um/kernel/skas/
H A Dstub.c122 d->futex = FUTEX_IN_KERN; in stub_signal_interrupt()
124 res = stub_syscall3(__NR_futex, (unsigned long)&d->futex, in stub_signal_interrupt()
129 res = stub_syscall4(__NR_futex, (unsigned long)&d->futex, in stub_signal_interrupt()
131 } while (res == -EINTR || d->futex == FUTEX_IN_KERN); in stub_signal_interrupt()
/linux/tools/sched_ext/
H A DKconfig19 # LAVD tracks futex to give an additional time slice for futex holder
21 # LAVD first tries to use ftrace to trace futex function calls.
/linux/tools/testing/selftests/powerpc/benchmarks/
H A Dfutex_bench.c18 #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/tools/testing/selftests/futex/
H A DREADME3 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/arch/um/os-Linux/skas/
H A Dprocess.c190 data->futex = FUTEX_IN_CHILD; in wait_stub_done_seccomp()
191 CATCH_EINTR(syscall(__NR_futex, &data->futex, in wait_stub_done_seccomp()
210 ret = syscall(__NR_futex, &data->futex, in wait_stub_done_seccomp()
218 } while (data->futex == FUTEX_IN_CHILD); in wait_stub_done_seccomp()
475 proc_data->futex = FUTEX_IN_CHILD; in start_userspace()
/linux/tools/perf/scripts/python/bin/
H A Dfutex-contention-report4 perf script $@ -s "$PERF_EXEC_PATH"/scripts/python/futex-contention.py
/linux/tools/testing/selftests/timens/
H A D.gitignore4 futex
H A DMakefile1 TEST_GEN_PROGS := timens timerfd timer clock_nanosleep procfs exec futex vfork_exec
/linux/arch/um/include/shared/skas/
H A Dstub-data.h64 unsigned int futex; member

123