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.
Davidquoted
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