OSDN Git Service

perf print-events: Avoid unnecessary strlist
authorIan Rogers <irogers@google.com>
Tue, 2 May 2023 22:38:24 +0000 (15:38 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 15 May 2023 12:12:13 +0000 (09:12 -0300)
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: Ian Rogers <irogers@google.com>
Tested-by: Kan 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.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/print-events.c

index ee145ce..89ac34a 100644 (file)
@@ -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)
 {
-       struct strlist *evt_name_list = strlist__new(NULL, NULL);
-       struct str_node *nd;
+       const char *event_type_descriptor = event_type_descriptors[PERF_TYPE_HW_CACHE];
 
-       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 op = 0; op < PERF_COUNT_HW_CACHE_OP_MAX; op++) {
                        /* skip invalid cache type */
                        if (!evsel__is_cache_op_valid(type, op))
                                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;
                                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 (is_event_supported(PERF_TYPE_HW_CACHE,
-                                                              type | (op << 8) | (i << 16)))
-                                               strlist__add(evt_name_list, name);
+                                                               type | (op << 8) | (res << 16))) {
+                                               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;
                                }
                                perf_pmu__for_each_hybrid_pmu(pmu) {
                                        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))) {
                                                char new_name[128];
-                                                       snprintf(new_name, sizeof(new_name),
-                                                                "%s/%s/", pmu->name, name);
-                                                       strlist__add(evt_name_list, new_name);
+                                               snprintf(new_name, sizeof(new_name),
+                                                       "%s/%s/", pmu->name, 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;
 }