On Tue, Aug 27, 2024 at 10:19:26PM +0200, Oleg Nesterov wrote:
> Sorry for another reply, I just noticed I missed one part of your email...
>
> On 08/27, Jiri Olsa wrote:
> >
> > -> uretprobe-hit
> > handle_swbp
> > uprobe_handle_trampoline
> > handle_uretprobe_chain
> > {
> >
> > for_each_uprobe_consumer {
> >
> > // consumer for task 1019
> > uretprobe_dispatcher
> > uretprobe_perf_func
> > -> runs bpf program
> >
> > // consumer for task 1018
> > uretprobe_dispatcher
> > uretprobe_perf_func
> > -> runs bpf program
> >
> > }
> > }
> >
> > and I think the same will happen for perf record in this case where instead
> > of
> > running the program we will execute perf_tp_event
>
> Hmm. Really? In this case these 2 different consumers will have the different
> trace_event_call's, so
>
> // consumer for task 1019
> uretprobe_dispatcher
> uretprobe_perf_func
> __uprobe_perf_func
> perf_tp_event
>
> won't store the event because this_cpu_ptr(call->perf_events) should be
> hlist_empty() on this CPU, the perf_event for task 1019 wasn't scheduled in
> on this CPU...
I'll double check on that, but because there's no filter for uretprobe
I think it will be stored under 1018 event
>
> No?
>
> Ok, looks like I'm totally confused ;)
I'm working on bpf selftests for above (uprobe and uprobe_multi paths)
I plan to send them together with fixes we discussed earlier
I'm hoping this will make it more clear
jirka