Re: [PATCH v21 03/21] perf evsel/evlist: Avoid unnecessary #includes

From: Arnaldo Carvalho de Melo

Date: Wed Jun 17 2026 - 12:08:38 EST


On Mon, Jun 15, 2026 at 06:15:25PM -0700, Ian Rogers wrote:
> Use forward declarations and remove unnecessary #includes in
> evsel.h. Sort the forward declarations in evsel.h and evlist.h. Move
> some PMU code into evsel.c.
>
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> Acked-by: Namhyung Kim <namhyung@xxxxxxxxxx>

⬢ [acme@toolbx perf-tools-next2]$ git log --oneline -5
ce69f4f6d7467ef4 (HEAD) perf evsel/evlist: Avoid unnecessary #includes
23dce143f5ed0557 perf python: Add missed explicit dependencies
ca74d08280ad690f perf util: Sort includes and add missed explicit dependencies
776bd9ac834556ab (x1/perf-tools-next, perf-tools-next.korg/tmp.perf-tools-next, perf-tools-next.korg/perf-tools-next, origin/perf-tools-next) perf bpf: Fix up build failure due to change of btf_vlen() return type
522ae978ac720a91 (origin/perf/hardening-9) perf dso: Set standard errno on decompression failure
⬢ [acme@toolbx perf-tools-next2]$

LD /tmp/build/perf-tools-next2/util/scripting-engines/perf-util-in.o
make[3]: *** [/home/acme/git/perf-tools-next2/tools/build/Makefile.build:158: util] Error 2
make[2]: *** [Makefile.perf:573: /tmp/build/perf-tools-next2/perf-util-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....
LD /tmp/build/perf-tools-next2/tests/perf-test-in.o
LD /tmp/build/perf-tools-next2/perf-test-in.o
LD /tmp/build/perf-tools-next2/perf-in.o
make[1]: *** [Makefile.perf:288: sub-make] Error 2
make: *** [Makefile:122: install-bin] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next2/tools/perf'
⬢ [acme@toolbx perf-tools-next2]$

I added this to fix the build:

⬢ [acme@toolbx perf-tools-next2]$ git diff
diff --git a/tools/perf/util/aslr.c b/tools/perf/util/aslr.c
index 6a7542e7db827d1b..027695d967798487 100644
--- a/tools/perf/util/aslr.c
+++ b/tools/perf/util/aslr.c
@@ -13,6 +13,7 @@
#include "session.h"
#include "data.h"
#include "dso.h"
+#include "pmu.h"
#include "pmus.h"

#include <internal/lib.h> /* page_size */
⬢ [acme@toolbx perf-tools-next2]$

Applied the series, now testing.

- Arnaldo

> ---
> tools/perf/util/evlist.h | 15 +++++++++------
> tools/perf/util/evsel.c | 5 +++++
> tools/perf/util/evsel.h | 25 ++++++++++++-------------
> 3 files changed, 26 insertions(+), 19 deletions(-)
>
> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
> index e507f5f20ef6..e54761c670b6 100644
> --- a/tools/perf/util/evlist.h
> +++ b/tools/perf/util/evlist.h
> @@ -2,29 +2,32 @@
> #ifndef __PERF_EVLIST_H
> #define __PERF_EVLIST_H 1
>
> +#include <signal.h>
> +
> #include <linux/compiler.h>
> #include <linux/kernel.h>
> -#include <linux/refcount.h>
> #include <linux/list.h>
> +#include <linux/refcount.h>
> +#include <pthread.h>
> +#include <unistd.h>
> +
> #include <api/fd/array.h>
> #include <internal/evlist.h>
> #include <internal/evsel.h>
> #include <perf/evlist.h>
> +
> #include "affinity.h"
> #include "events_stats.h"
> #include "evsel.h"
> #include "rblist.h"
> -#include <pthread.h>
> -#include <signal.h>
> -#include <unistd.h>
>
> -struct pollfd;
> -struct thread_map;
> struct perf_cpu_map;
> struct perf_stat_config;
> +struct pollfd;
> struct record_opts;
> struct strbuf;
> struct target;
> +struct thread_map;
>
> /*
> * State machine of bkw_mmap_state:
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 34c03f47a913..19e48b9260e9 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -370,6 +370,11 @@ void evsel__set_sample_id(struct evsel *evsel,
> evsel->core.attr.read_format |= PERF_FORMAT_ID;
> }
>
> +bool evsel__is_non_perf_event_open_pmu(const struct evsel *evsel)
> +{
> + return evsel->pmu && evsel->pmu->type > PERF_PMU_TYPE_PE_END;
> +}
> +
> /**
> * evsel__is_function_event - Return whether given evsel is a function
> * trace event
> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> index 8178858d168a..6b28cd754a18 100644
> --- a/tools/perf/util/evsel.h
> +++ b/tools/perf/util/evsel.h
> @@ -2,28 +2,30 @@
> #ifndef __PERF_EVSEL_H
> #define __PERF_EVSEL_H 1
>
> -#include <linux/list.h>
> #include <stdbool.h>
> -#include <sys/types.h>
> +
> +#include <linux/list.h>
> #include <linux/perf_event.h>
> #include <linux/types.h>
> +#include <sys/types.h>
> +
> #include <internal/evsel.h>
> #include <perf/evsel.h>
> +
> #include "symbol_conf.h"
> -#include "pmus.h"
> -#include "pmu.h"
>
> +struct bperf_follower_bpf;
> +struct bperf_leader_bpf;
> +struct bpf_counter_ops;
> struct bpf_object;
> struct cgroup;
> +struct hashmap;
> struct perf_counts;
> +struct perf_pmu;
> struct perf_stat_config;
> struct perf_stat_evsel;
> -union perf_event;
> -struct bpf_counter_ops;
> struct target;
> -struct hashmap;
> -struct bperf_leader_bpf;
> -struct bperf_follower_bpf;
> +union perf_event;
>
> typedef int (evsel__sb_cb_t)(union perf_event *event, void *data);
>
> @@ -356,10 +358,6 @@ void arch_evsel__apply_ratio_to_prev(struct evsel *evsel, struct perf_event_attr
> int evsel__set_filter(struct evsel *evsel, const char *filter);
> int evsel__append_tp_filter(struct evsel *evsel, const char *filter);
> int evsel__append_addr_filter(struct evsel *evsel, const char *filter);
> -static inline bool evsel__is_non_perf_event_open_pmu(const struct evsel *evsel)
> -{
> - return evsel->pmu && evsel->pmu->type > PERF_PMU_TYPE_PE_END;
> -}
>
> int evsel__enable_cpu(struct evsel *evsel, int cpu_map_idx);
> int evsel__enable(struct evsel *evsel);
> @@ -478,6 +476,7 @@ static inline bool evsel__is_group_event(struct evsel *evsel)
> return evsel__is_group_leader(evsel) && evsel->core.nr_members > 1;
> }
>
> +bool evsel__is_non_perf_event_open_pmu(const struct evsel *evsel);
> bool evsel__is_function_event(struct evsel *evsel);
>
> static inline bool evsel__is_bpf_output(struct evsel *evsel)
> --
> 2.54.0.1136.gdb2ca164c4-goog