Re: [PATCHv4 bpf-next 00/12] bpf: Disable preemption in stack map code
Andrii Nakryiko <[email protected]> Wed, 5 Aug 2026 11:36:29 -0700
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <CAEf4BzZaB2+zZ64j54Gvb3tcZmG1fbNXyRsVefNwB_vbtQun3g@mail.gmail.com> |
On Wed, Aug 5, 2026 at 2:28 AM Jiri Olsa <[email protected]> wrote: > > hi, > we need to disable preemption for get_perf_callchain and keep it disabled > as long as we are accessing its returned trace entries buffer. > > This patchset refactors both bpf_get_stack and bpf_get_stackid helpers as > suggested by Andrii [1] before applying the actual preemption fix. > > Note the initial fix was sent by Tao Chen [2], but there was no follow up > on this since February, hence this post. > > thanks, > jirka > > > v1: https://lore.kernel.org/bpf/[email protected]/ > v2: https://lore.kernel.org/bpf/[email protected]/ > v3: https://lore.kernel.org/bpf/[email protected]/ > > v4 changes: > - fixed changelogs [sashiko] > - nr_trace variable rename [sashiko] > - fixed Daniel's email > > v3 changes: > - pass flags rgument to callchain_finalize [sashiko] > - renamed err label to out in bpf_get_stackid_pe [sashiko] > - used scoped_guard in bpf_get_stackid [Leon] > - replaced trace->nr modification from *_pe helpers with length > argument (new patches 11,12) [Andrii] > > v2 changes: > - removed several unused functions arguments [sashiko] > - restore trace-nr value fix in bpf_get_stack_pe [sashiko] > - kept rcu locking together with preemption disable in __bpf_get_stack [sashiko] > - clear buf on error paths in __bpf_get_task_stack [sashiko] > > > [1] https://lore.kernel.org/bpf/CAEf4BzZwvAUgLwz-M0Y_NJLTmedyY9U6s7LrSmn751hQdTP4Uw@mail.gmail.com/ > [2] https://lore.kernel.org/bpf/[email protected]/ > --- > Daniel Borkmann (1): > bpf: Disable preemption in __bpf_get_stack > > Jiri Olsa (11): > bpf: Factor stackid_init function from __bpf_get_stackid > bpf: Factor stackid_fastpath function from __bpf_get_stackid > bpf: Factor stackid_new_bucket from __bpf_get_stackid > bpf: Use stack id functions instead of __bpf_get_stackid > bpf: Disable preemption in bpf_get_stackid > bpf: Factor callchain_store function from __bpf_get_stack > bpf: Factor callchain_finalize function from __bpf_get_stack > bpf: Remove trace_in argument from __bpf_get_stack > bpf: Clear buf on error in __bpf_get_task_stack > bpf: Avoid changing callchain in bpf_get_stack_pe > bpf: Avoid changing callchain in bpf_get_stackid_pe > The amount of repetitive but subtly different code for all the different program types to capture stack trace is a bit mind-numbing, it all looks good to me (except that preempt_enable ordering which I fixed up), I hope we didn't introduce any new subtle bugs, but oh well. Applied to bpf-next. > kernel/bpf/stackmap.c | 314 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------- > 1 file changed, 205 insertions(+), 109 deletions(-)