From nobody Mon Apr 6 09:11:26 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5485F36EA8B for ; Fri, 20 Mar 2026 08:09:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773994151; cv=none; b=qgtOMSn2E0+ZDtAXToMu9h1u6UGDJABgh1cHZww0/qoZneQf3hB0zYod8s4gFTKzPA+j5pNBopxN/Ik3GNQem/g5PUqCg+FCh+nvh9VCqbTHfryGQn+cZfgQ/X/bIYKnEQ02hFbFw3ZXmjq7mbRBOn7xhNBvMbLZdjwRjqTtUy0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773994151; c=relaxed/simple; bh=uaXbq5sB6jR23YcrU0TSpwqaN9vxrH71tW18wn1e7gk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=P0JmOjiTOshY/kv+m/jI/pyhTkRiw0VrHjpksb9vNrINy6R/d8ACaE16QKjtq41iU8SqrQug1vFArwZ6iPkey+eUbbiZn249sWqRSvTZxOfk/U2J9wsyO+rpBFrtaD43qX1utqqdh6cSMfskSOaw385tTGjh/yYMmU4x7zlDWLc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OXZFRSQk; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OXZFRSQk" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2c0f6593ef5so290351eec.1 for ; Fri, 20 Mar 2026 01:09:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1773994148; x=1774598948; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=//OhO+K8SAxH3wwANO979A4UoFJWciO8XiSL1taUHjA=; b=OXZFRSQkmlgN2yMHQAzsX8lpYnRkbowd49VaowLbXwp41k1svdEiwqt05PrqOl4EH7 FPszvgnawNDuMfH+ZDFz1Uvkcj/5VR0HsP69CaOAA4zCgGg89N7EMESvrKRZu6YJJ30J 17CP7tSQfved6vbO5OUZKliXImjdn0SvC46cQaf4piXnkmWJRHf9xiqnL7DF454vQc6c ochXwaC47EHw5csOjlFjUl3Ovj2JGVHLrWvtGmGslgPCgPnScTLGaGvlEDPzhbJSGc3Z GCnjQBmCi7Lh/OxWYRu8WlafA9YkIfXcObXcCwe+kIfmSdv+tBelIO1QDbUAS8fC93Y9 uVPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773994148; x=1774598948; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=//OhO+K8SAxH3wwANO979A4UoFJWciO8XiSL1taUHjA=; b=pkZXN/aJ6tgWGfJBDIa36wLhbm2Q/vUpvCBIs53rX8gGfyWDYdru0jgA/l/u8dKWdb Qb3IgXAqsm7xNNBwHvie1SHXezuTdaInmQJaeNy4zkPMxkI/EWeXySRMdNCp4NAZoX5X A+pwnwQ9MewFC2GaHeCX3Ja28CSpj1B6xGhs41pSVrBqpXOO+MfDHbiie4ZUSdJLYpqy ETLs7S4H+Pv/XzlJBW0iC4eTlal9K+NtoI14flXjfqKIsS7dZ9rPrOyAHTbEUPmiN6Q8 BuYmvv/vUYYYXPHC/rCXkqZS130sP8JdZUTyNaZpBE7Yc3ODUnFosC8vfXUbv1px13pH Nx8Q== X-Forwarded-Encrypted: i=1; AJvYcCW/ZqPGXj5y6Crq/Cg/kLGI3C0sta5X+qrDffo8mELlLPSheCDkrNWR606rZyEE+HvcZb0Bat51hemy7c8=@vger.kernel.org X-Gm-Message-State: AOJu0Yxrr3QXAg4ZzQRkIEY43TTZheRRCbsTG9bIsND7WMOzeEcPibN4 nWyECxNKt2mMFairvHU8YANZ5KZ3sd8LlyZJiVUSIa+3somb8AOmz78ywbcv2KwKg0YrL3L4oLh bBxzekorpdg== X-Received: from dycmf5.prod.google.com ([2002:a05:693c:2485:b0:2be:7423:85b8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:e208:b0:2be:ad5b:d59d with SMTP id 5a478bee46e88-2c109563be1mr1071100eec.6.1773994148215; Fri, 20 Mar 2026 01:09:08 -0700 (PDT) Date: Fri, 20 Mar 2026 01:08:22 -0700 In-Reply-To: <20260320080835.724836-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260319232334.287517-1-irogers@google.com> <20260320080835.724836-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.959.g497ff81fa9-goog Message-ID: <20260320080835.724836-14-irogers@google.com> Subject: [PATCH v3 13/25] perf hist: Remove evsel from struct hist_entry_iter From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" struct hist_entry_iter has the sample within it so the evsel is unnecessary. Remove the evsel and update uses. Also remove the evsel from hist__account_cycles and derive it from the sample too. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 10 ++++------ tools/perf/builtin-diff.c | 3 +-- tools/perf/builtin-report.c | 6 ++---- tools/perf/builtin-top.c | 9 +++------ tools/perf/tests/hists_cumulate.c | 1 - tools/perf/tests/hists_filter.c | 1 - tools/perf/tests/hists_output.c | 1 - tools/perf/util/hist.c | 24 ++++++++++++------------ tools/perf/util/hist.h | 3 +-- 9 files changed, 23 insertions(+), 35 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index c2d0599fe5f5..041f5dc92ea8 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -191,14 +191,12 @@ static int hist_iter__branch_callback(struct hist_ent= ry_iter *iter, return err; } =20 -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 =3D { - .evsel =3D evsel, .sample =3D sample, .add_entry_cb =3D hist_iter__branch_callback, .hide_unresolved =3D symbol_conf.hide_unresolved, @@ -221,8 +219,8 @@ static int process_branch_callback(struct evsel *evsel, if (a.map !=3D NULL) dso__set_hit(map__dso(a.map)); =20 - hist__account_cycles(sample->branch_stack, al, sample, false, - NULL, evsel); + hist__account_cycles(sample->branch_stack, al, sample, /*nonany_branch_mo= de=3D*/false, + /*total_cycles=3D*/NULL); =20 ret =3D hist_entry_iter__add(&iter, &a, PERF_MAX_STACK_DEPTH, ann); out: @@ -269,7 +267,7 @@ static int evsel__add_sample(struct evsel *evsel, struc= t perf_sample *sample, process_branch_stack(sample->branch_stack, al, sample); =20 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); =20 he =3D hists__add_entry(hists, al, NULL, NULL, NULL, NULL, sample, true); if (he =3D=3D NULL) diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 096adc65451c..67cf5bbaab29 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -397,7 +397,6 @@ static int diff__process_sample_event(const struct perf= _tool *tool, struct evsel *evsel =3D sample->evsel; struct hists *hists =3D evsel__hists(evsel); struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .ops =3D &hist_iter_normal, }; @@ -431,7 +430,7 @@ static int diff__process_sample_event(const struct perf= _tool *tool, } =20 hist__account_cycles(sample->branch_stack, &al, sample, - false, NULL, evsel); + /*nonany_branch_mode=3D*/false, /*total_cycles=3D*/NULL); break; =20 case COMPUTE_STREAM: diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 39968ae5cfb0..1051d7b75361 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -270,10 +270,8 @@ static int process_sample_event(const struct perf_tool= *tool, struct machine *machine) { struct report *rep =3D container_of(tool, struct report, tool); - struct evsel *evsel =3D sample->evsel; struct addr_location al; struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .hide_unresolved =3D symbol_conf.hide_unresolved, .add_entry_cb =3D hist_iter__report_callback, @@ -285,7 +283,7 @@ static int process_sample_event(const struct perf_tool = *tool, return 0; } =20 - if (evswitch__discard(&rep->evswitch, evsel)) + if (evswitch__discard(&rep->evswitch, sample->evsel)) return 0; =20 addr_location__init(&al); @@ -329,7 +327,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); } =20 rep->total_samples++; diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index e863f9ef581f..b89ca48e5d02 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -731,20 +731,18 @@ static int hist_iter__top_callback(struct hist_entry_= iter *iter, EXCLUSIVE_LOCKS_REQUIRED(iter->he->hists->lock) { struct perf_top *top =3D arg; - struct evsel *evsel =3D iter->evsel; =20 if (perf_hpp_list.sym && single) perf_top__record_precise_ip(top, iter->he, iter->sample, al->addr); =20 hist__account_cycles(iter->sample->branch_stack, al, iter->sample, !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY), - NULL, evsel); + /*total_cycles=3D*/NULL); return 0; } =20 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) { @@ -830,9 +828,8 @@ static void perf_event__process_sample(const struct per= f_tool *tool, } =20 if (al.sym =3D=3D NULL || !al.sym->idle) { - struct hists *hists =3D evsel__hists(evsel); + struct hists *hists =3D evsel__hists(sample->evsel); struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .add_entry_cb =3D hist_iter__top_callback, }; @@ -1210,7 +1207,7 @@ static int deliver_event(struct ordered_events *qe, } =20 if (event->header.type =3D=3D 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 =3D=3D PERF_RECORD_LOST) { perf_top__process_lost(top, event, evsel); diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cum= ulate.c index 606aa926a8fc..267cbc24691a 100644 --- a/tools/perf/tests/hists_cumulate.c +++ b/tools/perf/tests/hists_cumulate.c @@ -87,7 +87,6 @@ static int add_hist_entries(struct hists *hists, struct m= achine *machine) addr_location__init(&al); for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .hide_unresolved =3D false, }; diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filte= r.c index cc6b26e373d1..002e3a4c1ca5 100644 --- a/tools/perf/tests/hists_filter.c +++ b/tools/perf/tests/hists_filter.c @@ -63,7 +63,6 @@ static int add_hist_entries(struct evlist *evlist, evlist__for_each_entry(evlist, evsel) { for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .ops =3D &hist_iter_normal, .hide_unresolved =3D false, diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_outpu= t.c index 7818950d786e..fa683fd7b1e5 100644 --- a/tools/perf/tests/hists_output.c +++ b/tools/perf/tests/hists_output.c @@ -57,7 +57,6 @@ static int add_hist_entries(struct hists *hists, struct m= achine *machine) addr_location__init(&al); for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .ops =3D &hist_iter_normal, .hide_unresolved =3D false, diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 84a402d248a3..632c1edcab9a 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -932,8 +932,8 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter,= struct addr_location *al { u64 cost; struct mem_info *mi =3D iter->mi; - struct hists *hists =3D evsel__hists(iter->evsel); struct perf_sample *sample =3D iter->sample; + struct hists *hists =3D evsel__hists(sample->evsel); struct hist_entry *he; =20 if (mi =3D=3D NULL) @@ -965,7 +965,7 @@ static int iter_finish_mem_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { - struct evsel *evsel =3D iter->evsel; + struct evsel *evsel =3D iter->sample->evsel; struct hists *hists =3D evsel__hists(evsel); struct hist_entry *he =3D iter->he; int err =3D -EINVAL; @@ -1033,9 +1033,9 @@ static int iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_locat= ion *al) { struct branch_info *bi; - struct evsel *evsel =3D iter->evsel; - struct hists *hists =3D evsel__hists(evsel); struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; + struct hists *hists =3D evsel__hists(evsel); struct hist_entry *he =3D NULL; int i =3D iter->curr; int err =3D 0; @@ -1075,7 +1075,7 @@ static int iter_finish_branch_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { - struct evsel *evsel =3D iter->evsel; + struct evsel *evsel =3D iter->sample->evsel; struct hists *hists =3D evsel__hists(evsel); =20 for (int i =3D 0; i < iter->total; i++) @@ -1100,8 +1100,8 @@ iter_prepare_normal_entry(struct hist_entry_iter *ite= r __maybe_unused, static int iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_loc= ation *al) { - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; struct hist_entry *he; =20 he =3D hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL, @@ -1118,8 +1118,8 @@ iter_finish_normal_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { struct hist_entry *he =3D iter->he; - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; =20 if (he =3D=3D NULL) return 0; @@ -1162,9 +1162,9 @@ static int iter_add_single_cumulative_entry(struct hist_entry_iter *iter, struct addr_location *al) { - struct evsel *evsel =3D iter->evsel; - struct hists *hists =3D evsel__hists(evsel); struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; + struct hists *hists =3D evsel__hists(evsel); struct hist_entry **he_cache =3D iter->he_cache; struct hist_entry *he; int err =3D 0; @@ -1221,8 +1221,8 @@ static int iter_add_next_cumulative_entry(struct hist_entry_iter *iter, struct addr_location *al) { - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; struct hist_entry **he_cache =3D iter->he_cache; struct hist_entry *he; struct hist_entry he_tmp =3D { @@ -2823,7 +2823,7 @@ int hists__unlink(struct hists *hists) =20 void hist__account_cycles(struct branch_stack *bs, struct addr_location *a= l, 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 =3D perf_sample__branch_entries(sample); @@ -2847,7 +2847,7 @@ void hist__account_cycles(struct branch_stack *bs, st= ruct addr_location *al, for (int i =3D bs->nr - 1; i >=3D 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 =3D &bi[i].to; =20 diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 1d5ea632ca4e..ee92fffc53a9 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -155,7 +155,6 @@ struct hist_entry_iter { int total; int curr; =20 - struct evsel *evsel; struct perf_sample *sample; struct hist_entry *he; struct symbol *parent; @@ -797,7 +796,7 @@ unsigned int hists__overhead_width(struct hists *hists); =20 void hist__account_cycles(struct branch_stack *bs, struct addr_location *a= l, struct perf_sample *sample, bool nonany_branch_mode, - u64 *total_cycles, struct evsel *evsel); + u64 *total_cycles); =20 struct option; int parse_filter_percentage(const struct option *opt, const char *arg, int= unset); --=20 2.53.0.959.g497ff81fa9-goog