Re: [PATCH v3 10/15] futex: Add sys_futex_requeue()

Peter Zijlstra
2023-09-22T11:04:14Z

On Fri, Sep 22, 2023 at 11:35:03AM +0200, Ingo Molnar wrote:
>
> * peterz@infradead.org <peterz@infradead.org> 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.