Thread (16 messages) 16 messages, 5 authors, 2025-10-29

Re: [PATCH v1 1/2] uaccess: Add __user_write_access_begin().

From: Kuniyuki Iwashima <kuniyu@google.com>
Date: 2025-10-24 05:31:53
Also in: linux-arm-kernel, linux-riscv, lkml

On Thu, Oct 23, 2025 at 1:29 AM David Laight
[off-list ref] wrote:
On Wed, 22 Oct 2025 19:37:27 -1000
Linus Torvalds [off-list ref] wrote:
quoted
On Wed, 22 Oct 2025 at 14:05, Kuniyuki Iwashima [off-list ref] wrote:
quoted
unsafe_put_user() can be used to save a stac/clac pair, but
masked_user_access_begin() or user_access_begin() introduces
an unnecessary address masking or access_ok().

Add a low-level helper for such a use case.
I really suspect that you cannot actually measure the cost of the
extra masking, and would be much happier if you just used a regular
"user_access_begin()" (perhaps the "user_write_access_begin()"
variant).
Or wait for scoped_user_write_access() to get committed and then use that.
IIUC, scoped_user_write_access() is simply inlined to
masked_user_access_begin() or user_access_begin(), and this
is the case where I saw no improvement or even worse performance.
        David
quoted
The masking is very cheap - literally just a couple of ALU
instructions. And unless you can actually measure some real advantage
of avoiding it, let's not add another helper to this area.
Yes, it's only 3 instructions on x86_64, but by saving them
I saw better performance constantly.  Please see the numbers here.
https://lore.kernel.org/lkml/20251024051653.66329-1-kuniyu@google.com/ (local)

quoted
We spent a fair amount of time undoing years of "__get_user()" and
"__put_user()" cases that didn't actually help, and sometimes only
made it hard to see where the actual user pointer validation was done.

               Linus
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help