On Fri, Feb 28, 2020 at 08:07:17PM +0100, Peter Zijlstra wrote:
On Thu, Feb 13, 2020 at 06:45:22PM -0300, André Almeida wrote:
@@ -150,4 +153,21 @@ struct robust_list_head { (((op & 0xf) << 28) | ((cmp & 0xf) << 24) \ | ((oparg & 0xfff) << 12) | (cmparg & 0xfff)) +/*
- Maximum number of multiple futexes to wait for
- */
+#define FUTEX_MULTIPLE_MAX_COUNT 128
+/**
- struct futex_wait_block - Block of futexes to be waited for
- @uaddr: User address of the futex
- @val: Futex value expected by userspace
- @bitset: Bitset for the optional bitmasked wakeup
- */
+struct futex_wait_block {
- __u32 __user *uaddr;
- __u32 val;
- __u32 bitset;
+};
So I have a problem with this vector layout, it doesn't allow for per-futex flags, and esp. with that multi-size futex support that becomes important, but also with the already extand private/shared and wait_bitset flags this means you cannot have a vector with mixed wait types.
Alternatively, we throw the entire single-syscall futex interface under the bus and design a bunch of new syscalls that are natively vectored or something.
Thomas mentioned something like that, the problem is, ofcourse, that we then want to fix a whole bunch of historical ills, and the probmem becomes much bigger.
Thomas?