Re: [RFC PATCH 03/13] futex2: Implement vectorized wait
From: Gabriel Krisman Bertazi <hidden>
Date: 2021-02-15 20:04:42
André Almeida [off-list ref] writes:
Add support to wait on multiple futexes. This is the interface
implemented by this syscall:
futex_waitv(struct futex_waitv *waiters, unsigned int nr_futexes,
unsigned int flags, struct timespec *timo)
struct futex_waitv {
void *uaddr;
unsigned int val;
unsigned int flags;
};
Given an array of struct futex_waitv, wait on each uaddr. The thread
wakes if a futex_wake() is performed at any uaddr. The syscall returns
immediately if any waiter has *uaddr != val. *timo is an optional
timeout value for the operation. The flags argument of the syscall
should be used solely for specifying the timeout as realtime, if needed.
Flags for shared futexes, sizes, etc. should be used on the individual
flags of each waiter.Given the previous proposal from Zebediah, one use case Wine has to support is the ability to wait on all (instead of any) of a list of futexes . I suppose that could be done by a new FLAG_WAITALL passed on the third argument of the syscall. -- Gabriel Krisman Bertazi