Messages in this thread | | | From | Kyle Huey <> | Date | Thu, 15 Feb 2024 17:59:41 -0800 | Subject | Re: [RESEND PATCH v5 3/4] perf/bpf: Allow a bpf program to suppress all sample side effects |
| |
On Thu, Feb 15, 2024 at 4:14 PM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Wed, Feb 14, 2024 at 9:40 AM Kyle Huey <me@kylehuey.com> wrote: > > > > Returning zero from a bpf program attached to a perf event already > > suppresses any data output. Return early from __perf_event_overflow() in > > this case so it will also suppress event_limit accounting, SIGTRAP > > generation, and F_ASYNC signalling. > > > > Signed-off-by: Kyle Huey <khuey@kylehuey.com> > > Acked-by: Song Liu <song@kernel.org> > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > Acked-by: Namhyung Kim <namhyung@kernel.org> > > --- > > kernel/events/core.c | 10 ++++++---- > > 1 file changed, 6 insertions(+), 4 deletions(-) > > > > diff --git a/kernel/events/core.c b/kernel/events/core.c > > index 24a718e7eb98..a329bec42c4d 100644 > > --- a/kernel/events/core.c > > +++ b/kernel/events/core.c > > @@ -9574,6 +9574,11 @@ static int __perf_event_overflow(struct perf_event *event, > > > > ret = __perf_event_account_interrupt(event, throttle); > > > > +#ifdef CONFIG_BPF_SYSCALL > > + if (event->prog && !bpf_overflow_handler(event, data, regs)) > > + return ret; > > +#endif > > + > > /* > > * XXX event_limit might not quite work as expected on inherited > > * events > > @@ -9623,10 +9628,7 @@ static int __perf_event_overflow(struct perf_event *event, > > irq_work_queue(&event->pending_irq); > > } > > > > -#ifdef CONFIG_BPF_SYSCALL > > - if (!(event->prog && !bpf_overflow_handler(event, data, regs))) > > -#endif > > - READ_ONCE(event->overflow_handler)(event, data, regs); > > + READ_ONCE(event->overflow_handler)(event, data, regs); > > > > Sorry, I haven't followed previous discussions, but why can't this > change be done as part of patch 1?
The idea was to refactor the code without making any behavior changes (patches 1 and 2) and then to change the behavior (patch 3).
- Kyle
> > if (*perf_event_fasync(event) && event->pending_kill) { > > event->pending_wakeup = 1; > > -- > > 2.34.1 > >
| |