Re: [RFC PATCH 03/13] futex2: Implement vectorized wait

2 messages, 2 authors, 2021-02-15 · open the first message on its own page

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

Re: [RFC PATCH 03/13] futex2: Implement vectorized wait

From: Zebediah Figura <zfigura@codeweavers.com>
Date: 2021-02-15 20:07:37

On 2/15/21 2:03 PM, Gabriel Krisman Bertazi wrote:
André Almeida [off-list ref] writes:
quoted
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.
I don't think that such a feature would help Wine very much. It doesn't
fix any of the correctness problems with the futex-backed implementation
of NT primitives, and given the rarity of the wait-on-all operation I'm
inclined to believe it won't help performance either.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help