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(-)