mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
perf hist: Remove evsel from struct hist_entry_iter
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>
This commit is contained in:
parent
948b5874ef
commit
7e0e6ac66c
|
|
@ -190,14 +190,12 @@ static int hist_iter__branch_callback(struct hist_entry_iter *iter,
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user