From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: "André Almeida" <andrealmeid@collabora.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Darren Hart <dvhart@infradead.org>,
linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
kernel@collabora.com, linux-api@vger.kernel.org,
libc-alpha@sourceware.org, mtk.manpages@gmail.com,
Davidlohr Bueso <dave@stgolabs.net>,
Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH v3 2/6] futex2: Implement vectorized wait
Date: Thu, 16 Sep 2021 00:10:25 -0400 [thread overview]
Message-ID: <8735q5dutq.fsf@collabora.com> (raw)
In-Reply-To: <58536544-e032-1954-ce30-d131869dc95e@collabora.com> ("André Almeida"'s message of "Tue, 14 Sep 2021 14:18:58 -0300")
André Almeida <andrealmeid@collabora.com> writes:
>>> +/**
>>> + * struct futex_waitv - A waiter for vectorized wait
>>> + * @val: Expected value at uaddr
>>> + * @uaddr: User address to wait on
>>> + * @flags: Flags for this waiter
>>> + * @__reserved: Reserved member to preserve data alignment. Should be 0.
>>> + */
>>> +struct futex_waitv {
>>> + __u64 val;
>>> + __u64 uaddr;
>>> + __u32 flags;
>>> + __u32 __reserved;
>>> +};
>>
>> why force uaddr to be __u64, even for 32-bit? uaddr could be a (void*) for
>> all we care, no? Also, by adding a reserved field, you are wasting 32
>> bits even on 32-bit architectures.
>>
>
> We do that to make the structure layout compatible with both entry
> points, remove the need for special cast and duplicated code, as
> suggested by Thomas and Arnd:
>
> https://lore.kernel.org/lkml/87v94310gm.ffs@tglx/
>
> https://lore.kernel.org/lkml/CAK8P3a0MO1qJLRkCH8KrZ3+=L66KOsMRmcbrUvYdMoKykdKoyQ@mail.gmail.com/
I find this weird. I'm not even juts talking about compat, but even on
native 32-bit. But also, 32 applications on 64, which is a big use
case for games.
The structure is mandating a 64 bit uaddr field and has an unnecessary
pad. You are wasting 20% of the space, which is gonna be elements of a
vector coming from user space. Worst case, you are doing copy_from_user
of an extra 1k bytes in the critical path of futex_waitv for no good
reason.
Also, if I understand correctly, Arnd suggestion, at least, was to have
two parser functions and a single syscall entry point, that would do the
translation:
if (in_compat_syscall())
futex_parse_waitv_compat(futexv, waiters, nr_futexes);
else
futex_parse_waitv(futexv, waiters, nr_futexes);
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2021-09-16 4:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-13 17:52 [PATCH v3 0/6] futex2: Add wait on multiple futexes syscall André Almeida
2021-09-13 17:52 ` [PATCH v3 1/6] futex: Prepare for futex_wait_multiple() André Almeida
2021-09-13 17:52 ` [PATCH v3 2/6] futex2: Implement vectorized wait André Almeida
2021-09-13 23:33 ` kernel test robot
2021-09-14 0:08 ` kernel test robot
2021-09-14 1:03 ` Gabriel Krisman Bertazi
2021-09-14 17:18 ` André Almeida
2021-09-16 4:10 ` Gabriel Krisman Bertazi [this message]
2021-09-16 11:20 ` Peter Zijlstra
2021-09-16 11:50 ` Arnd Bergmann
2021-09-16 13:37 ` Steven Rostedt
2021-09-16 16:36 ` Gabriel Krisman Bertazi
2021-09-13 17:52 ` [PATCH v3 3/6] futex2: wire up syscall for x86 André Almeida
2021-09-13 17:52 ` [PATCH v3 4/6] futex2: wire up syscall for ARM André Almeida
2021-09-13 17:52 ` [PATCH v3 5/6] selftests: futex2: Add waitv test André Almeida
2021-09-14 1:11 ` Gabriel Krisman Bertazi
2021-09-13 17:52 ` [PATCH v3 6/6] selftests: futex2: Test futex_waitv timeout André Almeida
2021-09-14 1:05 ` [PATCH v3 0/6] futex2: Add wait on multiple futexes syscall Gabriel Krisman Bertazi
2021-09-14 3:07 ` André Almeida
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8735q5dutq.fsf@collabora.com \
--to=krisman@collabora.com \
--cc=andrealmeid@collabora.com \
--cc=arnd@arndb.de \
--cc=bigeasy@linutronix.de \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=kernel@collabora.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mtk.manpages@gmail.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.