* [PATCH] perf pmu: Skip test on Arm64 when #slots is zero
@ 2026-04-10 10:48 Leo Yan
2026-04-10 10:59 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Leo Yan @ 2026-04-10 10:48 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark
Cc: linux-perf-users, linux-kernel, Leo Yan
Some Arm64 PMUs expose 'caps/slots' as 0 when the slot count is not
implemented, tool_pmu__read_event() currently treats that as a read
failure, so metrics that reference #slots are reported as syntax
error.
Since the commit 3a61fd866ef9 ("perf expr: Return -EINVAL for syntax
error in expr__find_ids()"), these syntax errors are populated as
failures and make the PMU metric test fail:
9.3: Parsing of PMU event table metrics:
--- start ---
...
Found metric 'backend_bound'
metric expr 100 * (stall_slot_backend / (#slots * cpu_cycles)) for backend_bound
parsing metric: 100 * (stall_slot_backend / (#slots * cpu_cycles))
Failure to read '#slots'
literal: #slots = nan
syntax error
Fail to parse metric or group `backend_bound'
...
---- end(-1) ----
9.3: Parsing of PMU event table metrics : FAILED!
This commit introduces a new function is_expected_broken_metric() to
identify broken metrics, and treats metrics containing "#slots" as
broken when #slots == 0 on Arm64 platforms.
Fixes: 3a61fd866ef9 ("perf expr: Return -EINVAL for syntax error in expr__find_ids()")
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
tools/perf/tests/pmu-events.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
index a997168621688007c85495e2d9f6f459c2471516..6a68d46a4fcd96b7ce46272af36fcb5590939505 100644
--- a/tools/perf/tests/pmu-events.c
+++ b/tools/perf/tests/pmu-events.c
@@ -15,6 +15,7 @@
#include "util/expr.h"
#include "util/hashmap.h"
#include "util/parse-events.h"
+#include "util/tool_pmu.h"
#include "metricgroup.h"
#include "stat.h"
@@ -817,6 +818,26 @@ struct metric {
struct metric_ref metric_ref;
};
+static bool is_expected_broken_metric(const struct pmu_metric *pm)
+{
+ if (!strcmp(pm->metric_name, "M1") || !strcmp(pm->metric_name, "M2") ||
+ !strcmp(pm->metric_name, "M3"))
+ return true;
+
+#if defined(__aarch64__)
+ /*
+ * Arm64 platforms may return “#slots == 0”, which is treated as a
+ * syntax error by the parser. Don't test these metrics when running
+ * on such platforms.
+ */
+ if (!strstr(pm->metric_name, "#slots") &&
+ !tool_pmu__cpu_slots_per_cycle())
+ return true;
+#endif
+
+ return false;
+}
+
static int test__parsing_callback(const struct pmu_metric *pm,
const struct pmu_metrics_table *table,
void *data)
@@ -852,8 +873,7 @@ static int test__parsing_callback(const struct pmu_metric *pm,
err = metricgroup__parse_groups_test(evlist, table, pm->metric_name);
if (err) {
- if (!strcmp(pm->metric_name, "M1") || !strcmp(pm->metric_name, "M2") ||
- !strcmp(pm->metric_name, "M3")) {
+ if (is_expected_broken_metric(pm)) {
(*failures)--;
pr_debug("Expected broken metric %s skipping\n", pm->metric_name);
err = 0;
---
base-commit: 4cf1f549bbcdfea9c20df52994bb342677472dcd
change-id: 20260408-perf_fix_pmu_metrics_test-73c4dedc8585
Best regards,
--
Leo Yan <leo.yan@arm.com>
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] perf pmu: Skip test on Arm64 when #slots is zero
2026-04-10 10:48 [PATCH] perf pmu: Skip test on Arm64 when #slots is zero Leo Yan
@ 2026-04-10 10:59 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-04-10 10:59 UTC (permalink / raw)
To: Leo Yan; +Cc: linux-perf-users
Sashiko AI review found 1 potential issue(s):
- [Medium] Incorrect field check and negated logic in `is_expected_broken_metric()` masks legitimate test failures.
--
commit 06b8acc454fc829193782764d8f5906526599677
Author: Leo Yan <leo.yan@arm.com>
perf pmu: Skip test on Arm64 when #slots is zero
This commit introduces a check to skip metric tests on Arm64 platforms when
the slot count is zero, preventing syntax errors from failing the PMU metric
tests.
> diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
> --- a/tools/perf/tests/pmu-events.c
> +++ b/tools/perf/tests/pmu-events.c
[ ... ]
> +static bool is_expected_broken_metric(const struct pmu_metric *pm)
> +{
> + if (!strcmp(pm->metric_name, "M1") || !strcmp(pm->metric_name, "M2") ||
> + !strcmp(pm->metric_name, "M3"))
> + return true;
> +
> +#if defined(__aarch64__)
> + /*
> + * Arm64 platforms may return “#slots == 0”, which is treated as a
> + * syntax error by the parser. Don't test these metrics when running
> + * on such platforms.
> + */
> + if (!strstr(pm->metric_name, "#slots") &&
> + !tool_pmu__cpu_slots_per_cycle())
> + return true;
Should this check pm->metric_expr instead of pm->metric_name, and should
the negation be removed?
The string "#slots" appears to be part of the metric expression rather than
the metric name. Additionally, the !strstr() condition evaluates to true
when the string is not found.
Because most metric names do not contain "#slots", this condition seems to
evaluate to true for almost all metrics. On Arm64 platforms where
tool_pmu__cpu_slots_per_cycle() returns 0, could this cause any metric
parsing failure to be falsely identified as an expected broken metric and
silently skipped?
> +#endif
> +
> + return false;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260410-perf_fix_pmu_metrics_test-v1-1-18a5d80f71b6@arm.com?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-04-10 10:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-10 10:48 [PATCH] perf pmu: Skip test on Arm64 when #slots is zero Leo Yan
2026-04-10 10:59 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox