perf pmu: Improve name/comments, avoid a memory allocation
Improve documentation around perf_pmu_alias pmu_name and on functions. Reduce the scope of pmu_uncore_alias_match to just file. Rename perf_pmu__valid_suffix to the more revealing perf_pmu__match_ignoring_suffix. Add a short-cut to perf_pmu__match_ignoring_suffix for PMU names that don't also have a socket value, and can therefore avoid a memory allocation. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Rob Herring <robh@kernel.org> Cc: Sean Christopherson <seanjc@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20230406235256.2768773-1-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
330f40a0d9
Коммит
240e6fd0a9
|
@ -686,11 +686,14 @@ __weak const struct pmu_metrics_table *pmu_metrics_table__find(void)
|
|||
return perf_pmu__find_metrics_table(NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Suffix must be in form tok_{digits}, or tok{digits}, or same as pmu_name
|
||||
* to be valid.
|
||||
/**
|
||||
* perf_pmu__match_ignoring_suffix - Does the pmu_name match tok ignoring any
|
||||
* trailing suffix? The Suffix must be in form
|
||||
* tok_{digits}, or tok{digits}.
|
||||
* @pmu_name: The pmu_name with possible suffix.
|
||||
* @tok: The possible match to pmu_name without suffix.
|
||||
*/
|
||||
static bool perf_pmu__valid_suffix(const char *pmu_name, char *tok)
|
||||
static bool perf_pmu__match_ignoring_suffix(const char *pmu_name, const char *tok)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
|
@ -715,11 +718,21 @@ static bool perf_pmu__valid_suffix(const char *pmu_name, char *tok)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool pmu_uncore_alias_match(const char *pmu_name, const char *name)
|
||||
/**
|
||||
* pmu_uncore_alias_match - does name match the PMU name?
|
||||
* @pmu_name: the json struct pmu_event name. This may lack a suffix (which
|
||||
* matches) or be of the form "socket,pmuname" which will match
|
||||
* "socketX_pmunameY".
|
||||
* @name: a real full PMU name as from sysfs.
|
||||
*/
|
||||
static bool pmu_uncore_alias_match(const char *pmu_name, const char *name)
|
||||
{
|
||||
char *tmp = NULL, *tok, *str;
|
||||
bool res;
|
||||
|
||||
if (strchr(pmu_name, ',') == NULL)
|
||||
return perf_pmu__match_ignoring_suffix(name, pmu_name);
|
||||
|
||||
str = strdup(pmu_name);
|
||||
if (!str)
|
||||
return false;
|
||||
|
@ -746,7 +759,7 @@ bool pmu_uncore_alias_match(const char *pmu_name, const char *name)
|
|||
|
||||
name = strstr(name, tok);
|
||||
if (!name ||
|
||||
(!next_tok && !perf_pmu__valid_suffix(name, tok))) {
|
||||
(!next_tok && !perf_pmu__match_ignoring_suffix(name, tok))) {
|
||||
res = false;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1961,7 +1974,7 @@ int perf_pmu__match(char *pattern, char *name, char *tok)
|
|||
if (fnmatch(pattern, name, 0))
|
||||
return -1;
|
||||
|
||||
if (tok && !perf_pmu__valid_suffix(name, tok))
|
||||
if (tok && !perf_pmu__match_ignoring_suffix(name, tok))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -35,7 +35,7 @@ struct perf_pmu_caps {
|
|||
};
|
||||
|
||||
/**
|
||||
* struct perf_pmu - hi
|
||||
* struct perf_pmu
|
||||
*/
|
||||
struct perf_pmu {
|
||||
/** @name: The name of the PMU such as "cpu". */
|
||||
|
@ -186,7 +186,10 @@ struct perf_pmu_alias {
|
|||
* default.
|
||||
*/
|
||||
bool deprecated;
|
||||
/** @pmu_name: The name copied from struct perf_pmu. */
|
||||
/**
|
||||
* @pmu_name: The name copied from the json struct pmu_event. This can
|
||||
* differ from the PMU name as it won't have suffixes.
|
||||
*/
|
||||
char *pmu_name;
|
||||
};
|
||||
|
||||
|
@ -238,7 +241,6 @@ void pmu_add_cpu_aliases_table(struct list_head *head, struct perf_pmu *pmu,
|
|||
char *perf_pmu__getcpuid(struct perf_pmu *pmu);
|
||||
const struct pmu_events_table *pmu_events_table__find(void);
|
||||
const struct pmu_metrics_table *pmu_metrics_table__find(void);
|
||||
bool pmu_uncore_alias_match(const char *pmu_name, const char *name);
|
||||
void perf_pmu_free_alias(struct perf_pmu_alias *alias);
|
||||
|
||||
int perf_pmu__convert_scale(const char *scale, char **end, double *sval);
|
||||
|
|
Загрузка…
Ссылка в новой задаче