]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf hist: Remove evsel from struct hist_entry_iter
authorIan Rogers <irogers@google.com>
Wed, 20 May 2026 19:05:15 +0000 (12:05 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 20 May 2026 19:39:36 +0000 (16:39 -0300)
As struct perf_sample now directly contains its own resolved evsel pointer,
passing the evsel separately is redundant and clutters the interface.

Remove the redundant evsel parameter from hist-specific handlers and
structures, ensuring the tool always directly accesses the evsel bound to the
sample. This simplifies the API signatures and eliminates the risk of passing
an inconsistent evsel.

Signed-off-by: Ian Rogers <irogers@google.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Andrew Jones <ajones@ventanamicro.com>
Cc: Anup Patel <anup@brainfault.org>
Cc: Athira Rajeev <atrajeev@linux.ibm.com>
Cc: Blake Jones <blakejones@google.com>
Cc: Chen Ni <nichen@iscas.ac.cn>
Cc: Chun-Tse Shao <ctshao@google.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Derek Foreman <derek.foreman@collabora.com>
Cc: Dmitriy Vyukov <dvyukov@google.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Hrishikesh Suresh <hrishikesh123s@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Krzysztof Ɓopatowski <krzysztof.m.lopatowski@gmail.com>
Cc: Leo Yan <leo.yan@arm.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <pjw@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Quan Zhou <zhouquan@iscas.ac.cn>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Swapnil Sapkal <swapnil.sapkal@amd.com>
Cc: Thomas Falcon <thomas.falcon@intel.com>
Cc: Tianyou Li <tianyou.li@intel.com>
Cc: Yujie Liu <yujie.liu@intel.com>
Cc: tanze <tanze@kylinos.cn>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-annotate.c
tools/perf/builtin-diff.c
tools/perf/builtin-report.c
tools/perf/builtin-top.c
tools/perf/tests/hists_cumulate.c
tools/perf/tests/hists_filter.c
tools/perf/tests/hists_output.c
tools/perf/util/hist.c
tools/perf/util/hist.h

index ee1ba2dc35f41a73067b15d180a0ec45a9600b35..6f8be9ead43b5bd8c2590d256f5c9494e5d29b7d 100644 (file)
@@ -190,14 +190,12 @@ out:
        return err;
 }
 
