98 lines
3.6 KiB
Diff
98 lines
3.6 KiB
Diff
From e0c30e694311b19f0f7078298021077019719aef Mon Sep 17 00:00:00 2001
|
|
From: John Garry <john.garry@huawei.com>
|
|
Date: Thu, 16 Sep 2021 20:34:22 +0800
|
|
Subject: [PATCH 183/201] perf jevents: Support ConfigCode
|
|
|
|
mainline inclusion
|
|
from mainline-v5.16-rc1
|
|
commit d60bad10c4ae42ef96b5b7dfd5924c54f3f257a6
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d60bad10c4ae42ef96b5b7dfd5924c54f3f257a6
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Some PMUs use "config=XXX" for eventcodes, like:
|
|
|
|
more /sys/bus/event_source/devices/hisi_sccl1_ddrc3/events/act_cmd
|
|
config=0x5
|
|
|
|
However jevents would give an alias with .event field "event=0x5" for
|
|
this event. This is handled without issue by the parse events code, but
|
|
the pmu alias code gets a bit confused, as it warns about assigning
|
|
"event=0x5" over "config=0x5" in perf_pmu_assign_str() when merging
|
|
aliases: ./perf stat -v -e act_cmd ... alias act_cmd differs in field
|
|
'value' ...
|
|
|
|
To make things a bit more straightforward, allow jevents to support
|
|
"config=XXX" as well, by supporting a "ConfigCode" field.
|
|
|
|
Signed-off-by: John Garry <john.garry@huawei.com>
|
|
Acked-by: Ian Rogers <irogers@google.com>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: Ingo Molnar <mingo@redhat.com>
|
|
Cc: Jiri Olsa <jolsa@redhat.com>
|
|
Cc: Leo Yan <leo.yan@linaro.org>
|
|
Cc: Mark Rutland <mark.rutland@arm.com>
|
|
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
|
|
Cc: Will Deacon <will@kernel.org>
|
|
Cc: linux-arm-kernel@lists.infradead.org
|
|
Cc: linuxarm@huawei.com
|
|
Cc: liuqi115@huawei.com
|
|
Link: https://lore.kernel.org/r/1631795665-240946-3-git-send-email-john.garry@huawei.com
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/pmu-events/jevents.c | 13 ++++++++++++-
|
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
|
|
index cafab324a395..b330c244f076 100644
|
|
--- a/tools/perf/pmu-events/jevents.c
|
|
+++ b/tools/perf/pmu-events/jevents.c
|
|
@@ -571,10 +571,12 @@ static int json_events(const char *fn,
|
|
struct json_event je = {};
|
|
char *arch_std = NULL;
|
|
unsigned long long eventcode = 0;
|
|
+ unsigned long long configcode = 0;
|
|
struct msrmap *msr = NULL;
|
|
jsmntok_t *msrval = NULL;
|
|
jsmntok_t *precise = NULL;
|
|
jsmntok_t *obj = tok++;
|
|
+ bool configcode_present = false;
|
|
|
|
EXPECT(obj->type == JSMN_OBJECT, obj, "expected object");
|
|
for (j = 0; j < obj->size; j += 2) {
|
|
@@ -597,6 +599,12 @@ static int json_events(const char *fn,
|
|
addfield(map, &code, "", "", val);
|
|
eventcode |= strtoul(code, NULL, 0);
|
|
free(code);
|
|
+ } else if (json_streq(map, field, "ConfigCode")) {
|
|
+ char *code = NULL;
|
|
+ addfield(map, &code, "", "", val);
|
|
+ configcode |= strtoul(code, NULL, 0);
|
|
+ free(code);
|
|
+ configcode_present = true;
|
|
} else if (json_streq(map, field, "ExtSel")) {
|
|
char *code = NULL;
|
|
addfield(map, &code, "", "", val);
|
|
@@ -678,7 +686,10 @@ static int json_events(const char *fn,
|
|
addfield(map, &extra_desc, " ",
|
|
"(Precise event)", NULL);
|
|
}
|
|
- snprintf(buf, sizeof buf, "event=%#llx", eventcode);
|
|
+ if (configcode_present)
|
|
+ snprintf(buf, sizeof buf, "config=%#llx", configcode);
|
|
+ else
|
|
+ snprintf(buf, sizeof buf, "event=%#llx", eventcode);
|
|
addfield(map, &event, ",", buf, NULL);
|
|
if (je.desc && extra_desc)
|
|
addfield(map, &je.desc, " ", extra_desc, NULL);
|
|
--
|
|
2.27.0
|
|
|