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!