OSDN Git Service

perf evsel: Introduce evsel__name_is() method to check if the evsel name is equal...
authorArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 20 Apr 2023 18:54:11 +0000 (15:54 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 24 Apr 2023 17:28:11 +0000 (14:28 -0300)
This makes the logic a bit clear by avoiding the !strcmp() pattern and
also a way to intercept the pointer if we need to do extra validation on
it or to do lazy setting of evsel->name via evsel__name(evsel).

Reviewed-by: "Liang, Kan" <kan.liang@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/lkml/ZEGLM8VehJbS0gP2@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
13 files changed:
tools/perf/arch/arm64/util/kvm-stat.c
tools/perf/arch/powerpc/util/kvm-stat.c
tools/perf/arch/x86/util/kvm-stat.c
tools/perf/builtin-kvm.c
tools/perf/builtin-stat.c
tools/perf/tests/expand-cgroup.c
tools/perf/tests/parse-events.c
tools/perf/tests/parse-metric.c
tools/perf/tests/pmu-events.c
tools/perf/util/evlist.c
tools/perf/util/evsel.c
tools/perf/util/evsel.h
tools/perf/util/sort.c

index 72ca9bb..6611aa2 100644 (file)
@@ -44,14 +44,14 @@ static bool event_begin(struct evsel *evsel,
                        struct perf_sample *sample __maybe_unused,
                        struct event_key *key __maybe_unused)
 {
-       return !strcmp(evsel->name, kvm_entry_trace);
+       return evsel__name_is(evsel, kvm_entry_trace);
 }
 
 static bool event_end(struct evsel *evsel,
                      struct perf_sample *sample,
                      struct event_key *key)
 {
-       if (!strcmp(evsel->name, kvm_exit_trace)) {
+       if (evsel__name_is(evsel, kvm_exit_trace)) {
                event_get_key(evsel, sample, key);
                return true;
        }
index d04a08c..ea1220d 100644 (file)
@@ -60,13 +60,13 @@ static bool hcall_event_end(struct evsel *evsel,
                            struct perf_sample *sample __maybe_unused,
                            struct event_key *key __maybe_unused)
 {
-       return (!strcmp(evsel->name, kvm_events_tp[3]));
+       return (evsel__name_is(evsel, kvm_events_tp[3]));
 }
 
 static bool hcall_event_begin(struct evsel *evsel,
                              struct perf_sample *sample, struct event_key *key)
 {
-       if (!strcmp(evsel->name, kvm_events_tp[2])) {
+       if (evsel__name_is(evsel, kvm_events_tp[2])) {
                hcall_event_get_key(evsel, sample, key);
                return true;
        }
index ef513de..4247165 100644 (file)
@@ -46,7 +46,7 @@ static bool mmio_event_begin(struct evsel *evsel,
                return true;
 
        /* MMIO write begin event in kernel. */
-       if (!strcmp(evsel->name, "kvm:kvm_mmio") &&
+       if (evsel__name_is(evsel, "kvm:kvm_mmio") &&
            evsel__intval(evsel, sample, "type") == KVM_TRACE_MMIO_WRITE) {
                mmio_event_get_key(evsel, sample, key);
                return true;
@@ -63,7 +63,7 @@ static bool mmio_event_end(struct evsel *evsel, struct perf_sample *sample,
                return true;
 
        /* MMIO read end event in kernel.*/
-       if (!strcmp(evsel->name, "kvm:kvm_mmio") &&
+       if (evsel__name_is(evsel, "kvm:kvm_mmio") &&
            evsel__intval(evsel, sample, "type") == KVM_TRACE_MMIO_READ) {
                mmio_event_get_key(evsel, sample, key);
                return true;
@@ -101,7 +101,7 @@ static bool ioport_event_begin(struct evsel *evsel,
                               struct perf_sample *sample,
                               struct event_key *key)
 {
-       if (!strcmp(evsel->name, "kvm:kvm_pio")) {
+       if (evsel__name_is(evsel, "kvm:kvm_pio")) {
                ioport_event_get_key(evsel, sample, key);
                return true;
        }
@@ -145,7 +145,7 @@ static bool msr_event_begin(struct evsel *evsel,
                               struct perf_sample *sample,
                               struct event_key *key)
 {
-       if (!strcmp(evsel->name, "kvm:kvm_msr")) {
+       if (evsel__name_is(evsel, "kvm:kvm_msr")) {
                msr_event_get_key(evsel, sample, key);
                return true;
        }
index 747d193..7116503 100644 (file)
@@ -625,7 +625,7 @@ void exit_event_get_key(struct evsel *evsel,
 
 bool kvm_exit_event(struct evsel *evsel)
 {
-       return !strcmp(evsel->name, kvm_exit_trace);
+       return evsel__name_is(evsel, kvm_exit_trace);
 }
 
 bool exit_event_begin(struct evsel *evsel,
@@ -641,7 +641,7 @@ bool exit_event_begin(struct evsel *evsel,
 
 bool kvm_entry_event(struct evsel *evsel)
 {
-       return !strcmp(evsel->name, kvm_entry_trace);
+       return evsel__name_is(evsel, kvm_entry_trace);
 }
 
 bool exit_event_end(struct evsel *evsel,
@@ -878,7 +878,7 @@ static bool is_child_event(struct perf_kvm_stat *kvm,
                return false;
 
        for (; child_ops->name; child_ops++) {
-               if (!strcmp(evsel->name, child_ops->name)) {
+               if (evsel__name_is(evsel, child_ops->name)) {
                        child_ops->get_key(evsel, sample, key);
                        return true;
                }
index d3cbee7..efda63f 100644 (file)
@@ -2170,7 +2170,7 @@ static void setup_system_wide(int forks)
 
                evlist__for_each_entry(evsel_list, counter) {
                        if (!counter->core.requires_cpu &&
-                           strcmp(counter->name, "duration_time")) {
+                           !evsel__name_is(counter, "duration_time")) {
                                return;
                        }
                }
index ec34088..9c1a1f1 100644 (file)
@@ -61,7 +61,7 @@ static int test_expand_events(struct evlist *evlist,
 
        i = 0;
        evlist__for_each_entry(evlist, evsel) {
-               if (strcmp(evsel->name, ev_name[i % nr_events])) {
+               if (!evsel__name_is(evsel, ev_name[i % nr_events])) {
                        pr_debug("event name doesn't match:\n");
                        pr_debug("  evsel[%d]: %s\n  expected: %s\n",
                                 i, evsel->name, ev_name[i % nr_events]);
index 6eb1400..8068cfd 100644 (file)
@@ -1401,7 +1401,7 @@ static int test__checkevent_config_symbol(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
+       TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
        return TEST_OK;
 }
 
@@ -1409,7 +1409,7 @@ static int test__checkevent_config_raw(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
+       TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
        return TEST_OK;
 }
 
@@ -1417,7 +1417,7 @@ static int test__checkevent_config_num(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
+       TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
        return TEST_OK;
 }
 
@@ -1425,7 +1425,7 @@ static int test__checkevent_config_cache(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
+       TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
        return TEST_OK;
 }
 
@@ -1438,7 +1438,7 @@ static int test__intel_pt(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
+       TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
        return TEST_OK;
 }
 
@@ -1446,7 +1446,7 @@ static int test__checkevent_complex_name(struct evlist *evlist)
 {
        struct evsel *evsel = evlist__first(evlist);
 
-       TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
+       TEST_ASSERT_VAL("wrong complex name parsing", evsel__name_is(evsel, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
        return TEST_OK;
 }
 
index c43b056..1185b79 100644 (file)
@@ -39,7 +39,7 @@ static void load_runtime_stat(struct evlist *evlist, struct value *vals)
        evlist__for_each_entry(evlist, evsel) {
                count = find_value(evsel->name, vals);
                evsel->stats->aggr->counts.val = count;
-               if (!strcmp(evsel->name, "duration_time"))
+               if (evsel__name_is(evsel, "duration_time"))
                        update_stats(&walltime_nsecs_stats, count);
        }
 }
index 7f8e864..1dff863 100644 (file)
@@ -866,7 +866,7 @@ static int test__parsing_callback(const struct pmu_metric *pm,
        evlist__alloc_aggr_stats(evlist, 1);
        evlist__for_each_entry(evlist, evsel) {
                evsel->stats->aggr->counts.val = k;
-               if (!strcmp(evsel->name, "duration_time"))
+               if (evsel__name_is(evsel, "duration_time"))
                        update_stats(&walltime_nsecs_stats, k);
                k++;
        }
index 2260e27..a050431 100644 (file)
@@ -467,7 +467,7 @@ static int evsel__strcmp(struct evsel *pos, char *evsel_name)
                return 0;
        if (evsel__is_dummy_event(pos))
                return 1;
-       return strcmp(pos->name, evsel_name);
+       return !evsel__name_is(pos, evsel_name);
 }
 
 static int evlist__is_enabled(struct evlist *evlist)
@@ -1706,7 +1706,7 @@ struct evsel *evlist__find_evsel_by_str(struct evlist *evlist, const char *str)
        evlist__for_each_entry(evlist, evsel) {
                if (!evsel->name)
                        continue;
-               if (strcmp(str, evsel->name) == 0)
+               if (evsel__name_is(evsel, str))
                        return evsel;
        }
 
index a85a987..356c07f 100644 (file)
@@ -821,6 +821,11 @@ out_unknown:
        return "unknown";
 }
 
+bool evsel__name_is(struct evsel *evsel, const char *name)
+{
+       return !strcmp(evsel__name(evsel), name);
+}
+
 const char *evsel__group_pmu_name(const struct evsel *evsel)
 {
        const struct evsel *leader;
@@ -1146,7 +1151,7 @@ static void evsel__set_default_freq_period(struct record_opts *opts,
 
 static bool evsel__is_offcpu_event(struct evsel *evsel)
 {
-       return evsel__is_bpf_output(evsel) && !strcmp(evsel->name, OFFCPU_EVENT);
+       return evsel__is_bpf_output(evsel) && evsel__name_is(evsel, OFFCPU_EVENT);
 }
 
 /*
index 68072ec..1e5d640 100644 (file)
@@ -282,6 +282,7 @@ int arch_evsel__hw_name(struct evsel *evsel, char *bf, size_t size);
 
 int __evsel__hw_cache_type_op_res_name(u8 type, u8 op, u8 result, char *bf, size_t size);
 const char *evsel__name(struct evsel *evsel);
+bool evsel__name_is(struct evsel *evsel, const char *name);
 const char *evsel__group_pmu_name(const struct evsel *evsel);
 const char *evsel__metric_id(const struct evsel *evsel);
 
index 31b1cd0..650cd8d 100644 (file)
@@ -2893,7 +2893,7 @@ static struct evsel *find_evsel(struct evlist *evlist, char *event_name)
        full_name = !!strchr(event_name, ':');
        evlist__for_each_entry(evlist, pos) {
                /* case 2 */
-               if (full_name && !strcmp(pos->name, event_name))
+               if (full_name && evsel__name_is(pos, event_name))
                        return pos;
                /* case 3 */
                if (!full_name && strstr(pos->name, event_name)) {