On Wed, Sep 20, 2017 at 10:20:13PM -0700, Yonghong Song wrote: > > (2). trace_event_call->perf_events are per cpu data structure, that > > means, some filtering logic is needed to avoid the same perf_event prog > > is executing twice. > > What I mean here is that the trace_event_call->perf_events need to be > checked on ALL cpus since bpf prog should be executed regardless of > cpu affiliation. It is possible that the same perf_event in different > per_cpu bucket and hence filtering is needed to avoid the same > perf_event bpf_prog is executed twice.
An event will only ever be on a single CPU's list at any one time IIRC. Now, hysterically perf_event_set_bpf_prog used the tracepoint crud because that already had bpf bits in. But it might make sense to look at unifying the bpf stuff across all the different event types. Have them all use event->prog. I suspect that would break a fair bunch of bpf proglets, since the data access to the trace data would be completely different, but it would be much nicer to not have this distinction based on event type.