From: Andi Kleen <andi@firstfloor.org>
To: acme@kernel.org
Cc: jolsa@kernel.org, linux-kernel@vger.kernel.org,
Andi Kleen <ak@linux.intel.com>
Subject: [PATCH v1] perf parse: Avoid false uncore matches
Date: Thu, 16 Apr 2020 09:21:19 -0700 [thread overview]
Message-ID: <20200416162119.619956-1-andi@firstfloor.org> (raw)
From: Andi Kleen <ak@linux.intel.com>
The PMU matching adds an implicit '*' to match multiple instances of PMUs.
But this causes problems when the user specified an explicit number,
in this case longer numbers with the same prefix could be matched too,
which is not intended.
Check for the number case and avoid the extra wildcard.
Also this fixes a memory leak with the pattern match. We would not
free the allocated pattern.
Before:
$ perf stat --no-merge -e cha_1// -a sleep 1
Performance counter stats for 'system wide':
698,393,431 uncore_cha_1//
698,395,491 uncore_cha_14//
698,393,873 uncore_cha_12//
698,392,975 uncore_cha_10//
698,391,167 uncore_cha_17//
698,390,371 uncore_cha_15//
698,389,007 uncore_cha_13//
698,388,069 uncore_cha_11//
698,386,991 uncore_cha_16//
1.001343184 seconds time elapsed
After
$ ./perf stat --no-merge -e cha_1// -a sleep 1
Performance counter stats for 'system wide':
741,490,611 uncore_cha_1//
1.000847326 seconds time elapsed
$
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
tools/perf/util/parse-events.y | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 94f8bcd83582..f38c90756476 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -286,7 +286,8 @@ PE_NAME opt_pmu_config
parse_events_terms__delete(orig_terms); \
free(list); \
free($1); \
- free(pattern); \
+ if ($1 != pattern) \
+ free(pattern); \
YYABORT; \
} while(0)
@@ -303,7 +304,9 @@ PE_NAME opt_pmu_config
struct perf_pmu *pmu = NULL;
int ok = 0;
- if (asprintf(&pattern, "%s*", $1) < 0)
+ if ($1[0] && isdigit($1[strlen($1) - 1]))
+ pattern = $1;
+ else if (asprintf(&pattern, "%s*", $1) < 0)
CLEANUP_YYABORT;
while ((pmu = perf_pmu__scan(pmu)) != NULL) {
@@ -320,6 +323,8 @@ PE_NAME opt_pmu_config
parse_events_terms__delete(terms);
}
}
+ if ($1 != pattern)
+ free(pattern);
if (!ok)
CLEANUP_YYABORT;
--
2.24.1
next reply other threads:[~2020-04-16 16:21 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-16 16:21 Andi Kleen [this message]
2020-04-16 22:22 ` [PATCH v1] perf parse: Avoid false uncore matches Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200416162119.619956-1-andi@firstfloor.org \
--to=andi@firstfloor.org \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).