Commit 442eeb77 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo

perf print-events: Avoid unnecessary strlist

The strlist in print_hwcache_events holds the event names as they are
generated, and then it is iterated and printed. This is unnecessary
and each event can just be printed as it is processed.
Rename the variable i to res, to be more intention revealing and
consistent with other code.
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Tested-by: default avatarKan Liang <kan.liang@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ahmad Yasin <ahmad.yasin@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Caleb Biggers <caleb.biggers@intel.com>
Cc: Edward Baker <edward.baker@intel.com>
Cc: Florian Fischer <florian.fischer@muhq.space>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kang Minchul <tegongkang@gmail.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Perry Taylor <perry.taylor@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Samantha Alt <samantha.alt@intel.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Cc: Weilin Wang <weilin.wang@intel.com>
Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Cc: Yang Jihong <yangjihong1@huawei.com>
Link: https://lore.kernel.org/r/20230502223851.2234828-18-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent cae256ae
...@@ -230,58 +230,60 @@ void print_sdt_events(const struct print_callbacks *print_cb, void *print_state) ...@@ -230,58 +230,60 @@ void print_sdt_events(const struct print_callbacks *print_cb, void *print_state)
int print_hwcache_events(const struct print_callbacks *print_cb, void *print_state) int print_hwcache_events(const struct print_callbacks *print_cb, void *print_state)
{ {
struct strlist *evt_name_list = strlist__new(NULL, NULL); const char *event_type_descriptor = event_type_descriptors[PERF_TYPE_HW_CACHE];
struct str_node *nd;
if (!evt_name_list) {
pr_debug("Failed to allocate new strlist for hwcache events\n");
return -ENOMEM;
}
for (int type = 0; type < PERF_COUNT_HW_CACHE_MAX; type++) { for (int type = 0; type < PERF_COUNT_HW_CACHE_MAX; type++) {
for (int op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) { for (int op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) {
/* skip invalid cache type */ /* skip invalid cache type */
if (!evsel__is_cache_op_valid(type, op)) if (!evsel__is_cache_op_valid(type, op))
continue; continue;
for (int i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) { for (int res = 0; res < PERF_COUNT_HW_CACHE_RESULT_MAX; res++) {
struct perf_pmu *pmu = NULL; struct perf_pmu *pmu = NULL;
char name[64]; char name[64];
__evsel__hw_cache_type_op_res_name(type, op, i, name, sizeof(name)); __evsel__hw_cache_type_op_res_name(type, op, res,
name, sizeof(name));
if (!perf_pmu__has_hybrid()) { if (!perf_pmu__has_hybrid()) {
if (is_event_supported(PERF_TYPE_HW_CACHE, if (is_event_supported(PERF_TYPE_HW_CACHE,
type | (op << 8) | (i << 16))) type | (op << 8) | (res << 16))) {
strlist__add(evt_name_list, name); print_cb->print_event(print_state,
"cache",
/*pmu_name=*/NULL,
name,
/*event_alias=*/NULL,
/*scale_unit=*/NULL,
/*deprecated=*/false,
event_type_descriptor,
/*desc=*/NULL,
/*long_desc=*/NULL,
/*encoding_desc=*/NULL);
}
continue; continue;
} }
perf_pmu__for_each_hybrid_pmu(pmu) { perf_pmu__for_each_hybrid_pmu(pmu) {
if (is_event_supported(PERF_TYPE_HW_CACHE, if (is_event_supported(PERF_TYPE_HW_CACHE,
type | (op << 8) | (i << 16) | type | (op << 8) | (res << 16) |
((__u64)pmu->type << PERF_PMU_TYPE_SHIFT))) { ((__u64)pmu->type << PERF_PMU_TYPE_SHIFT))) {
char new_name[128]; char new_name[128];
snprintf(new_name, sizeof(new_name), snprintf(new_name, sizeof(new_name),
"%s/%s/", pmu->name, name); "%s/%s/", pmu->name, name);
strlist__add(evt_name_list, new_name); print_cb->print_event(print_state,
"cache",
pmu->name,
name,
new_name,
/*scale_unit=*/NULL,
/*deprecated=*/false,
event_type_descriptor,
/*desc=*/NULL,
/*long_desc=*/NULL,
/*encoding_desc=*/NULL);
} }
} }
} }
} }
} }
strlist__for_each_entry(nd, evt_name_list) {
print_cb->print_event(print_state,
"cache",
/*pmu_name=*/NULL,
nd->s,
/*event_alias=*/NULL,
/*scale_unit=*/NULL,
/*deprecated=*/false,
event_type_descriptors[PERF_TYPE_HW_CACHE],
/*desc=*/NULL,
/*long_desc=*/NULL,
/*encoding_desc=*/NULL);
}
strlist__delete(evt_name_list);
return 0; return 0;
} }
......
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