mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-22 04:24:02 +08:00
perf pmu: Save pmu name
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>
This commit is contained in:
parent
eab35953e6
commit
32705de7d4
@ -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;
|
||||
|
@ -72,6 +72,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);
|
||||
|
Loading…
Reference in New Issue
Block a user