Commit 240e6fd0 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo

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: default avatarIan 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 330f40a0
...@@ -686,11 +686,14 @@ __weak const struct pmu_metrics_table *pmu_metrics_table__find(void) ...@@ -686,11 +686,14 @@ __weak const struct pmu_metrics_table *pmu_metrics_table__find(void)
return perf_pmu__find_metrics_table(NULL); return perf_pmu__find_metrics_table(NULL);
} }
/* /**
* Suffix must be in form tok_{digits}, or tok{digits}, or same as pmu_name * perf_pmu__match_ignoring_suffix - Does the pmu_name match tok ignoring any
* to be valid. * 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; const char *p;
...@@ -715,11 +718,21 @@ static bool perf_pmu__valid_suffix(const char *pmu_name, char *tok) ...@@ -715,11 +718,21 @@ static bool perf_pmu__valid_suffix(const char *pmu_name, char *tok)
return true; 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; char *tmp = NULL, *tok, *str;
bool res; bool res;
if (strchr(pmu_name, ',') == NULL)
return perf_pmu__match_ignoring_suffix(name, pmu_name);
str = strdup(pmu_name); str = strdup(pmu_name);
if (!str) if (!str)
return false; return false;
...@@ -746,7 +759,7 @@ bool pmu_uncore_alias_match(const char *pmu_name, const char *name) ...@@ -746,7 +759,7 @@ bool pmu_uncore_alias_match(const char *pmu_name, const char *name)
name = strstr(name, tok); name = strstr(name, tok);
if (!name || if (!name ||
(!next_tok && !perf_pmu__valid_suffix(name, tok))) { (!next_tok && !perf_pmu__match_ignoring_suffix(name, tok))) {
res = false; res = false;
goto out; goto out;
} }
...@@ -1961,7 +1974,7 @@ int perf_pmu__match(char *pattern, char *name, char *tok) ...@@ -1961,7 +1974,7 @@ int perf_pmu__match(char *pattern, char *name, char *tok)
if (fnmatch(pattern, name, 0)) if (fnmatch(pattern, name, 0))
return -1; return -1;
if (tok && !perf_pmu__valid_suffix(name, tok)) if (tok && !perf_pmu__match_ignoring_suffix(name, tok))
return -1; return -1;
return 0; return 0;
......
...@@ -35,7 +35,7 @@ struct perf_pmu_caps { ...@@ -35,7 +35,7 @@ struct perf_pmu_caps {
}; };
/** /**
* struct perf_pmu - hi * struct perf_pmu
*/ */
struct perf_pmu { struct perf_pmu {
/** @name: The name of the PMU such as "cpu". */ /** @name: The name of the PMU such as "cpu". */
...@@ -186,7 +186,10 @@ struct perf_pmu_alias { ...@@ -186,7 +186,10 @@ struct perf_pmu_alias {
* default. * default.
*/ */
bool deprecated; 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; char *pmu_name;
}; };
...@@ -238,7 +241,6 @@ void pmu_add_cpu_aliases_table(struct list_head *head, struct perf_pmu *pmu, ...@@ -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); char *perf_pmu__getcpuid(struct perf_pmu *pmu);
const struct pmu_events_table *pmu_events_table__find(void); const struct pmu_events_table *pmu_events_table__find(void);
const struct pmu_metrics_table *pmu_metrics_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); void perf_pmu_free_alias(struct perf_pmu_alias *alias);
int perf_pmu__convert_scale(const char *scale, char **end, double *sval); int perf_pmu__convert_scale(const char *scale, char **end, double *sval);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment