From nobody Sun Jun 14 11:31:16 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 617EA2D47F1; Thu, 2 Apr 2026 16:04:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145899; cv=none; b=ESTPoHhdKwHggLlslwN44KZzt8LCqzjBIe/Qt6upsqDO/qBkLsgeqL/K/z3oEnYBKwSxu7FUWd4JRfgc/hEvg8KmbyPX6sf2bDzI27XzEwSvJNedRzX4P7fr6d2UpNT8MUbNdUQ4zMLKPSqeodCF8Rej+quCIKvsviSXk+FUcag= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145899; c=relaxed/simple; bh=5WSu1/ie1OJl/4DZsPZl0F7y0MW2cOIYvfLiJjg60Js=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ohPYEAa31KCFrUAQkXDj63ZbFrbNTIwP9ERWkQ9scXoQSx6LZBYu+jBBCFB0iZqfgYygebG7krJKC7/FZc6y/Ez+nAvzY1oYy7egqU+ZX95bABMRuMwUENdo46Ol//wXo8I6m+k8oUfSnN7KYR5f+UQS4297XxVcIEQuc9vM2aw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=Q/3yPQEK; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="Q/3yPQEK" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1479833EA; Thu, 2 Apr 2026 09:04:51 -0700 (PDT) Received: from e132581.arm.com (e132581.arm.com [10.1.196.87]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 852F03F915; Thu, 2 Apr 2026 09:04:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1775145896; bh=5WSu1/ie1OJl/4DZsPZl0F7y0MW2cOIYvfLiJjg60Js=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Q/3yPQEKVqW16+WV+L4ucRwi33/sx5g0TKdqC7aRYunvVvwRs0rd+q0onCusgGqEw SVS8Y4W243LBDe94jzT241SmSk0a1onbCn6gx7n8Ewzumb+8RPUpid/h6XfHzWsW2J h/fTSbkOCibm+q9X505xYW219PAOcRCfYhQNd5eM= From: Leo Yan Date: Thu, 02 Apr 2026 17:04:47 +0100 Subject: [PATCH v2 1/3] perf expr: Return -EINVAL for syntax error in expr__find_ids() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260402-perf_fix_metrics_group-v2-1-1f9427a5d763@arm.com> References: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> In-Reply-To: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> To: Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Leo Yan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1775145893; l=1594; i=leo.yan@arm.com; s=20250604; h=from:subject:message-id; bh=5WSu1/ie1OJl/4DZsPZl0F7y0MW2cOIYvfLiJjg60Js=; b=M1/NlrOkRD5yyxhSniPGs9UucDTANLPvoXS/Jgl1RKHJNlx9XziZRytFgAAzOilIhZqqHdrUp qakczbxljn0A8frT27n2qw4k+BoQxTz9MteSMOw6LSXkiT9nAJyvDlY X-Developer-Key: i=leo.yan@arm.com; a=ed25519; pk=k4BaDbvkCXzBFA7Nw184KHGP5thju8lKqJYIrOWxDhI= expr__find_ids() propagates the parser return value directly. For syntax errors, the parser can return a positive value, but callers treat it as success, e.g., for below case on Arm64 platform: metric expr 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MIS_PR= ED * 3 / CPU_CYCLES) for backend_bound parsing metric: 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MI= S_PRED * 3 / CPU_CYCLES) Failure to read '#slots' literal: #slots =3D nan syntax error Convert positive parser returns in expr__find_ids() to -EINVAL, as a result, the error value will be respected by callers. Before: perf stat -C 5 Failure to read '#slots'Failure to read '#slots'Failure to read '#slots'F= ailure to read '#slots'Segmentation fault After: perf stat -C 5 Failure to read '#slots'Cannot find metric or group `Default' Fixes: ded80bda8bc9 ("perf expr: Migrate expr ids table to a hashmap") Signed-off-by: Leo Yan Reviewed-by: Ian Rogers --- tools/perf/util/expr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c index 465fe2e9bbbeff52d3eebfe71aec53f1e5709991..b7664cb68554b284c2b64ca750b= dfb114fa5515e 100644 --- a/tools/perf/util/expr.c +++ b/tools/perf/util/expr.c @@ -376,7 +376,8 @@ int expr__find_ids(const char *expr, const char *one, if (one) expr__del_id(ctx, one); =20 - return ret; + /* A positive value means syntax error, convert to -EINVAL */ + return ret > 0 ? -EINVAL : ret; } =20 double expr_id_data__value(const struct expr_id_data *data) --=20 2.34.1 From nobody Sun Jun 14 11:31:16 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1FA5D31A56D; Thu, 2 Apr 2026 16:04:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145900; cv=none; b=JEotyJI6DDZ1/tVIcbpbHHPqivhqbl+rz1ZLdS2UQD7BGeryz8ERZyZWh6cQIeRtbjgNC7ltup6FVzQI+OmcXGk5e/tI+lsTUv3r8+BjkU5KD8nZXjjqcRBOmnoOk0OfQCULZlRg9vq6ca/mCoeX6hEtkewcFQQ7dH9ROVIG2aM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145900; c=relaxed/simple; bh=QEiALosLovqc7yLlBCwbeZxclFmLViVyOfgBejS+sUE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lQJtqwcUhQXhSIECt0oU6f3XnyaPN3APkEnkQqWtcp2+pnmbk3PkZnL1o3bLLDMA1v9ExxEwRLgrZeg2e+LxhiB8YkJjkNx4sEpF5oM6+KG75empvya2lrUgIzlpRP9YMNAs51lvVK6a7vRNYfk5Y/Y3d7x9RcEe/2Lall5PFxA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=V+SeRZyF; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="V+SeRZyF" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BA429344A; Thu, 2 Apr 2026 09:04:52 -0700 (PDT) Received: from e132581.arm.com (e132581.arm.com [10.1.196.87]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 370113F915; Thu, 2 Apr 2026 09:04:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1775145898; bh=QEiALosLovqc7yLlBCwbeZxclFmLViVyOfgBejS+sUE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=V+SeRZyF/P6jXLGZq1GkpVxR5yll9fft0pySAR39RObiH4Ux2qllq1HCoRR9k258W 9eDVc4BoxCTr7sCprHTG9mi7a30zU1nglJ+IqXD6mgC/FWNLwQy1NnpJodkVFcq5yq 5IumIyaWuqV31x8adTgVWW3EFyADI+5WLIb19HaE= From: Leo Yan Date: Thu, 02 Apr 2026 17:04:48 +0100 Subject: [PATCH v2 2/3] perf expr: Add '\n' in literal parse errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260402-perf_fix_metrics_group-v2-2-1f9427a5d763@arm.com> References: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> In-Reply-To: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> To: Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Leo Yan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1775145893; l=1016; i=leo.yan@arm.com; s=20250604; h=from:subject:message-id; bh=QEiALosLovqc7yLlBCwbeZxclFmLViVyOfgBejS+sUE=; b=f0pIB4u1amtKL8neDNnzsKwFXxUwONVPlIRT3cJkJCtMPFJzrarBSl7KdDalM7F8GYv2ftqyb fa0Xnv6k+GRCZgPjN6niLyxDwUoZ/SFWDvZAJ6lVTjP4Fv7cIkRcBN0 X-Developer-Key: i=leo.yan@arm.com; a=ed25519; pk=k4BaDbvkCXzBFA7Nw184KHGP5thju8lKqJYIrOWxDhI= Add a trailing newline for logs. Before: perf stat -C 5 Failure to read '#slots'Cannot find metric or group `Default' After: perf stat -C 5 Failure to read '#slots' Cannot find metric or group `Default' Signed-off-by: Leo Yan Reviewed-by: Ian Rogers --- tools/perf/util/expr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c index b7664cb68554b284c2b64ca750bdfb114fa5515e..644769e927089ea1dd2f9252078= c35a69fa48dce 100644 --- a/tools/perf/util/expr.c +++ b/tools/perf/util/expr.c @@ -407,9 +407,9 @@ double expr__get_literal(const char *literal, const str= uct expr_scanner_ctx *ctx &count)) result =3D count; else - pr_err("Failure to read '%s'", literal); + pr_err("Failure to read '%s'\n", literal); } else { - pr_err("Unrecognized literal '%s'", literal); + pr_err("Unrecognized literal '%s'\n", literal); } =20 pr_debug2("literal: %s =3D %f\n", literal, result); --=20 2.34.1 From nobody Sun Jun 14 11:31:16 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DA69C3EE1F5; Thu, 2 Apr 2026 16:05:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145902; cv=none; b=Nn19xiEaXPAOQ/rRYQNvLPw5hNm7zoH6Yp8C6KCb8rkwmpEBMXwMtzZsj8iRY+ZI9d16TNKE7Pr2l+Vpssr5B26KsJlfg4DEBKzYs7bolHfzqaYXo95HTlBdDefiYxO8uosxXE8eZDRjevQsgVkc0jBExAJ/w/nkxYVhJsdG7mc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775145902; c=relaxed/simple; bh=cFOemXhrlUon3eAqkNPXtTCtvcxUhmX49WiyclHmTrU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TA/q9hIxhN74xQMxE8QXsp5J6ymLMzkVEbdsh8keYU+LGQXXb2L0qyhxWjtF9RsrxZZecIb5DTUS8M+pwnYks1yfykIZ3gWe2icM5MAb+mXsvAjBuwXH/AEp8Wi+zdQZJL+1+NVj/ToLeBJYG1fw1k9XZ74WG1SGQ3CtWAjW2tk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=oVYyo3J1; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="oVYyo3J1" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6F4C419F6; Thu, 2 Apr 2026 09:04:54 -0700 (PDT) Received: from e132581.arm.com (e132581.arm.com [10.1.196.87]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DCFD13F915; Thu, 2 Apr 2026 09:04:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1775145900; bh=cFOemXhrlUon3eAqkNPXtTCtvcxUhmX49WiyclHmTrU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=oVYyo3J1LjpSGFYQKh5Uxc16zYV42+Kf7ZWQbYWWTPz9m+XgFEQFi8ai4B2nA6lPw 5amuHINojP6BZrFUXCu4SH7P6AE0BrbfhCO14XM9NMZM65PkiwIXjwelFWVZ/Sjwqa e9RLW83ezlmNjM5Myk/NOrKHJ2YjZ3NoiLkRJMVA= From: Leo Yan Date: Thu, 02 Apr 2026 17:04:49 +0100 Subject: [PATCH v2 3/3] perf metricgroup: Refine error logs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260402-perf_fix_metrics_group-v2-3-1f9427a5d763@arm.com> References: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> In-Reply-To: <20260402-perf_fix_metrics_group-v2-0-1f9427a5d763@arm.com> To: Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Leo Yan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1775145893; l=2552; i=leo.yan@arm.com; s=20250604; h=from:subject:message-id; bh=cFOemXhrlUon3eAqkNPXtTCtvcxUhmX49WiyclHmTrU=; b=UrGthdPokFrckDpD28hi0bxnCXqPTkpYtkXbcTdrnqWKU+a0HJc9DecNAhtR0kb8rIL5TYr62 lBcrz9zRV1kDgk86kbuB5gzxVVXEHWLtIHadvZh2JmVA9jcb0IlJqS1 X-Developer-Key: i=leo.yan@arm.com; a=ed25519; pk=k4BaDbvkCXzBFA7Nw184KHGP5thju8lKqJYIrOWxDhI= Return -ENOENT when no metric/group matches, and directly use the return value from expr__find_ids(), so -EINVAL is reserved for parse failures. Print separate logs to make it clear. Before: perf stat -C 5 -vvv Using CPUID 0x00000000410fd490 metric expr 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MIS_PR= ED * 3 / CPU_CYCLES) for backend_bound parsing metric: 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MI= S_PRED * 3 / CPU_CYCLES) Failure to read '#slots' literal: #slots =3D nan syntax error Cannot find metric or group `Default' After: perf stat -C 5 -vvv Using CPUID 0x00000000410fd490 metric expr 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MIS_PR= ED * 3 / CPU_CYCLES) for backend_bound parsing metric: 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MI= S_PRED * 3 / CPU_CYCLES) Failure to read '#slots' literal: #slots =3D nan syntax error Fail to parse metric or group `Default' Signed-off-by: Leo Yan Reviewed-by: Ian Rogers --- tools/perf/util/metricgroup.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index f7d53b4e46f45cb01181a462cb5bb5ca5a3b1a9c..4db9578efd811cf91d192cc13fb= 757cf5aab21f7 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -914,10 +914,9 @@ static int __add_metric(struct list_head *metric_list, expr =3D metric_no_threshold ? pm->metric_name : pm->metric_threshold; visited_node.name =3D "__threshold__"; } - if (expr__find_ids(expr, NULL, root_metric->pctx) < 0) { - /* Broken metric. */ - ret =3D -EINVAL; - } + + ret =3D expr__find_ids(expr, NULL, root_metric->pctx); + if (!ret) { /* Resolve referenced metrics. */ struct perf_pmu *pmu; @@ -1101,7 +1100,7 @@ static int metricgroup__add_metric(const char *pmu, c= onst char *metric_name, con */ ret =3D metricgroup__for_each_metric(table, metricgroup__add_metric_callb= ack, &data); if (!ret && !data.has_match) - ret =3D -EINVAL; + ret =3D -ENOENT; =20 /* * add to metric_list so that they can be released @@ -1152,6 +1151,8 @@ static int metricgroup__add_metric_list(const char *p= mu, const char *list, user_requested_cpu_list, system_wide, metric_list, table); if (ret =3D=3D -EINVAL) + pr_err("Fail to parse metric or group `%s'\n", metric_name); + else if (ret =3D=3D -ENOENT) pr_err("Cannot find metric or group `%s'\n", metric_name); =20 if (ret) --=20 2.34.1