Thread (26 messages) flat view 26 messages, 1 author, 4d ago
COOLING4d

[PATCH 07/25] coresight: perf: Validate the live context through its path

From: Leo Yan <leo.yan@arm.com>
Date: 2026-09-15 15:49:52
Also in: linux-arm-kernel, linux-perf-users, lkml
Subsystem: arm/coresight framework and drivers, hardware tracing facilities, the rest · Maintainers: Suzuki K Poulose, Alexander Shishkin, Linus Torvalds

etm_event_get_ctxt_path() returns a path only when the per-CPU
context has published event data and that data contains a path for the
current CPU. Perf PMU callbacks run on the same CPU in atomic context,
and only the normal stop clears the event data. A returned path therefore
establishes that the pause and stop callbacks have a live ETM context.

The AUX handle has a separate lifetime. It can be absent after an AUX
transaction could not be restarted while the CoreSight path still needs
to be paused or disabled. The handle is acquired for the callback event
before event data is published, and another ETM event cannot replace it
while the published context remains live. Thus any active handle belongs
to that context, and etm_event_update_buffer() uses perf_get_aux() to
determine whether it remains valid.

Remove the redundant comparisons of the handle with the event and event
data, together with the redundant event_data check. Use the path to
validate the ETM context lifetime and perf_get_aux() to validate the AUX
handle lifetime.

Assisted-by: Codex:gpt-6
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 drivers/hwtracing/coresight/coresight-etm-perf.c | 15 ---------------
 1 file changed, 15 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
index afd22fd4a851e600ab69fd5b6883e6f8518b2cab..c7454da5c881c4a8eea5cc77902c9113c297096e 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.c
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
@@ -698,9 +698,6 @@ static void etm_event_pause(struct coresight_path *path,
 	if (coresight_is_percpu_sink(sink))
 		return;
 
-	if (WARN_ON_ONCE(handle->event != event))
-		return;
-
 	event_data = READ_ONCE(ctxt->event_data);
 	etm_event_update_buffer(handle, event_data, sink, PERF_EF_UPDATE);
 
@@ -728,14 +725,6 @@ static void etm_event_stop(struct perf_event *event, int mode)
 		return;
 	}
 
-	/*
-	 * If we still have access to the event_data via handle,
-	 * confirm that we haven't messed up the tracking.
-	 */
-	if (handle->event &&
-	    WARN_ON(perf_get_aux(handle) != ctxt->event_data))
-		return;
-
 	event_data = READ_ONCE(ctxt->event_data);
 	/* Clear the event_data as this ETM is stopping the trace. */
 	WRITE_ONCE(ctxt->event_data, NULL);
@@ -743,10 +732,6 @@ static void etm_event_stop(struct perf_event *event, int mode)
 	if (event->hw.state == PERF_HES_STOPPED)
 		return;
 
-	/* We must have a valid event_data for a running event */
-	if (WARN_ON(!event_data))
-		return;
-
 	source = coresight_get_source(path);
 	sink = coresight_get_sink(path);
 	if (!source || !sink)
-- 
2.34.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help