Re: [PATCH V4 1/2] tools/perf: Fix the check for parameterized field in event term
From: Namhyung Kim <namhyung@kernel.org>
Date: 2026-06-04 21:52:28
Also in:
linux-perf-users
On Mon, May 04, 2026 at 09:12:04PM +0530, Athira Rajeev wrote:
The format_alias() function in util/pmu.c has a check to
detect whether the event has parameterized field ( =? ).
The string alias->terms contains the event and if the event
has user configurable parameter, there will be presence of
sub string "=?" in the alias->terms.
Snippet of code:
/* Paramemterized events have the parameters shown. */
if (strstr(alias->terms, "=?")) {
/* No parameters. */
snprintf(buf, len, "%.*s/%s/", (int)pmu_name_len, pmu->name, alias->name);
if "strstr" contains the substring, it returns a pointer
and hence enters the above check which is not the expected
check. And hence "perf list" doesn't have the parameterized
fields in the result.
Fix this check to use:
if (!strstr(alias->terms, "=?")) {
With this change, perf list shows the events correctly with
the strings showing parameters.
Before the fix:
# ./perf list|grep -w PM_PAU_CYC
hv_24x7/PM_PAU_CYC/ [Kernel PMU event]
With this fix:
# ./perf list|grep -w PM_PAU_CYC
hv_24x7/PM_PAU_CYC,chip=?/ [Kernel PMU event]
Signed-off-by: Athira Rajeev <redacted>Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung
quoted hunk ↗ jump to hunk
--- Changelog: v3 -> v4: Updated commit message to show real example addressing review comment from Namhyung. v2 -> v3: Split the strstr correction in a single patch tools/perf/util/pmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 23337d2fa281..0b8d58543f17 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c@@ -2117,7 +2117,7 @@ static char *format_alias(char *buf, int len, const struct perf_pmu *pmu, skip_duplicate_pmus); /* Paramemterized events have the parameters shown. */ - if (strstr(alias->terms, "=?")) { + if (!strstr(alias->terms, "=?")) { /* No parameters. */ snprintf(buf, len, "%.*s/%s/", (int)pmu_name_len, pmu->name, alias->name); return buf;-- 2.47.3