[tip: perf/core] perf: Simplify perf_event_release_kernel()
From: tip-bot2 for Peter Zijlstra
Date: Tue Apr 08 2025 - 15:07:26 EST
The following commit has been merged into the perf/core branch of tip:
Commit-ID: 3e8671e00e57b3d006ed8ae5ef055807506e44b2
Gitweb: https://git.kernel.org/tip/3e8671e00e57b3d006ed8ae5ef055807506e44b2
Author: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
AuthorDate: Fri, 17 Jan 2025 15:31:49 +01:00
Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
CommitterDate: Tue, 08 Apr 2025 20:55:47 +02:00
perf: Simplify perf_event_release_kernel()
There is no good reason to have the free list anymore. It is possible
to call free_event() after the locks have been dropped in the main
loop.
Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
Reviewed-by: Ravi Bangoria <ravi.bangoria@xxxxxxx>
Link: https://lkml.kernel.org/r/20250307193723.151721102@xxxxxxxxxxxxx
---
kernel/events/core.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/kernel/events/core.c b/kernel/events/core.c
index fa6dab0..f75b0d3 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5696,7 +5696,6 @@ int perf_event_release_kernel(struct perf_event *event)
{
struct perf_event_context *ctx = event->ctx;
struct perf_event *child, *tmp;
- LIST_HEAD(free_list);
/*
* If we got here through err_alloc: free_event(event); we will not
@@ -5765,23 +5764,23 @@ again:
struct perf_event, child_list);
if (tmp == child) {
perf_remove_from_context(child, DETACH_GROUP | DETACH_CHILD);
- list_add(&child->child_list, &free_list);
+ } else {
+ child = NULL;
}
mutex_unlock(&event->child_mutex);
mutex_unlock(&ctx->mutex);
+
+ if (child) {
+ /* Last reference unless ->pending_task work is pending */
+ put_event(child);
+ }
put_ctx(ctx);
goto again;
}
mutex_unlock(&event->child_mutex);
- list_for_each_entry_safe(child, tmp, &free_list, child_list) {
- list_del(&child->child_list);
- /* Last reference unless ->pending_task work is pending */
- put_event(child);
- }
-
no_ctx:
/*
* Last reference unless ->pending_task work is pending on this event