101 lines
3.5 KiB
Diff
101 lines
3.5 KiB
Diff
From 6308ca084108657d3e8f1adb63112edf7d83cdd8 Mon Sep 17 00:00:00 2001
|
|
From: Jin Yao <yao.jin@linux.intel.com>
|
|
Date: Tue, 27 Apr 2021 15:01:17 +0800
|
|
Subject: [PATCH 169/201] perf pmu: Save pmu name
|
|
|
|
mainline inclusion
|
|
from mainline-v5.13-rc1
|
|
commit 32705de7d45d0ed989517a63454c2b3e5e5ea267
|
|
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=32705de7d45d0ed989517a63454c2b3e5e5ea267
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
On hybrid platform, one event is available on one pmu
|
|
(such as, available on cpu_core or on cpu_atom).
|
|
|
|
This patch saves the pmu name to the pmu field of struct perf_pmu_alias.
|
|
Then next we can know the pmu which the event can be enabled on.
|
|
|
|
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
|
|
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: Andi Kleen <ak@linux.intel.com>
|
|
Cc: Ingo Molnar <mingo@redhat.com>
|
|
Cc: Kan Liang <kan.liang@intel.com>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Link: https://lore.kernel.org/r/20210427070139.25256-5-yao.jin@linux.intel.com
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/util/pmu.c | 10 +++++++++-
|
|
tools/perf/util/pmu.h | 1 +
|
|
2 files changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
|
|
index bc85c8896db9..089b5af03f98 100644
|
|
--- a/tools/perf/util/pmu.c
|
|
+++ b/tools/perf/util/pmu.c
|
|
@@ -283,6 +283,7 @@ void perf_pmu_free_alias(struct perf_pmu_alias *newalias)
|
|
zfree(&newalias->str);
|
|
zfree(&newalias->metric_expr);
|
|
zfree(&newalias->metric_name);
|
|
+ zfree(&newalias->pmu_name);
|
|
parse_events_terms__purge(&newalias->terms);
|
|
free(newalias);
|
|
}
|
|
@@ -297,6 +298,10 @@ static bool perf_pmu_merge_alias(struct perf_pmu_alias *newalias,
|
|
|
|
list_for_each_entry(a, alist, list) {
|
|
if (!strcasecmp(newalias->name, a->name)) {
|
|
+ if (newalias->pmu_name && a->pmu_name &&
|
|
+ !strcasecmp(newalias->pmu_name, a->pmu_name)) {
|
|
+ continue;
|
|
+ }
|
|
perf_pmu_update_alias(a, newalias);
|
|
perf_pmu_free_alias(newalias);
|
|
return true;
|
|
@@ -314,7 +319,8 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|
int num;
|
|
char newval[256];
|
|
char *long_desc = NULL, *topic = NULL, *unit = NULL, *perpkg = NULL,
|
|
- *metric_expr = NULL, *metric_name = NULL, *deprecated = NULL;
|
|
+ *metric_expr = NULL, *metric_name = NULL, *deprecated = NULL,
|
|
+ *pmu_name = NULL;
|
|
|
|
if (pe) {
|
|
long_desc = (char *)pe->long_desc;
|
|
@@ -324,6 +330,7 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|
metric_expr = (char *)pe->metric_expr;
|
|
metric_name = (char *)pe->metric_name;
|
|
deprecated = (char *)pe->deprecated;
|
|
+ pmu_name = (char *)pe->pmu;
|
|
}
|
|
|
|
alias = malloc(sizeof(*alias));
|
|
@@ -389,6 +396,7 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|
}
|
|
alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
|
|
alias->str = strdup(newval);
|
|
+ alias->pmu_name = pmu_name ? strdup(pmu_name) : NULL;
|
|
|
|
if (deprecated)
|
|
alias->deprecated = true;
|
|
diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
|
|
index 118a2871e717..a9942e5b076d 100644
|
|
--- a/tools/perf/util/pmu.h
|
|
+++ b/tools/perf/util/pmu.h
|
|
@@ -62,6 +62,7 @@ struct perf_pmu_alias {
|
|
bool deprecated;
|
|
char *metric_expr;
|
|
char *metric_name;
|
|
+ char *pmu_name;
|
|
};
|
|
|
|
struct perf_pmu *perf_pmu__find(const char *name);
|
|
--
|
|
2.27.0
|
|
|