[PATCH v2] perf/core: Fix ITRACE start suppression for inherited events
From: Leo Yan
Date: Tue Sep 29 2026 - 11:09:38 EST
perf_log_itrace_start() follows event->parent before checking
PERF_ATTACH_ITRACE, but perf_event_itrace_started() sets the flag on the
event passed by the PMU driver. If an inherited event starts tracing
before its parent, the parent's flag remains clear and the child emits
redundant ITRACE_START records on subsequent schedule-ins.
Follow event->parent in perf_event_itrace_started() as well, so that the
setter and checker use the same event. This preserves the original
suppression policy: ITRACE_START supplies the initial task context when
tracing begins, while subsequent task switches are tracked through
context-switch records or trace context packets.
Reported-by: Sashiko AI <sashiko-bot@xxxxxxxxxx>
Closes: https://lore.kernel.org/linux-perf-users/20260901164705.042781F000E9@xxxxxxxxxxxxxxx/
Fixes: 9a6694cfa239 ("perf/x86/intel/pt: Do not force sync packets on every schedule-in")
Signed-off-by: Leo Yan <leo.yan@xxxxxxx>
---
Changes in v2:
- Changed setter to fetch parent event instead (James).
- Link to v1: https://lore.kernel.org/r/20260903-perf_core_itrace_start_fix_inherit_event-v1-1-6bff7e675af5@xxxxxxx
---
kernel/events/core.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 634d2ccbab82d8bfe9d1bd7f8c6745f60260dbd9..85d924cce387f88de0c1efe6c22754d38430c9d6 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -10568,6 +10568,9 @@ void perf_event_text_poke(const void *addr, const void *old_bytes,
void perf_event_itrace_started(struct perf_event *event)
{
+ if (event->parent)
+ event = event->parent;
+
WRITE_ONCE(event->attach_state, event->attach_state | PERF_ATTACH_ITRACE);
}
---
base-commit: 6f8319e3e9a44dd537d17f41565a8453c560a581
change-id: 20260903-perf_core_itrace_start_fix_inherit_event-a8930d792899
Best regards,
--
Leo Yan <leo.yan@xxxxxxx>