On 9/22/23 5:03 AM, Peter Zijlstra wrote: > On Fri, Sep 22, 2023 at 11:35:03AM +0200, Ingo Molnar wrote: >> >> * peterz@xxxxxxxxxxxxx <peterz@xxxxxxxxxxxxx> wrote: >> >>> --- linux-2.6.orig/kernel/futex/syscalls.c >>> +++ linux-2.6/kernel/futex/syscalls.c >>> @@ -396,6 +396,44 @@ SYSCALL_DEFINE6(futex_wait, >>> return ret; >>> } >>> >>> +/* >>> + * sys_futex_requeue - Requeue a waiter from one futex to another >>> + * @waiters: array describing the source and destination futex >>> + * @flags: unused >>> + * @nr_wake: number of futexes to wake >>> + * @nr_requeue: number of futexes to requeue >>> + * >>> + * Identical to the traditional FUTEX_CMP_REQUEUE op, except it is part of the >>> + * futex2 family of calls. >>> + */ >>> + >>> +SYSCALL_DEFINE4(futex_requeue, >>> + struct futex_waitv __user *, waiters, >>> + unsigned int, flags, >>> + int, nr_wake, >>> + int, nr_requeue) >>> +{ >>> + struct futex_vector futexes[2]; >>> + u32 cmpval; >>> + int ret; >>> + >>> + if (flags) >>> + return -EINVAL; >> >> Small detail, but isn't -ENOSYS the canonical error code for functionality >> not yet implemented - which the unused 'flags' ABI is arguably? >> >> -EINVAL is for recognized but incorrect parameters, such as: > > IIUC 'unknown flag' falls into the -EINVAL return category. Here we > happen to have no known flags, but that should not matter. Yep, -ENOSYS is for not having the syscall at all, -EINVAL for unknown flags set. -- Jens Axboe