Re: [PATCH bpf-next 2/2] uprobes: Switch uretprobes_srcu to SRCU-fast-updown
Andrii Nakryiko <[email protected]> Thu, 30 Jul 2026 15:27:27 -0700
| Newsgroups | org.kernel.vger.rcu,org.kernel.vger.bpf,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-trace-kernel |
|---|---|
| Message-ID | <CAEf4Bza3LeVB-z3jwMdnBGLdjpPr9tZFhGHt5pUwui64ZX66Lw@mail.gmail.com> |
On Tue, Jul 21, 2026 at 12:44=E2=80=AFPM Kumar Kartikeya Dwivedi <[email protected]> wrote: > > On Fri Jul 10, 2026 at 11:23 PM CEST, Andrii Nakryiko wrote: > > On Mon, Jul 6, 2026 at 10:28=E2=80=AFAM Puranjay Mohan <puranjay@kernel= .org> wrote: > >> > >> uretprobes_srcu currently uses normal SRCU, which issues > >> two smp_mb() per read lock/unlock pair. This overhead is > >> paid on every uretprobe hit. > >> > >> Switch to SRCU-fast-updown, which eliminates the per-reader > >> memory barriers by moving the ordering cost to the > >> grace-period side (synchronize_rcu() instead of smp_mb()). > >> This is acceptable because grace periods (uprobe > >> unregistration) are infrequent compared to reader-side > >> uretprobe hits. > >> > >> The updown flavor is required because the SRCU read lock is > >> taken in prepare_uretprobe() when a return instance is > >> created and is held until that return instance is finalized. > >> The traced thread returns to user space in between, so the > >> lock is inherently released in a different context from > >> where it was acquired: on the normal return path via > >> uprobe_handle_trampoline() -> hprobe_finalize(), or from > >> ri_timer() (expiry) or dup_utask() (fork) via > >> hprobe_expire(). srcu_down_read_fast() / srcu_up_read_fast() > >> are designed for this acquire-here / release-elsewhere > >> pattern and, unlike the same-context srcu_read_lock_fast() > >> variant, do not carry the lockdep read-side tracking that > >> would warn on it. > >> > >> The short, same-context SRCU sections in ri_timer() and > >> dup_utask() (which guard the uprobe against reuse across the > >> hprobe_expire() cmpxchg) instead use guard(srcu_fast_updown) > >> for proper lockdep coverage. > >> > >> Signed-off-by: Puranjay Mohan <[email protected]> > >> --- > >> include/linux/uprobes.h | 5 +++-- > >> kernel/events/uprobes.c | 29 +++++++++++++++++------------ > >> 2 files changed, 20 insertions(+), 14 deletions(-) > >> > > > > Very straightforward replacement and will improve performance, thanks! > > LGTM. Peter or Mingo, I assume you guys will want to route this > > through your tip tree, right? > > > > Acked-by: Andrii Nakryiko <[email protected]> > > > > Hi Peter, Ingo, > > Gentle ping for this. > Another ping, please consider applying, thanks! > > [...] >