On Thu, Dec 18, 2025 at 5:07 AM liujing40 <[email protected]> wrote: > > When fprobe is not available, provide a fallback implementation of > kprobe_multi using the traditional kretprobe API. > > Uses kretprobe's entry_handler and handler callbacks to simulate fprobe's > entry/exit functionality. > > Signed-off-by: Jing Liu <[email protected]> > --- > kernel/trace/bpf_trace.c | 307 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 295 insertions(+), 12 deletions(-) > > diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c > index 1fd07c10378f..426a1c627508 100644 > --- a/kernel/trace/bpf_trace.c > +++ b/kernel/trace/bpf_trace.c > @@ -2274,12 +2274,44 @@ struct bpf_session_run_ctx { > void *data; > }; > > -#ifdef CONFIG_FPROBE > +#if defined(CONFIG_FPROBE) || defined(CONFIG_KRETPROBES) > +#ifndef CONFIG_FPROBE > +struct bpf_kprobe { > + struct bpf_kprobe_multi_link *link; > + u64 cookie; > + struct kretprobe rp; > +}; > + > +static void bpf_kprobe_unregister(struct bpf_kprobe *kps, u32 cnt) > +{ > + for (int i = 0; i < cnt; i++) > + unregister_kretprobe(&kps[i].rp); > +}
Nack. This is not a good idea. unregister_kretprobe() calls synchronize_rcu(). So the above loop will cause soft lockups for sure. pw-bot: cr
