Skip to content

Commit 2f38f4d

Browse files
committed
perf x86/topdown: Fix topdown leader sampling test error on hybrid
JIRA: https://issues.redhat.com/browse/RHEL-77936 upstream ======== commit b74683b Author: Dapeng Mi <[email protected]> Date: Thu Mar 6 18:39:03 2025 -0800 description =========== When running topdown leader smapling test on Intel hybrid platforms, such as LNL/ARL, we see the below error. Topdown leader sampling test Topdown leader sampling [Failed topdown events not reordered correctly] It indciates the below command fails. perf record -o "${perfdata}" -e "{instructions,slots,topdown-retiring}:S" true The root cause is that perf tool creats a perf event for each PMU type if it can create. As for this command, there would be 5 perf events created, cpu_atom/instructions/,cpu_atom/topdown_retiring/, cpu_core/slots/,cpu_core/instructions/,cpu_core/topdown-retiring/ For these 5 events, the 2 cpu_atom events are in a group and the other 3 cpu_core events are in another group. When arch_topdown_sample_read() traverses all these 5 events, events cpu_atom/instructions/ and cpu_core/slots/ don't have a same group leade, and then return false directly and lead to cpu_core/slots/ event is used to sample and this is not allowed by PMU driver. It's a overkill to return false directly if "evsel->core.leader != leader->core.leader" since there could be multiple groups in the event list. Just "continue" instead of "return false" to fix this issue. Fixes: 1e53e9d ("perf x86/topdown: Correct leader selection with sample_read enabled") Signed-off-by: Dapeng Mi <[email protected]> Tested-by: Thomas Falcon <[email protected]> Tested-by: Ian Rogers <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Namhyung Kim <[email protected]> Signed-off-by: Michael Petlan <[email protected]>
1 parent 07120e7 commit 2f38f4d

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

tools/perf/arch/x86/util/topdown.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ bool arch_topdown_sample_read(struct evsel *leader)
8181
*/
8282
evlist__for_each_entry(leader->evlist, evsel) {
8383
if (evsel->core.leader != leader->core.leader)
84-
return false;
84+
continue;
8585
if (evsel != leader && arch_is_topdown_metrics(evsel))
8686
return true;
8787
}

0 commit comments

Comments
 (0)