mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
perf/core: Simplify __detach_global_ctx_data()
Like in the attach_global_ctx_data() it has a O(N^2) loop to delete task context data for each thread. But perf_free_ctx_data_rcu() can be called under RCU read lock, so just calls it directly rather than iterating the whole thread list again. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://patch.msgid.link/20260211223222.3119790-4-namhyung@kernel.org
This commit is contained in:
committed by
Peter Zijlstra
parent
bec2ee2390
commit
da45c8d5f0
@@ -5560,22 +5560,15 @@ static void __detach_global_ctx_data(void)
|
||||
struct task_struct *g, *p;
|
||||
struct perf_ctx_data *cd;
|
||||
|
||||
again:
|
||||
scoped_guard (rcu) {
|
||||
for_each_process_thread(g, p) {
|
||||
cd = rcu_dereference(p->perf_ctx_data);
|
||||
if (!cd || !cd->global)
|
||||
continue;
|
||||
cd->global = 0;
|
||||
get_task_struct(p);
|
||||
goto detach;
|
||||
if (cd && cd->global) {
|
||||
cd->global = 0;
|
||||
detach_task_ctx_data(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
detach:
|
||||
detach_task_ctx_data(p);
|
||||
put_task_struct(p);
|
||||
goto again;
|
||||
}
|
||||
|
||||
static void detach_global_ctx_data(void)
|
||||
|
||||
Reference in New Issue
Block a user