mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
perf stat: Fix non-uniquified hybrid legacy events
Legacy hybrid events have attr.type == PERF_TYPE_HARDWARE, so they look
like plain legacy events if we only look at attr.type. But legacy events
should still be uniquified if they were opened on a non-legacy PMU. Fix
it by checking if the evsel is hybrid and forcing needs_uniquify
before looking at the attr.type.
This restores PMU names on hybrid systems and also changes "perf stat
metrics (shadow stat) test" from a FAIL back to a SKIP (on hybrid). The
test was gated on "cycles" appearing alone which doesn't happen on
here.
Before:
$ perf stat -- true
...
<not counted> instructions:u (0.00%)
162,536 instructions:u # 0.58 insn per cycle
...
After:
$ perf stat -- true
...
<not counted> cpu_atom/instructions/u (0.00%)
162,541 cpu_core/instructions/u # 0.62 insn per cycle
...
Fixes: 357b965deb ("perf stat: Changes to event name uniquification")
Suggested-by: Ian Rogers <irogers@google.com>
Signed-off-by: James Clark <james.clark@linaro.org>
Tested-by: Thomas Falcon <thomas.falcon@intel.com>
Link: https://lore.kernel.org/r/20250226145526.632380-1-james.clark@linaro.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
7788ad59d1
commit
be9f3e95a9
|
|
@ -1688,6 +1688,12 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
|
|||
return;
|
||||
}
|
||||
|
||||
if (!config->hybrid_merge && evsel__is_hybrid(counter)) {
|
||||
/* Unique hybrid counters necessary. */
|
||||
counter->needs_uniquify = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (counter->core.attr.type < PERF_TYPE_MAX && counter->core.attr.type != PERF_TYPE_RAW) {
|
||||
/* Legacy event, don't uniquify. */
|
||||
return;
|
||||
|
|
@ -1705,12 +1711,6 @@ static void evsel__set_needs_uniquify(struct evsel *counter, const struct perf_s
|
|||
return;
|
||||
}
|
||||
|
||||
if (!config->hybrid_merge && evsel__is_hybrid(counter)) {
|
||||
/* Unique hybrid counters necessary. */
|
||||
counter->needs_uniquify = true;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do other non-merged events in the evlist have the same name? If so
|
||||
* uniquify is necessary.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user