]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
eventpoll: Convert epoll_put_uevent() to scoped user access
authorEric Dumazet <edumazet@google.com>
Sat, 7 Mar 2026 20:07:15 +0000 (20:07 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 7 Mar 2026 23:03:14 +0000 (15:03 -0800)
Saves two function calls, and one stac/clac pair.

stac/clac is rather expensive on older cpus like Zen 2.

A synthetic network stress test gives a ~1.5% increase of pps
on AMD Zen 2.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Kuniyuki Iwashima <kuniyu@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/eventpoll.h

index ccb478eb174bc2e4454cee59f805f10cfd5bb5fb..ea9ca0e4172aab13b8e576258e1d457a913dcebf 100644 (file)
@@ -82,11 +82,14 @@ static inline struct epoll_event __user *
 epoll_put_uevent(__poll_t revents, __u64 data,
                 struct epoll_event __user *uevent)
 {
-       if (__put_user(revents, &uevent->events) ||
-           __put_user(data, &uevent->data))
-               return NULL;
-
+       scoped_user_write_access_size(uevent, sizeof(*uevent), efault) {
+               unsafe_put_user(revents, &uevent->events, efault);
+               unsafe_put_user(data, &uevent->data, efault);
+       }
        return uevent+1;
+
+efault:
+       return NULL;
 }
 #endif