-static int process_branch_callback(struct evsel *evsel,
-                                  struct perf_sample *sample,
+static int process_branch_callback(struct perf_sample *sample,
                                   struct addr_location *al,
                                   struct perf_annotate *ann,
                                   struct machine *machine)
 {
        struct hist_entry_iter iter = {
-               .evsel          = evsel,
                .sample         = sample,
                .add_entry_cb   = hist_iter__branch_callback,
                .hide_unresolved        = symbol_conf.hide_unresolved,
@@ -220,8 +218,8 @@ static int process_branch_callback(struct evsel *evsel,
        if (a.map != NULL)
                dso__set_hit(map__dso(a.map));
 
-       hist__account_cycles(sample->branch_stack, al, sample, false,
-                            NULL, evsel);
+       hist__account_cycles(sample->branch_stack, al, sample, /*nonany_branch_mode=*/false,
+                            /*total_cycles=*/NULL);
 
        ret = hist_entry_iter__add(&iter, &a, PERF_MAX_STACK_DEPTH, ann);
 out:
@@ -268,7 +266,7 @@ static int evsel__add_sample(struct evsel *evsel, struct perf_sample *sample,
        process_branch_stack(sample->branch_stack, al, sample);
 
        if (ann->has_br_stack && has_annotation(ann))
-               return process_branch_callback(evsel, sample, al, ann, machine);
+               return process_branch_callback(sample, al, ann, machine);
 
        he = hists__add_entry(hists, al, NULL, NULL, NULL, NULL, sample, true);
        if (he == NULL)
index 82e9e514922bd50524d903c9df72dd23ed44ae76..b4ff863b304ca0467ee3f4a5a97f1ade47f1f050 100644 (file)
@@ -397,7 +397,6 @@ static int diff__process_sample_event(const struct perf_tool *tool,
        struct evsel *evsel = sample->evsel;
        struct hists *hists = evsel__hists(evsel);
        struct hist_entry_iter iter = {
-               .evsel  = evsel,
                .sample = sample,
                .ops    = &hist_iter_normal,
        };
@@ -431,7 +430,7 @@ static int diff__process_sample_event(const struct perf_tool *tool,
                }
 
                hist__account_cycles(sample->branch_stack, &al, sample,
-                                    false, NULL, evsel);
+                                    /*nonany_branch_mode=*/false, /*total_cycles=*/NULL);
                break;
 
        case COMPUTE_STREAM:
index cc3ee712fe62f10a966aa867ff1dfe6b7fdc837e..11c7eff92b955f5348600ce5c0b9d16b570b87f2 100644 (file)
@@ -266,10 +266,8 @@ static int process_sample_event(const struct perf_tool *tool,
                                struct machine *machine)
 {
        struct report *rep = container_of(tool, struct report, tool);
-       struct evsel *evsel = sample->evsel;
        struct addr_location al;
        struct hist_entry_iter iter = {
-               .evsel                  = evsel,
                .sample                 = sample,
                .hide_unresolved        = symbol_conf.hide_unresolved,
                .add_entry_cb           = hist_iter__report_callback,
@@ -281,7 +279,7 @@ static int process_sample_event(const struct perf_tool *tool,
                return 0;
        }
 
-       if (evswitch__discard(&rep->evswitch, evsel))
+       if (evswitch__discard(&rep->evswitch, sample->evsel))
                return 0;
 
        addr_location__init(&al);
@@ -325,7 +323,7 @@ static int process_sample_event(const struct perf_tool *tool,
        if (ui__has_annotation() || rep->symbol_ipc || rep->total_cycles_mode) {
                hist__account_cycles(sample->branch_stack, &al, sample,
                                     rep->nonany_branch_mode,
-                                    &rep->total_cycles, evsel);
+                                    &rep->total_cycles);
        }
 
        rep->total_samples++;
index b4fc991b4eeb45d499f6fad81c39aa56e596b02a..6cf73bb0c7afec987e1383494ef036a3b35e3dd4 100644 (file)
@@ -732,20 +732,18 @@ static int hist_iter__top_callback(struct hist_entry_iter *iter,
        EXCLUSIVE_LOCKS_REQUIRED(iter->he->hists->lock)
 {
        struct perf_top *top = arg;
-       struct evsel *evsel = iter->evsel;
 
        if (perf_hpp_list.sym && single)
                perf_top__record_precise_ip(top, iter->he, iter->sample, al->addr);
 
        hist__account_cycles(iter->sample->branch_stack, al, iter->sample,
                             !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY),
-                            NULL, evsel);
+                            /*total_cycles=*/NULL);
        return 0;
 }
 
 static void perf_event__process_sample(const struct perf_tool *tool,
                                       const union perf_event *event,
-                                      struct evsel *evsel,
                                       struct perf_sample *sample,
                                       struct machine *machine)
 {
@@ -831,9 +829,8 @@ static void perf_event__process_sample(const struct perf_tool *tool,
        }
 
        if (al.sym == NULL || !al.sym->idle) {
-               struct hists *hists = evsel__hists(evsel);
+               struct hists *hists = evsel__hists(sample->evsel);
                struct hist_entry_iter iter = {
-                       .evsel          = evsel,
                        .sample         = sample,
                        .add_entry_cb   = hist_iter__top_callback,
                };
@@ -1211,7 +1208,7 @@ static int deliver_event(struct ordered_events *qe,
        }
 
        if (event->header.type == PERF_RECORD_SAMPLE) {
-               perf_event__process_sample(&top->tool, event, evsel,
+               perf_event__process_sample(&top->tool, event,
                                           &sample, machine);
        } else if (event->header.type == PERF_RECORD_LOST) {
                perf_top__process_lost(top, event, evsel);
index 606aa926a8fca117bbaf6e920ee334cc0673aebf..267cbc24691acd77aa94dbaa2b83be702acf512b 100644 (file)
@@ -87,7 +87,6 @@ static int add_hist_entries(struct hists *hists, struct machine *machine)
        addr_location__init(&al);
        for (i = 0; i < ARRAY_SIZE(fake_samples); i++) {
                struct hist_entry_iter iter = {
-                       .evsel = evsel,
                        .sample = &sample,
                        .hide_unresolved = false,
                };
index cc6b26e373d13d2d5a18db7231153847222584ea..002e3a4c1ca59b9d48a5047fe54c0f7a351bd6ea 100644 (file)
@@ -63,7 +63,6 @@ static int add_hist_entries(struct evlist *evlist,
        evlist__for_each_entry(evlist, evsel) {
                for (i = 0; i < ARRAY_SIZE(fake_samples); i++) {
                        struct hist_entry_iter iter = {
-                               .evsel = evsel,
                                .sample = &sample,
                                .ops = &hist_iter_normal,
                                .hide_unresolved = false,
index 7818950d786e1e32c58cd0d0ba5cba4287a8eaf4..fa683fd7b1e5ebb2b8dcbec054abdae603135100 100644 (file)
@@ -57,7 +57,6 @@ static int add_hist_entries(struct hists *hists, struct machine *machine)
        addr_location__init(&al);
        for (i = 0; i < ARRAY_SIZE(fake_samples); i++) {
                struct hist_entry_iter iter = {
-                       .evsel = evsel,
                        .sample = &sample,
                        .ops = &hist_iter_normal,
                        .hide_unresolved = false,
index f641cf321ace825dddbf5197d448cb8945232198..811d68fa6770c5b71cc5a28303c856264849d33f 100644 (file)
@@ -935,8 +935,8 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
 {
        u64 cost;
        struct mem_info *mi = iter->mi;
-       struct hists *hists = evsel__hists(iter->evsel);
        struct perf_sample *sample = iter->sample;
+       struct hists *hists = evsel__hists(sample->evsel);
        struct hist_entry *he;
 
        if (mi == NULL)
@@ -968,7 +968,7 @@ static int
 iter_finish_mem_entry(struct hist_entry_iter *iter,
                      struct addr_location *al __maybe_unused)
 {
-       struct evsel *evsel = iter->evsel;
+       struct evsel *evsel = iter->sample->evsel;
        struct hists *hists = evsel__hists(evsel);
        struct hist_entry *he = iter->he;
        int err = -EINVAL;
@@ -1036,9 +1036,9 @@ static int
 iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *al)
 {
        struct branch_info *bi;
-       struct evsel *evsel = iter->evsel;
-       struct hists *hists = evsel__hists(evsel);
        struct perf_sample *sample = iter->sample;
+       struct evsel *evsel = sample->evsel;
+       struct hists *hists = evsel__hists(evsel);
        struct hist_entry *he = NULL;
        int i = iter->curr;
        int err = 0;
@@ -1078,7 +1078,7 @@ static int
 iter_finish_branch_entry(struct hist_entry_iter *iter,
                         struct addr_location *al __maybe_unused)
 {
-       struct evsel *evsel = iter->evsel;
+       struct evsel *evsel = iter->sample->evsel;
        struct hists *hists = evsel__hists(evsel);
 
        for (int i = 0; i < iter->total; i++)
@@ -1103,8 +1103,8 @@ iter_prepare_normal_entry(struct hist_entry_iter *iter __maybe_unused,
 static int
 iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location *al)
 {
-       struct evsel *evsel = iter->evsel;
        struct perf_sample *sample = iter->sample;
+       struct evsel *evsel = sample->evsel;
        struct hist_entry *he;
 
        he = hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
@@ -1121,8 +1121,8 @@ iter_finish_normal_entry(struct hist_entry_iter *iter,
                         struct addr_location *al __maybe_unused)
 {
        struct hist_entry *he = iter->he;
-       struct evsel *evsel = iter->evsel;
        struct perf_sample *sample = iter->sample;
+       struct evsel *evsel = sample->evsel;
 
        if (he == NULL)
                return 0;
@@ -1165,9 +1165,9 @@ static int
 iter_add_single_cumulative_entry(struct hist_entry_iter *iter,
                                 struct addr_location *al)
 {
-       struct evsel *evsel = iter->evsel;
-       struct hists *hists = evsel__hists(evsel);
        struct perf_sample *sample = iter->sample;
+       struct evsel *evsel = sample->evsel;
+       struct hists *hists = evsel__hists(evsel);
        struct hist_entry **he_cache = iter->he_cache;
        struct hist_entry *he;
        int err = 0;
@@ -1224,8 +1224,8 @@ static int
 iter_add_next_cumulative_entry(struct hist_entry_iter *iter,
                               struct addr_location *al)
 {
-       struct evsel *evsel = iter->evsel;
        struct perf_sample *sample = iter->sample;
+       struct evsel *evsel = sample->evsel;
        struct hist_entry **he_cache = iter->he_cache;
        struct hist_entry *he;
        struct hist_entry he_tmp = {
@@ -2826,7 +2826,7 @@ int hists__unlink(struct hists *hists)
 
 void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,
                          struct perf_sample *sample, bool nonany_branch_mode,
-                         u64 *total_cycles, struct evsel *evsel)
+                         u64 *total_cycles)
 {
        struct branch_info *bi;
        struct branch_entry *entries = perf_sample__branch_entries(sample);
@@ -2850,7 +2850,7 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,
                        for (int i = bs->nr - 1; i >= 0; i--) {
                                addr_map_symbol__account_cycles(&bi[i].from,
                                        nonany_branch_mode ? NULL : prev,
-                                       bi[i].flags.cycles, evsel,
+                                       bi[i].flags.cycles, sample->evsel,
                                        bi[i].branch_stack_cntr);
                                prev = &bi[i].to;
 
index d97a4efb9250573c03912bb35110475f5f0101ea..8fb89d81ef069d95454d0830ad88b8b7851aac6a 100644 (file)
@@ -156,7 +156,6 @@ struct hist_entry_iter {
        int total;
        int curr;
 
-       struct evsel *evsel;
        struct perf_sample *sample;
        struct hist_entry *he;
        struct symbol *parent;
@@ -799,7 +798,7 @@ unsigned int hists__overhead_width(struct hists *hists);
 
 void hist__account_cycles(struct branch_stack *bs, struct addr_location *al,
                          struct perf_sample *sample, bool nonany_branch_mode,
-                         u64 *total_cycles, struct evsel *evsel);
+                         u64 *total_cycles);
 
 struct option;
 int parse_filter_percentage(const struct option *opt, const char *arg, int unset);