Re: [PATCH RFC v2 8/8] selftests/perf: Add kselftest for remove_on_exec

From: Peter Zijlstra
Date: Tue Mar 23 2021 - 12:21:31 EST


On Tue, Mar 23, 2021 at 04:58:37PM +0100, Marco Elver wrote:
> On Tue, Mar 23, 2021 at 03:45PM +0100, Peter Zijlstra wrote:
> > On Tue, Mar 23, 2021 at 11:32:03AM +0100, Peter Zijlstra wrote:
> > > And at that point there's very little value in still using
> > > perf_event_exit_event()... let me see if there's something to be done
> > > about that.
> >
> > I ended up with something like the below. Which then simplifies
> > remove_on_exec() to:
> >
> [...]
> >
> > Very lightly tested with that {1..1000} thing.
> >
> > ---
> >
> > Subject: perf: Rework perf_event_exit_event()
> > From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> > Date: Tue Mar 23 15:16:06 CET 2021
> >
> > Make perf_event_exit_event() more robust, such that we can use it from
> > other contexts. Specifically the up and coming remove_on_exec.
> >
> > For this to work we need to address a few issues. Remove_on_exec will
> > not destroy the entire context, so we cannot rely on TASK_TOMBSTONE to
> > disable event_function_call() and we thus have to use
> > perf_remove_from_context().
> >
> > When using perf_remove_from_context(), there's two races to consider.
> > The first is against close(), where we can have concurrent tear-down
> > of the event. The second is against child_list iteration, which should
> > not find a half baked event.
> >
> > To address this, teach perf_remove_from_context() to special case
> > !ctx->is_active and about DETACH_CHILD.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
>
> Very nice, thanks! It seems to all hold up to testing as well.
>
> Unless you already have this on some branch somewhere, I'll prepend it
> to the series for now. I'll test some more and try to get v3 out
> tomorrow.

I have not queued it, so please keep it in your series so it stays
together (and tested).

Thanks!