All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Alice Rogers <alice.mei.rogers@gmail.com>,
	Dapeng Mi <dapeng1.mi@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	James Clark <james.clark@linaro.org>, Leo Yan <leo.yan@linux.dev>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Richter <tmricht@linux.ibm.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 7.2 0130/1815] perf evlist: Add reference count checking
Date: Sat, 12 Sep 2026 08:31:20 +0200	[thread overview]
Message-ID: <20260912065652.069942258@linuxfoundation.org> (raw)
In-Reply-To: <20260912065648.999753832@linuxfoundation.org>

7.2-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ian Rogers <irogers@google.com>

[ Upstream commit ab24487aaa42e7ca18580f6b4336615156d49452 ]

Now the evlist is reference counted, add reference count checking so
that gets and puts are paired and easy to debug. Reference count
checking is documented here:
https://perfwiki.github.io/main/reference-count-checking/

This large patch is adding accessors to evlist functions and switching
to their use. There was some minor renaming as evlist__mmap is now an
accessor to the mmap variable, and the original evlist__mmap is
renamed to evlist__do_mmap.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alice Rogers <alice.mei.rogers@gmail.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Stable-dep-of: e6ad1fb3458f ("perf parse-events: Restrict core PMU bypass to --cputype option")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/perf/arch/arm/util/cs-etm.c           |  10 +-
 tools/perf/arch/arm64/util/arm-spe.c        |   8 +-
 tools/perf/arch/arm64/util/hisi-ptt.c       |   2 +-
 tools/perf/arch/x86/tests/hybrid.c          |  20 +-
 tools/perf/arch/x86/util/auxtrace.c         |   2 +-
 tools/perf/arch/x86/util/intel-bts.c        |   6 +-
 tools/perf/arch/x86/util/intel-pt.c         |   9 +-
 tools/perf/arch/x86/util/iostat.c           |  12 +-
 tools/perf/bench/evlist-open-close.c        |  11 +-
 tools/perf/builtin-annotate.c               |   7 +-
 tools/perf/builtin-ftrace.c                 |   6 +-
 tools/perf/builtin-inject.c                 |   4 +-
 tools/perf/builtin-kvm.c                    |  10 +-
 tools/perf/builtin-kwork.c                  |   8 +-
 tools/perf/builtin-lock.c                   |   2 +-
 tools/perf/builtin-record.c                 |  91 ++---
 tools/perf/builtin-report.c                 |   6 +-
 tools/perf/builtin-sched.c                  |  24 +-
 tools/perf/builtin-script.c                 |  13 +-
 tools/perf/builtin-stat.c                   |  73 ++--
 tools/perf/builtin-top.c                    |  52 +--
 tools/perf/builtin-trace.c                  |  22 +-
 tools/perf/tests/backward-ring-buffer.c     |   8 +-
 tools/perf/tests/code-reading.c             |  10 +-
 tools/perf/tests/event-times.c              |   2 +-
 tools/perf/tests/event_update.c             |   2 +-
 tools/perf/tests/expand-cgroup.c            |   4 +-
 tools/perf/tests/hwmon_pmu.c                |   5 +-
 tools/perf/tests/keep-tracking.c            |   8 +-
 tools/perf/tests/mmap-basic.c               |   6 +-
 tools/perf/tests/openat-syscall-tp-fields.c |   8 +-
 tools/perf/tests/parse-events.c             | 135 +++----
 tools/perf/tests/parse-metric.c             |   4 +-
 tools/perf/tests/perf-record.c              |  22 +-
 tools/perf/tests/perf-time-to-tsc.c         |  10 +-
 tools/perf/tests/pfm.c                      |   8 +-
 tools/perf/tests/pmu-events.c               |   5 +-
 tools/perf/tests/sample-parsing.c           |  45 +--
 tools/perf/tests/sw-clock.c                 |   6 +-
 tools/perf/tests/switch-tracking.c          |   9 +-
 tools/perf/tests/task-exit.c                |   6 +-
 tools/perf/tests/time-utils-test.c          |  14 +-
 tools/perf/tests/tool_pmu.c                 |   5 +-
 tools/perf/tests/topology.c                 |   2 +-
 tools/perf/tests/uncore-event-sorting.c     |   4 +-
 tools/perf/ui/browsers/annotate.c           |   2 +-
 tools/perf/ui/browsers/hists.c              |  22 +-
 tools/perf/util/amd-sample-raw.c            |   2 +-
 tools/perf/util/annotate-data.c             |   2 +-
 tools/perf/util/annotate.c                  |  10 +-
 tools/perf/util/auxtrace.c                  |  14 +-
 tools/perf/util/block-info.c                |   4 +-
 tools/perf/util/bpf_counter.c               |   2 +-
 tools/perf/util/bpf_counter_cgroup.c        |  12 +-
 tools/perf/util/bpf_ftrace.c                |   9 +-
 tools/perf/util/bpf_lock_contention.c       |  12 +-
 tools/perf/util/bpf_off_cpu.c               |  14 +-
 tools/perf/util/cgroup.c                    |  20 +-
 tools/perf/util/cs-etm.c                    |   5 +-
 tools/perf/util/evlist.c                    | 395 ++++++++++++--------
 tools/perf/util/evlist.h                    | 251 ++++++++++++-
 tools/perf/util/evsel.c                     |   6 +-
 tools/perf/util/evsel.h                     |   4 +-
 tools/perf/util/header.c                    |  47 +--
 tools/perf/util/header.h                    |   2 +-
 tools/perf/util/intel-tpebs.c               |   7 +-
 tools/perf/util/iostat.c                    |   2 +-
 tools/perf/util/iostat.h                    |   2 +-
 tools/perf/util/metricgroup.c               |   6 +-
 tools/perf/util/parse-events.c              |   6 +-
 tools/perf/util/pfm.c                       |   2 +-
 tools/perf/util/python.c                    |  90 +++--
 tools/perf/util/record.c                    |   9 +-
 tools/perf/util/sample-raw.c                |   4 +-
 tools/perf/util/session.c                   |  43 ++-
 tools/perf/util/sideband_evlist.c           |  24 +-
 tools/perf/util/sort.c                      |   2 +-
 tools/perf/util/stat-display.c              |   6 +-
 tools/perf/util/stat-shadow.c               |   4 +-
 tools/perf/util/stat.c                      |   4 +-
 tools/perf/util/stream.c                    |   4 +-
 tools/perf/util/synthetic-events.c          |  11 +-
 tools/perf/util/time-utils.c                |  12 +-
 tools/perf/util/top.c                       |   4 +-
 84 files changed, 1085 insertions(+), 718 deletions(-)

diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
index cdf8e3e606067..d2861d66a6612 100644
--- a/tools/perf/arch/arm/util/cs-etm.c
+++ b/tools/perf/arch/arm/util/cs-etm.c
@@ -201,7 +201,7 @@ static int cs_etm_validate_config(struct perf_pmu *cs_etm_pmu,
 {
 	unsigned int idx;
 	int err = 0;
-	struct perf_cpu_map *event_cpus = evsel->evlist->core.user_requested_cpus;
+	struct perf_cpu_map *event_cpus = evlist__core(evsel->evlist)->user_requested_cpus;
 	struct perf_cpu_map *intersect_cpus;
 	struct perf_cpu cpu;
 
@@ -325,7 +325,7 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
 				container_of(itr, struct cs_etm_recording, itr);
 	struct perf_pmu *cs_etm_pmu = ptr->cs_etm_pmu;
 	struct evsel *evsel, *cs_etm_evsel = NULL;
-	struct perf_cpu_map *cpus = evlist->core.user_requested_cpus;
+	struct perf_cpu_map *cpus = evlist__core(evlist)->user_requested_cpus;
 	bool privileged = perf_event_paranoid_check(-1);
 	int err = 0;
 
@@ -551,7 +551,7 @@ cs_etm_info_priv_size(struct auxtrace_record *itr,
 {
 	unsigned int idx;
 	int etmv3 = 0, etmv4 = 0, ete = 0;
-	struct perf_cpu_map *event_cpus = evlist->core.user_requested_cpus;
+	struct perf_cpu_map *event_cpus = evlist__core(evlist)->user_requested_cpus;
 	struct perf_cpu_map *intersect_cpus;
 	struct perf_cpu cpu;
 	struct perf_pmu *cs_etm_pmu = cs_etm_get_pmu(itr);
@@ -790,7 +790,7 @@ static int cs_etm_info_fill(struct auxtrace_record *itr,
 	u32 offset;
 	u64 nr_cpu, type;
 	struct perf_cpu_map *cpu_map;
-	struct perf_cpu_map *event_cpus = session->evlist->core.user_requested_cpus;
+	struct perf_cpu_map *event_cpus = evlist__core(session->evlist)->user_requested_cpus;
 	struct perf_cpu_map *online_cpus = perf_cpu_map__new_online_cpus();
 	struct cs_etm_recording *ptr =
 			container_of(itr, struct cs_etm_recording, itr);
@@ -800,7 +800,7 @@ static int cs_etm_info_fill(struct auxtrace_record *itr,
 	if (priv_size != cs_etm_info_priv_size(itr, session->evlist))
 		return -EINVAL;
 
-	if (!session->evlist->core.nr_mmaps)
+	if (!evlist__core(session->evlist)->nr_mmaps)
 		return -EINVAL;
 
 	/* If the cpu_map has the "any" CPU all online CPUs are involved */
diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/util/arm-spe.c
index 91bb28cad79a5..1ba803a8d9b45 100644
--- a/tools/perf/arch/arm64/util/arm-spe.c
+++ b/tools/perf/arch/arm64/util/arm-spe.c
@@ -60,7 +60,7 @@ static bool arm_spe_is_set_freq(struct evsel *evsel)
  */
 static struct perf_cpu_map *arm_spe_find_cpus(struct evlist *evlist)
 {
-	struct perf_cpu_map *event_cpus = evlist->core.user_requested_cpus;
+	struct perf_cpu_map *event_cpus = evlist__core(evlist)->user_requested_cpus;
 	struct perf_cpu_map *online_cpus = perf_cpu_map__new_online_cpus();
 	struct perf_cpu_map *intersect_cpus;
 
@@ -157,7 +157,7 @@ static int arm_spe_info_fill(struct auxtrace_record *itr,
 	if (priv_size != arm_spe_info_priv_size(itr, session->evlist))
 		return -EINVAL;
 
-	if (!session->evlist->core.nr_mmaps)
+	if (!evlist__core(session->evlist)->nr_mmaps)
 		return -EINVAL;
 
 	cpu_map = arm_spe_find_cpus(session->evlist);
@@ -363,7 +363,7 @@ static int arm_spe_setup_tracking_event(struct evlist *evlist,
 {
 	int err;
 	struct evsel *tracking_evsel;
-	struct perf_cpu_map *cpus = evlist->core.user_requested_cpus;
+	struct perf_cpu_map *cpus = evlist__core(evlist)->user_requested_cpus;
 
 	/* Add dummy event to keep tracking */
 	err = parse_event(evlist, "dummy:u");
@@ -396,7 +396,7 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
 	struct arm_spe_recording *sper =
 			container_of(itr, struct arm_spe_recording, itr);
 	struct evsel *evsel, *tmp;
-	struct perf_cpu_map *cpus = evlist->core.user_requested_cpus;
+	struct perf_cpu_map *cpus = evlist__core(evlist)->user_requested_cpus;
 	bool discard = false;
 	int err;
 	u64 discard_bit;
diff --git a/tools/perf/arch/arm64/util/hisi-ptt.c b/tools/perf/arch/arm64/util/hisi-ptt.c
index fe457fd58c9e8..52257715d2b74 100644
--- a/tools/perf/arch/arm64/util/hisi-ptt.c
+++ b/tools/perf/arch/arm64/util/hisi-ptt.c
@@ -53,7 +53,7 @@ static int hisi_ptt_info_fill(struct auxtrace_record *itr,
 	if (priv_size != HISI_PTT_AUXTRACE_PRIV_SIZE)
 		return -EINVAL;
 
-	if (!session->evlist->core.nr_mmaps)
+	if (!evlist__core(session->evlist)->nr_mmaps)
 		return -EINVAL;
 
 	auxtrace_info->type = PERF_AUXTRACE_HISI_PTT;
diff --git a/tools/perf/arch/x86/tests/hybrid.c b/tools/perf/arch/x86/tests/hybrid.c
index dfb0ffc0d030b..0477e17b8e53d 100644
--- a/tools/perf/arch/x86/tests/hybrid.c
+++ b/tools/perf/arch/x86/tests/hybrid.c
@@ -26,7 +26,7 @@ static int test__hybrid_hw_event_with_pmu(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
@@ -38,7 +38,7 @@ static int test__hybrid_hw_group_event(struct evlist *evlist)
 	struct evsel *evsel, *leader;
 
 	evsel = leader = evlist__first(evlist);
-	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
@@ -57,7 +57,7 @@ static int test__hybrid_sw_hw_group_event(struct evlist *evlist)
 	struct evsel *evsel, *leader;
 
 	evsel = leader = evlist__first(evlist);
-	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
 
@@ -74,7 +74,7 @@ static int test__hybrid_hw_sw_group_event(struct evlist *evlist)
 	struct evsel *evsel, *leader;
 
 	evsel = leader = evlist__first(evlist);
-	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
@@ -91,7 +91,7 @@ static int test__hybrid_group_modifier1(struct evlist *evlist)
 	struct evsel *evsel, *leader;
 
 	evsel = leader = evlist__first(evlist);
-	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
@@ -113,7 +113,7 @@ static int test__hybrid_raw1(struct evlist *evlist)
 {
 	struct perf_evsel *evsel;
 
-	perf_evlist__for_each_evsel(&evlist->core, evsel) {
+	perf_evlist__for_each_evsel(evlist__core(evlist), evsel) {
 		struct perf_pmu *pmu = perf_pmus__find_by_type(evsel->attr.type);
 
 		TEST_ASSERT_VAL("missing pmu", pmu);
@@ -127,7 +127,7 @@ static int test__hybrid_raw2(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
 	return TEST_OK;
@@ -137,7 +137,7 @@ static int test__hybrid_cache_event(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff));
 	return TEST_OK;
@@ -148,7 +148,7 @@ static int test__checkevent_pmu(struct evlist *evlist)
 
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
@@ -168,7 +168,7 @@ static int test__hybrid_hw_group_event_2(struct evlist *evlist)
 	struct evsel *evsel, *leader;
 
 	evsel = leader = evlist__first(evlist);
-	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist__nr_entries(evlist));
 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
 	TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
diff --git a/tools/perf/arch/x86/util/auxtrace.c b/tools/perf/arch/x86/util/auxtrace.c
index ecbf61a7eb3a3..84fce0b51ccf7 100644
--- a/tools/perf/arch/x86/util/auxtrace.c
+++ b/tools/perf/arch/x86/util/auxtrace.c
@@ -55,7 +55,7 @@ struct auxtrace_record *auxtrace_record__init(struct evlist *evlist,
 					      int *err)
 {
 	char buffer[64];
-	struct perf_cpu cpu = perf_cpu_map__min(evlist->core.all_cpus);
+	struct perf_cpu cpu = perf_cpu_map__min(evlist__core(evlist)->all_cpus);
 	int ret;
 
 	*err = 0;
diff --git a/tools/perf/arch/x86/util/intel-bts.c b/tools/perf/arch/x86/util/intel-bts.c
index 100a23d27998f..d44d568a6d210 100644
--- a/tools/perf/arch/x86/util/intel-bts.c
+++ b/tools/perf/arch/x86/util/intel-bts.c
@@ -79,10 +79,10 @@ static int intel_bts_info_fill(struct auxtrace_record *itr,
 	if (priv_size != INTEL_BTS_AUXTRACE_PRIV_SIZE)
 		return -EINVAL;
 
-	if (!session->evlist->core.nr_mmaps)
+	if (!evlist__core(session->evlist)->nr_mmaps)
 		return -EINVAL;
 
-	pc = session->evlist->mmap[0].core.base;
+	pc = evlist__mmap(session->evlist)[0].core.base;
 	if (pc) {
 		err = perf_read_tsc_conversion(pc, &tc);
 		if (err) {
@@ -114,7 +114,7 @@ static int intel_bts_recording_options(struct auxtrace_record *itr,
 			container_of(itr, struct intel_bts_recording, itr);
 	struct perf_pmu *intel_bts_pmu = btsr->intel_bts_pmu;
 	struct evsel *evsel, *intel_bts_evsel = NULL;
-	const struct perf_cpu_map *cpus = evlist->core.user_requested_cpus;
+	const struct perf_cpu_map *cpus = evlist__core(evlist)->user_requested_cpus;
 	bool privileged = perf_event_paranoid_check(-1);
 
 	if (opts->auxtrace_sample_mode) {
diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index 0307ff15d9fc9..a533114c0048c 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -360,10 +360,10 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 	filter = intel_pt_find_filter(session->evlist, ptr->intel_pt_pmu);
 	filter_str_len = filter ? strlen(filter) : 0;
 
-	if (!session->evlist->core.nr_mmaps)
+	if (!evlist__core(session->evlist)->nr_mmaps)
 		return -EINVAL;
 
-	pc = session->evlist->mmap[0].core.base;
+	pc = evlist__mmap(session->evlist)[0].core.base;
 	if (pc) {
 		err = perf_read_tsc_conversion(pc, &tc);
 		if (err) {
@@ -376,7 +376,8 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 			ui__warning("Intel Processor Trace: TSC not available\n");
 	}
 
-	per_cpu_mmaps = !perf_cpu_map__is_any_cpu_or_is_empty(session->evlist->core.user_requested_cpus);
+	per_cpu_mmaps = !perf_cpu_map__is_any_cpu_or_is_empty(
+		evlist__core(session->evlist)->user_requested_cpus);
 
 	auxtrace_info->type = PERF_AUXTRACE_INTEL_PT;
 	auxtrace_info->priv[INTEL_PT_PMU_TYPE] = intel_pt_pmu->type;
@@ -621,7 +622,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	struct perf_pmu *intel_pt_pmu = ptr->intel_pt_pmu;
 	bool have_timing_info, need_immediate = false;
 	struct evsel *evsel, *intel_pt_evsel = NULL;
-	const struct perf_cpu_map *cpus = evlist->core.user_requested_cpus;
+	const struct perf_cpu_map *cpus = evlist__core(evlist)->user_requested_cpus;
 	bool privileged = perf_event_paranoid_check(-1);
 	u64 tsc_bit;
 	int err;
diff --git a/tools/perf/arch/x86/util/iostat.c b/tools/perf/arch/x86/util/iostat.c
index e0417552b0cbd..b13abea3a6f48 100644
--- a/tools/perf/arch/x86/util/iostat.c
+++ b/tools/perf/arch/x86/util/iostat.c
@@ -332,13 +332,15 @@ static int iostat_event_group(struct evlist *evl,
 	return ret;
 }
 
-int iostat_prepare(struct evlist *evlist, struct perf_stat_config *config)
+int iostat_prepare(struct evlist **evlist_ptr, struct perf_stat_config *config)
 {
-	if (evlist->core.nr_entries > 0) {
+	struct evlist *evlist = *evlist_ptr;
+
+	if (evlist__nr_entries(evlist) > 0) {
 		pr_warning("The -e and -M options are not supported."
 			   "All chosen events/metrics will be dropped\n");
 		evlist__put(evlist);
-		evlist = evlist__new();
+		*evlist_ptr = evlist = evlist__new();
 		if (!evlist)
 			return -ENOMEM;
 	}
@@ -400,7 +402,7 @@ void iostat_prefix(struct evlist *evlist,
 		   struct perf_stat_config *config,
 		   char *prefix, struct timespec *ts)
 {
-	struct iio_root_port *rp = evlist->selected->priv;
+	struct iio_root_port *rp = evlist__selected(evlist)->priv;
 
 	if (rp) {
 		/*
@@ -463,7 +465,7 @@ void iostat_print_counters(struct evlist *evlist,
 	iostat_prefix(evlist, config, prefix, ts);
 	fprintf(config->output, "%s", prefix);
 	evlist__for_each_entry(evlist, counter) {
-		perf_device = evlist->selected->priv;
+		perf_device = evlist__selected(evlist)->priv;
 		if (perf_device && perf_device != counter->priv) {
 			evlist__set_selected(evlist, counter);
 			iostat_prefix(evlist, config, prefix, ts);
diff --git a/tools/perf/bench/evlist-open-close.c b/tools/perf/bench/evlist-open-close.c
index 304929d1f67f9..748ebbe458f49 100644
--- a/tools/perf/bench/evlist-open-close.c
+++ b/tools/perf/bench/evlist-open-close.c
@@ -116,7 +116,7 @@ static int bench__do_evlist_open_close(struct evlist *evlist)
 		return err;
 	}
 
-	err = evlist__mmap(evlist, opts.mmap_pages);
+	err = evlist__do_mmap(evlist, opts.mmap_pages);
 	if (err < 0) {
 		pr_err("evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf)));
 		return err;
@@ -124,7 +124,7 @@ static int bench__do_evlist_open_close(struct evlist *evlist)
 
 	evlist__enable(evlist);
 	evlist__disable(evlist);
-	evlist__munmap(evlist);
+	evlist__do_munmap(evlist);
 	evlist__close(evlist);
 
 	return 0;
@@ -145,10 +145,11 @@ static int bench_evlist_open_close__run(char *evstr, const char *uid_str)
 
 	init_stats(&time_stats);
 
-	printf("  Number of cpus:\t%d\n", perf_cpu_map__nr(evlist->core.user_requested_cpus));
-	printf("  Number of threads:\t%d\n", evlist->core.threads->nr);
+	printf("  Number of cpus:\t%d\n",
+	       perf_cpu_map__nr(evlist__core(evlist)->user_requested_cpus));
+	printf("  Number of threads:\t%d\n", evlist__core(evlist)->threads->nr);
 	printf("  Number of events:\t%d (%d fds)\n",
-		evlist->core.nr_entries, evlist__count_evsel_fds(evlist));
+		evlist__nr_entries(evlist), evlist__count_evsel_fds(evlist));
 	printf("  Number of iterations:\t%d\n", iterations);
 
 	evlist__put(evlist);
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 8a0eb30eac24f..69cb72b2082a6 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -562,7 +562,7 @@ static int __cmd_annotate(struct perf_annotate *ann)
 		goto out;
 
 	if ((use_browser == 1 || ann->use_stdio2) && ann->has_br_stack)
-		if (session->evlist->nr_br_cntr > 0)
+		if (evlist__nr_br_cntr(session->evlist) > 0)
 			annotate_opts.show_br_cntr = true;
 
 	if (dump_trace) {
@@ -928,8 +928,11 @@ int cmd_annotate(int argc, const char **argv)
 	 * branch counters, if the corresponding branch info is available
 	 * in the perf data in the TUI mode.
 	 */
-	if ((use_browser == 1 || annotate.use_stdio2) && annotate.has_br_stack)
+	if ((use_browser == 1 || annotate.use_stdio2) && annotate.has_br_stack) {
 		sort__mode = SORT_MODE__BRANCH;
+		if (evlist__nr_br_cntr(annotate.session->evlist) > 0)
+			annotate_opts.show_br_cntr = true;
+	}
 
 	if (setup_sorting(/*evlist=*/NULL, perf_session__env(annotate.session)) < 0)
 		usage_with_options(annotate_usage, options);
diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index 676239148b871..9e4c5220d43c2 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -377,9 +377,9 @@ static int set_tracing_pid(struct perf_ftrace *ftrace)
 	if (target__has_cpu(&ftrace->target))
 		return 0;
 
-	for (i = 0; i < perf_thread_map__nr(ftrace->evlist->core.threads); i++) {
+	for (i = 0; i < perf_thread_map__nr(evlist__core(ftrace->evlist)->threads); i++) {
 		scnprintf(buf, sizeof(buf), "%d",
-			  perf_thread_map__pid(ftrace->evlist->core.threads, i));
+			  perf_thread_map__pid(evlist__core(ftrace->evlist)->threads, i));
 		if (append_tracing_file("set_ftrace_pid", buf) < 0)
 			return -1;
 	}
@@ -413,7 +413,7 @@ static int set_tracing_cpumask(struct perf_cpu_map *cpumap)
 
 static int set_tracing_cpu(struct perf_ftrace *ftrace)
 {
-	struct perf_cpu_map *cpumap = ftrace->evlist->core.user_requested_cpus;
+	struct perf_cpu_map *cpumap = evlist__core(ftrace->evlist)->user_requested_cpus;
 
 	if (!target__has_cpu(&ftrace->target))
 		return 0;
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 6d6cce4765a7f..b13ce4caf8098 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -1520,7 +1520,7 @@ static int synthesize_id_index(struct perf_inject *inject, size_t new_cnt)
 	struct perf_session *session = inject->session;
 	struct evlist *evlist = session->evlist;
 	struct machine *machine = &session->machines.host;
-	size_t from = evlist->core.nr_entries - new_cnt;
+	size_t from = evlist__nr_entries(evlist) - new_cnt;
 
 	return __perf_event__synthesize_id_index(&inject->tool, perf_event__repipe,
 						 evlist, machine, from);
@@ -2055,7 +2055,7 @@ static int host__finished_init(const struct perf_tool *tool, struct perf_session
 	if (ret)
 		return ret;
 
-	ret = synthesize_id_index(inject, gs->session->evlist->core.nr_entries);
+	ret = synthesize_id_index(inject, evlist__nr_entries(gs->session->evlist));
 	if (ret) {
 		pr_err("Failed to synthesize id_index\n");
 		return ret;
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 993dabff2a72e..2c6aef1e13a04 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1221,7 +1221,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,
 	int err;
 
 	*mmap_time = ULLONG_MAX;
-	md = &evlist->mmap[idx];
+	md = &evlist__mmap(evlist)[idx];
 	err = perf_mmap__read_init(&md->core);
 	if (err < 0)
 		return (err == -EAGAIN) ? 0 : -1;
@@ -1266,7 +1266,7 @@ static int perf_kvm__mmap_read(struct perf_kvm_stat *kvm)
 	s64 n, ntotal = 0;
 	u64 flush_time = ULLONG_MAX, mmap_time;
 
-	for (i = 0; i < kvm->evlist->core.nr_mmaps; i++) {
+	for (i = 0; i < evlist__core(kvm->evlist)->nr_mmaps; i++) {
 		n = perf_kvm__mmap_read_idx(kvm, i, &mmap_time);
 		if (n < 0)
 			return -1;
@@ -1449,7 +1449,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
 	evlist__enable(kvm->evlist);
 
 	while (!done) {
-		struct fdarray *fda = &kvm->evlist->core.pollfd;
+		struct fdarray *fda = &evlist__core(kvm->evlist)->pollfd;
 		int rc;
 
 		rc = perf_kvm__mmap_read(kvm);
@@ -1531,7 +1531,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
 		goto out;
 	}
 
-	if (evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) {
+	if (evlist__do_mmap(evlist, kvm->opts.mmap_pages) < 0) {
 		ui__error("Failed to mmap the events: %s\n",
 			  str_error_r(errno, sbuf, sizeof(sbuf)));
 		evlist__close(evlist);
@@ -1931,7 +1931,7 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
 	perf_session__set_id_hdr_size(kvm->session);
 	ordered_events__set_copy_on_queue(&kvm->session->ordered_events, true);
 	machine__synthesize_threads(&kvm->session->machines.host, &kvm->opts.target,
-				    kvm->evlist->core.threads, true, false, 1);
+				    evlist__core(kvm->evlist)->threads, true, false, 1);
 	err = kvm_live_open_events(kvm);
 	if (err)
 		goto out;
diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c
index 7b61168e01e9d..fce588441e499 100644
--- a/tools/perf/builtin-kwork.c
+++ b/tools/perf/builtin-kwork.c
@@ -1814,7 +1814,7 @@ static int perf_kwork__check_config(struct perf_kwork *kwork,
 		}
 	}
 
-	list_for_each_entry(evsel, &session->evlist->core.entries, core.node) {
+	list_for_each_entry(evsel, &evlist__core(session->evlist)->entries, core.node) {
 		if (kwork->show_callchain && !evsel__has_callchain(evsel)) {
 			pr_debug("Samples do not have callchains\n");
 			kwork->show_callchain = 0;
@@ -1864,9 +1864,9 @@ static int perf_kwork__read_events(struct perf_kwork *kwork)
 		goto out_delete;
 	}
 
-	kwork->nr_events      = session->evlist->stats.nr_events[0];
-	kwork->nr_lost_events = session->evlist->stats.total_lost;
-	kwork->nr_lost_chunks = session->evlist->stats.nr_events[PERF_RECORD_LOST];
+	kwork->nr_events      = evlist__stats(session->evlist)->nr_events[0];
+	kwork->nr_lost_events = evlist__stats(session->evlist)->total_lost;
+	kwork->nr_lost_chunks = evlist__stats(session->evlist)->nr_events[PERF_RECORD_LOST];
 
 out_delete:
 	perf_session__delete(session);
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index d925543a68c07..d5c0d55cb82d9 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -2129,7 +2129,7 @@ static int __cmd_contention(int argc, const char **argv)
 			evlist__start_workload(con.evlist);
 
 		while (!done) {
-			if (argc && waitpid(con.evlist->workload.pid, NULL, WNOHANG) > 0)
+			if (argc && waitpid(evlist__workload_pid(con.evlist), NULL, WNOHANG) > 0)
 				break;
 			sleep(1);
 		}
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index e4fa77a40dacb..ebd3ed0c9b3e8 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -502,12 +502,12 @@ static void record__aio_mmap_read_sync(struct record *rec)
 {
 	int i;
 	struct evlist *evlist = rec->evlist;
-	struct mmap *maps = evlist->mmap;
+	struct mmap *maps = evlist__mmap(evlist);
 
 	if (!record__aio_enabled(rec))
 		return;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
 		struct mmap *map = &maps[i];
 
 		if (map->core.base)
@@ -811,8 +811,8 @@ static int record__auxtrace_read_snapshot_all(struct record *rec)
 	int i;
 	int rc = 0;
 
-	for (i = 0; i < rec->evlist->core.nr_mmaps; i++) {
-		struct mmap *map = &rec->evlist->mmap[i];
+	for (i = 0; i < evlist__core(rec->evlist)->nr_mmaps; i++) {
+		struct mmap *map = &evlist__mmap(rec->evlist)[i];
 
 		if (!map->auxtrace_mmap.base)
 			continue;
@@ -1055,15 +1055,15 @@ static void record__thread_data_close_pipes(struct record_thread *thread_data)
 
 static bool evlist__per_thread(struct evlist *evlist)
 {
-	return cpu_map__is_dummy(evlist->core.user_requested_cpus);
+	return cpu_map__is_dummy(evlist__core(evlist)->user_requested_cpus);
 }
 
 static int record__thread_data_init_maps(struct record_thread *thread_data, struct evlist *evlist)
 {
-	int m, tm, nr_mmaps = evlist->core.nr_mmaps;
-	struct mmap *mmap = evlist->mmap;
-	struct mmap *overwrite_mmap = evlist->overwrite_mmap;
-	struct perf_cpu_map *cpus = evlist->core.all_cpus;
+	int m, tm, nr_mmaps = evlist__core(evlist)->nr_mmaps;
+	struct mmap *mmap = evlist__mmap(evlist);
+	struct mmap *overwrite_mmap = evlist__overwrite_mmap(evlist);
+	struct perf_cpu_map *cpus = evlist__core(evlist)->all_cpus;
 	bool per_thread = evlist__per_thread(evlist);
 
 	if (per_thread)
@@ -1118,16 +1118,17 @@ static int record__thread_data_init_pollfd(struct record_thread *thread_data, st
 		overwrite_map = thread_data->overwrite_maps ?
 				thread_data->overwrite_maps[tm] : NULL;
 
-		for (f = 0; f < evlist->core.pollfd.nr; f++) {
-			void *ptr = evlist->core.pollfd.priv[f].ptr;
+		for (f = 0; f < evlist__core(evlist)->pollfd.nr; f++) {
+			void *ptr = evlist__core(evlist)->pollfd.priv[f].ptr;
 
 			if ((map && ptr == map) || (overwrite_map && ptr == overwrite_map)) {
 				pos = fdarray__dup_entry_from(&thread_data->pollfd, f,
-							      &evlist->core.pollfd);
+							      &evlist__core(evlist)->pollfd);
 				if (pos < 0)
 					return pos;
 				pr_debug2("thread_data[%p]: pollfd[%d] <- event_fd=%d\n",
-					 thread_data, pos, evlist->core.pollfd.entries[f].fd);
+					 thread_data, pos,
+					 evlist__core(evlist)->pollfd.entries[f].fd);
 			}
 		}
 	}
@@ -1171,7 +1172,7 @@ static int record__update_evlist_pollfd_from_thread(struct record *rec,
 						    struct evlist *evlist,
 						    struct record_thread *thread_data)
 {
-	struct pollfd *e_entries = evlist->core.pollfd.entries;
+	struct pollfd *e_entries = evlist__core(evlist)->pollfd.entries;
 	struct pollfd *t_entries = thread_data->pollfd.entries;
 	int err = 0;
 	size_t i;
@@ -1195,7 +1196,7 @@ static int record__dup_non_perf_events(struct record *rec,
 				       struct evlist *evlist,
 				       struct record_thread *thread_data)
 {
-	struct fdarray *fda = &evlist->core.pollfd;
+	struct fdarray *fda = &evlist__core(evlist)->pollfd;
 	int i, ret;
 
 	for (i = 0; i < fda->nr; i++) {
@@ -1322,17 +1323,17 @@ static int record__mmap_evlist(struct record *rec,
 		return ret;
 
 	if (record__threads_enabled(rec)) {
-		ret = perf_data__create_dir(&rec->data, evlist->core.nr_mmaps);
+		ret = perf_data__create_dir(&rec->data, evlist__core(evlist)->nr_mmaps);
 		if (ret) {
 			errno = -ret;
 			pr_err("Failed to create data directory: %m\n");
 			return ret;
 		}
-		for (i = 0; i < evlist->core.nr_mmaps; i++) {
-			if (evlist->mmap)
-				evlist->mmap[i].file = &rec->data.dir.files[i];
-			if (evlist->overwrite_mmap)
-				evlist->overwrite_mmap[i].file = &rec->data.dir.files[i];
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+			if (evlist__mmap(evlist))
+				evlist__mmap(evlist)[i].file = &rec->data.dir.files[i];
+			if (evlist__overwrite_mmap(evlist))
+				evlist__overwrite_mmap(evlist)[i].file = &rec->data.dir.files[i];
 		}
 	}
 
@@ -1481,11 +1482,11 @@ static int record__open(struct record *rec)
 
 static void set_timestamp_boundary(struct record *rec, u64 sample_time)
 {
-	if (rec->evlist->first_sample_time == 0)
-		rec->evlist->first_sample_time = sample_time;
+	if (evlist__first_sample_time(rec->evlist) == 0)
+		evlist__set_first_sample_time(rec->evlist, sample_time);
 
 	if (sample_time)
-		rec->evlist->last_sample_time = sample_time;
+		evlist__set_last_sample_time(rec->evlist, sample_time);
 }
 
 static int process_sample_event(const struct perf_tool *tool,
@@ -1653,7 +1654,7 @@ static int record__mmap_read_evlist(struct record *rec, struct evlist *evlist,
 	if (!maps)
 		return 0;
 
-	if (overwrite && evlist->bkw_mmap_state != BKW_MMAP_DATA_PENDING)
+	if (overwrite && evlist__bkw_mmap_state(evlist) != BKW_MMAP_DATA_PENDING)
 		return 0;
 
 	if (record__aio_enabled(rec))
@@ -1808,7 +1809,7 @@ static void record__init_features(struct record *rec)
 	if (rec->no_buildid)
 		perf_header__clear_feat(&session->header, HEADER_BUILD_ID);
 
-	if (!have_tracepoints(&rec->evlist->core.entries))
+	if (!have_tracepoints(&evlist__core(rec->evlist)->entries))
 		perf_header__clear_feat(&session->header, HEADER_TRACING_DATA);
 
 	if (!rec->opts.branch_stack)
@@ -1874,7 +1875,7 @@ static int record__synthesize_workload(struct record *rec, bool tail)
 	if (rec->opts.tail_synthesize != tail)
 		return 0;
 
-	thread_map = thread_map__new_by_tid(rec->evlist->workload.pid);
+	thread_map = thread_map__new_by_tid(evlist__workload_pid(rec->evlist));
 	if (thread_map == NULL)
 		return -1;
 
@@ -2067,10 +2068,10 @@ static void alarm_sig_handler(int sig);
 static const struct perf_event_mmap_page *evlist__pick_pc(struct evlist *evlist)
 {
 	if (evlist) {
-		if (evlist->mmap && evlist->mmap[0].core.base)
-			return evlist->mmap[0].core.base;
-		if (evlist->overwrite_mmap && evlist->overwrite_mmap[0].core.base)
-			return evlist->overwrite_mmap[0].core.base;
+		if (evlist__mmap(evlist) && evlist__mmap(evlist)[0].core.base)
+			return evlist__mmap(evlist)[0].core.base;
+		if (evlist__overwrite_mmap(evlist) && evlist__overwrite_mmap(evlist)[0].core.base)
+			return evlist__overwrite_mmap(evlist)[0].core.base;
 	}
 	return NULL;
 }
@@ -2150,7 +2151,7 @@ static int record__synthesize(struct record *rec, bool tail)
 	if (err)
 		goto out;
 
-	err = perf_event__synthesize_thread_map2(&rec->tool, rec->evlist->core.threads,
+	err = perf_event__synthesize_thread_map2(&rec->tool, evlist__core(rec->evlist)->threads,
 						 process_synthesized_event,
 						NULL);
 	if (err < 0) {
@@ -2158,7 +2159,7 @@ static int record__synthesize(struct record *rec, bool tail)
 		return err;
 	}
 
-	err = perf_event__synthesize_cpu_map(&rec->tool, rec->evlist->core.all_cpus,
+	err = perf_event__synthesize_cpu_map(&rec->tool, evlist__core(rec->evlist)->all_cpus,
 					     process_synthesized_event, NULL);
 	if (err < 0) {
 		pr_err("Couldn't synthesize cpu map.\n");
@@ -2191,7 +2192,7 @@ static int record__synthesize(struct record *rec, bool tail)
 		bool needs_mmap = rec->opts.synth & PERF_SYNTH_MMAP;
 
 		err = __machine__synthesize_threads(machine, tool, &opts->target,
-						    rec->evlist->core.threads,
+						    evlist__core(rec->evlist)->threads,
 						    f, needs_mmap, opts->record_data_mmap,
 						    rec->opts.nr_threads_synthesize);
 	}
@@ -2544,7 +2545,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 	 * because we synthesize event name through the pipe
 	 * and need the id for that.
 	 */
-	if (data->is_pipe && rec->evlist->core.nr_entries == 1)
+	if (data->is_pipe && evlist__nr_entries(rec->evlist) == 1)
 		rec->opts.sample_id = true;
 
 	if (rec->timestamp_filename && perf_data__is_pipe(data)) {
@@ -2568,7 +2569,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 	}
 	/* Debug message used by test scripts */
 	pr_debug3("perf record done opening and mmapping events\n");
-	env->comp_mmap_len = session->evlist->core.mmap_len;
+	env->comp_mmap_len = evlist__core(session->evlist)->mmap_len;
 
 	if (rec->opts.kcore) {
 		err = record__kcore_copy(&session->machines.host, data);
@@ -2669,7 +2670,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 		 * Synthesize COMM event to prevent it.
 		 */
 		tgid = perf_event__synthesize_comm(tool, event,
-						   rec->evlist->workload.pid,
+						   evlist__workload_pid(rec->evlist),
 						   process_synthesized_event,
 						   machine);
 		free(event);
@@ -2689,7 +2690,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 		 * Synthesize NAMESPACES event for the command specified.
 		 */
 		perf_event__synthesize_namespaces(tool, event,
-						  rec->evlist->workload.pid,
+						  evlist__workload_pid(rec->evlist),
 						  tgid, process_synthesized_event,
 						  machine);
 		free(event);
@@ -2706,7 +2707,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 		}
 	}
 
-	err = event_enable_timer__start(rec->evlist->eet);
+	err = event_enable_timer__start(evlist__event_enable_timer(rec->evlist));
 	if (err)
 		goto out_child;
 
@@ -2768,7 +2769,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 			 * record__mmap_read_all() didn't collect data from
 			 * overwritable ring buffer. Read again.
 			 */
-			if (rec->evlist->bkw_mmap_state == BKW_MMAP_RUNNING)
+			if (evlist__bkw_mmap_state(rec->evlist) == BKW_MMAP_RUNNING)
 				continue;
 			trigger_ready(&switch_output_trigger);
 
@@ -2837,7 +2838,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 			}
 		}
 
-		err = event_enable_timer__process(rec->evlist->eet);
+		err = event_enable_timer__process(evlist__event_enable_timer(rec->evlist));
 		if (err < 0)
 			goto out_child;
 		if (err) {
@@ -2909,7 +2910,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 		int exit_status;
 
 		if (!child_finished)
-			kill(rec->evlist->workload.pid, SIGTERM);
+			kill(evlist__workload_pid(rec->evlist), SIGTERM);
 
 		wait(&exit_status);
 
@@ -4032,7 +4033,7 @@ static int record__init_thread_default_masks(struct record *rec, struct perf_cpu
 static int record__init_thread_masks(struct record *rec)
 {
 	int ret = 0;
-	struct perf_cpu_map *cpus = rec->evlist->core.all_cpus;
+	struct perf_cpu_map *cpus = evlist__core(rec->evlist)->all_cpus;
 
 	if (!record__threads_enabled(rec))
 		return record__init_thread_default_masks(rec, cpus);
@@ -4283,14 +4284,14 @@ int cmd_record(int argc, const char **argv)
 	if (record.opts.overwrite)
 		record.opts.tail_synthesize = true;
 
-	if (rec->evlist->core.nr_entries == 0) {
+	if (evlist__nr_entries(rec->evlist) == 0) {
 		struct evlist *def_evlist = evlist__new_default(&rec->opts.target,
 								callchain_param.enabled);
 
 		if (!def_evlist)
 			goto out;
 
-		evlist__splice_list_tail(rec->evlist, &def_evlist->core.entries);
+		evlist__splice_list_tail(rec->evlist, &evlist__core(def_evlist)->entries);
 		evlist__put(def_evlist);
 	}
 
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index dd1309c320943..10db1e5f1e6c4 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -561,7 +561,7 @@ static int evlist__tty_browse_hists(struct evlist *evlist, struct report *rep, c
 
 	if (!quiet) {
 		fprintf(stdout, "#\n# Total Lost Samples: %" PRIu64 "\n#\n",
-			evlist->stats.total_lost_samples);
+			evlist__stats(evlist)->total_lost_samples);
 	}
 
 	evlist__for_each_entry(evlist, pos) {
@@ -1156,7 +1156,7 @@ static int __cmd_report(struct report *rep)
 			PERF_HPP_REPORT__BLOCK_AVG_CYCLES,
 		};
 
-		if (session->evlist->nr_br_cntr > 0)
+		if (evlist__nr_br_cntr(session->evlist) > 0)
 			block_hpps[nr_hpps++] = PERF_HPP_REPORT__BLOCK_BRANCH_COUNTER;
 
 		block_hpps[nr_hpps++] = PERF_HPP_REPORT__BLOCK_RANGE;
@@ -1291,7 +1291,7 @@ static int process_attr(const struct perf_tool *tool __maybe_unused,
 	 * on events sample_type.
 	 */
 	sample_type = evlist__combined_sample_type(*pevlist);
-	session = (*pevlist)->session;
+	session = evlist__session(*pevlist);
 	callchain_param_setup(sample_type, perf_session__e_machine(session, /*e_flags=*/NULL));
 	return 0;
 }
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 54ce9933ef092..ae033ffd1079a 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -2025,9 +2025,9 @@ static int perf_sched__read_events(struct perf_sched *sched)
 			goto out_delete;
 		}
 
-		sched->nr_events      = session->evlist->stats.nr_events[0];
-		sched->nr_lost_events = session->evlist->stats.total_lost;
-		sched->nr_lost_chunks = session->evlist->stats.nr_events[PERF_RECORD_LOST];
+		sched->nr_events      = evlist__stats(session->evlist)->nr_events[0];
+		sched->nr_lost_events = evlist__stats(session->evlist)->total_lost;
+		sched->nr_lost_chunks = evlist__stats(session->evlist)->nr_events[PERF_RECORD_LOST];
 	}
 
 	rc = 0;
@@ -3303,7 +3303,7 @@ static int timehist_check_attr(struct perf_sched *sched,
 	struct evsel *evsel;
 	struct evsel_runtime *er;
 
-	list_for_each_entry(evsel, &evlist->core.entries, core.node) {
+	list_for_each_entry(evsel, &evlist__core(evlist)->entries, core.node) {
 		er = evsel__get_runtime(evsel);
 		if (er == NULL) {
 			pr_err("Failed to allocate memory for evsel runtime data\n");
@@ -3475,9 +3475,9 @@ static int perf_sched__timehist(struct perf_sched *sched)
 		goto out;
 	}
 
-	sched->nr_events      = evlist->stats.nr_events[0];
-	sched->nr_lost_events = evlist->stats.total_lost;
-	sched->nr_lost_chunks = evlist->stats.nr_events[PERF_RECORD_LOST];
+	sched->nr_events      = evlist__stats(evlist)->nr_events[0];
+	sched->nr_lost_events = evlist__stats(evlist)->total_lost;
+	sched->nr_lost_chunks = evlist__stats(evlist)->nr_events[PERF_RECORD_LOST];
 
 	if (sched->summary)
 		timehist_print_summary(sched, session);
@@ -3982,7 +3982,7 @@ static int perf_sched__schedstat_record(struct perf_sched *sched,
 	if (err < 0)
 		goto out;
 
-	user_requested_cpus = evlist->core.user_requested_cpus;
+	user_requested_cpus = evlist__core(evlist)->user_requested_cpus;
 
 	err = perf_event__synthesize_schedstat(&(sched->tool),
 					       process_synthesized_schedstat_event,
@@ -3998,7 +3998,7 @@ static int perf_sched__schedstat_record(struct perf_sched *sched,
 		evlist__start_workload(evlist);
 
 	while (!done) {
-		if (argc && waitpid(evlist->workload.pid, NULL, WNOHANG) > 0)
+		if (argc && waitpid(evlist__workload_pid(evlist), NULL, WNOHANG) > 0)
 			break;
 		sleep(1);
 	}
@@ -4699,7 +4699,7 @@ static int perf_sched__schedstat_report(struct perf_sched *sched)
 	if (err < 0)
 		goto out;
 
-	user_requested_cpus = session->evlist->core.user_requested_cpus;
+	user_requested_cpus = evlist__core(session->evlist)->user_requested_cpus;
 
 	err = perf_session__process_events(session);
 
@@ -4875,7 +4875,7 @@ static int perf_sched__schedstat_live(struct perf_sched *sched,
 	if (err < 0)
 		goto out;
 
-	user_requested_cpus = evlist->core.user_requested_cpus;
+	user_requested_cpus = evlist__core(evlist)->user_requested_cpus;
 
 	err = perf_event__synthesize_schedstat(&(sched->tool),
 					       process_synthesized_event_live,
@@ -4891,7 +4891,7 @@ static int perf_sched__schedstat_live(struct perf_sched *sched,
 		evlist__start_workload(evlist);
 
 	while (!done) {
-		if (argc && waitpid(evlist->workload.pid, NULL, WNOHANG) > 0)
+		if (argc && waitpid(evlist__workload_pid(evlist), NULL, WNOHANG) > 0)
 			break;
 		sleep(1);
 	}
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 0df13927001b0..47afd8cdc2b77 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -2229,9 +2229,10 @@ static int script_find_metrics(const struct pmu_metric *pm,
 	evlist__for_each_entry(metric_evlist, metric_evsel) {
 		struct evsel *script_evsel =
 			map_metric_evsel_to_script_evsel(script_evlist, metric_evsel);
-		struct metric_event *metric_me = metricgroup__lookup(&metric_evlist->metric_events,
-								     metric_evsel,
-								     /*create=*/false);
+		struct metric_event *metric_me =
+			metricgroup__lookup(evlist__metric_events(metric_evlist),
+					    metric_evsel,
+					    /*create=*/false);
 
 		if (script_evsel->metric_id == NULL) {
 			script_evsel->metric_id = metric_evsel->metric_id;
@@ -2251,7 +2252,7 @@ static int script_find_metrics(const struct pmu_metric *pm,
 		if (metric_me) {
 			struct metric_expr *expr;
 			struct metric_event *script_me =
-				metricgroup__lookup(&script_evlist->metric_events,
+				metricgroup__lookup(evlist__metric_events(script_evlist),
 						    script_evsel,
 						    /*create=*/true);
 
@@ -2321,7 +2322,7 @@ static void perf_sample__fprint_metric(struct thread *thread,
 			assert(stat_config.aggr_mode == AGGR_GLOBAL);
 			stat_config.aggr_get_id = script_aggr_cpu_id_get;
 			stat_config.aggr_map =
-				cpu_aggr_map__new(evsel->evlist->core.user_requested_cpus,
+				cpu_aggr_map__new(evlist__core(evsel->evlist)->user_requested_cpus,
 						  aggr_cpu_id__global, /*data=*/NULL,
 						  /*needs_sort=*/false);
 		}
@@ -3909,7 +3910,7 @@ static int set_maps(struct perf_script *script)
 	if (WARN_ONCE(script->allocated, "stats double allocation\n"))
 		return -EINVAL;
 
-	perf_evlist__set_maps(&evlist->core, script->cpus, script->threads);
+	perf_evlist__set_maps(evlist__core(evlist), script->cpus, script->threads);
 
 	if (evlist__alloc_stats(&stat_config, evlist, /*alloc_raw=*/true))
 		return -ENOMEM;
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index bf621202da697..3f897b2e86386 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -321,7 +321,7 @@ static int read_single_counter(struct evsel *counter, int cpu_map_idx, int threa
  */
 static int read_counter_cpu(struct evsel *counter, int cpu_map_idx)
 {
-	int nthreads = perf_thread_map__nr(evsel_list->core.threads);
+	int nthreads = perf_thread_map__nr(evlist__core(evsel_list)->threads);
 	int thread;
 
 	if (!counter->supported)
@@ -628,11 +628,12 @@ static int dispatch_events(bool forks, int timeout, int interval, int *times)
 	time_to_sleep = sleep_time;
 
 	while (!done) {
-		if (forks)
+		if (forks) {
 			child_exited = waitpid(child_pid, &status, WNOHANG);
-		else
-			child_exited = !is_target_alive(&target, evsel_list->core.threads) ? 1 : 0;
-
+		} else {
+			child_exited = !is_target_alive(&target,
+							evlist__core(evsel_list)->threads) ? 1 : 0;
+		}
 		if (child_exited)
 			break;
 
@@ -681,14 +682,15 @@ static enum counter_recovery stat_handle_error(struct evsel *counter, int err)
 		return COUNTER_RETRY;
 	}
 	if (target__has_per_thread(&target) && err != EOPNOTSUPP &&
-	    evsel_list->core.threads && evsel_list->core.threads->err_thread != -1) {
+	    evlist__core(evsel_list)->threads &&
+	    evlist__core(evsel_list)->threads->err_thread != -1) {
 		/*
 		 * For global --per-thread case, skip current
 		 * error thread.
 		 */
-		if (!thread_map__remove(evsel_list->core.threads,
-					evsel_list->core.threads->err_thread)) {
-			evsel_list->core.threads->err_thread = -1;
+		if (!thread_map__remove(evlist__core(evsel_list)->threads,
+					evlist__core(evsel_list)->threads->err_thread)) {
+			evlist__core(evsel_list)->threads->err_thread = -1;
 			counter->supported = true;
 			return COUNTER_RETRY;
 		}
@@ -787,11 +789,12 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
 	bool second_pass = false, has_supported_counters;
 
 	if (forks) {
-		if (evlist__prepare_workload(evsel_list, &target, argv, is_pipe, workload_exec_failed_signal) < 0) {
+		if (evlist__prepare_workload(evsel_list, &target, argv, is_pipe,
+					     workload_exec_failed_signal) < 0) {
 			perror("failed to prepare workload");
 			return -1;
 		}
-		child_pid = evsel_list->workload.pid;
+		child_pid = evlist__workload_pid(evsel_list);
 	}
 
 	evlist__for_each_entry(evsel_list, counter) {
@@ -1199,7 +1202,7 @@ static int parse_cputype(const struct option *opt,
 	const struct perf_pmu *pmu;
 	struct evlist *evlist = *(struct evlist **)opt->value;
 
-	if (!list_empty(&evlist->core.entries)) {
+	if (!list_empty(&evlist__core(evlist)->entries)) {
 		fprintf(stderr, "Must define cputype before events/metrics\n");
 		return -1;
 	}
@@ -1220,7 +1223,7 @@ static int parse_pmu_filter(const struct option *opt,
 {
 	struct evlist *evlist = *(struct evlist **)opt->value;
 
-	if (!list_empty(&evlist->core.entries)) {
+	if (!list_empty(&evlist__core(evlist)->entries)) {
 		fprintf(stderr, "Must define pmu-filter before events/metrics\n");
 		return -1;
 	}
@@ -1586,8 +1589,9 @@ static int perf_stat_init_aggr_mode(void)
 
 	if (get_id) {
 		bool needs_sort = stat_config.aggr_mode != AGGR_NONE;
-		stat_config.aggr_map = cpu_aggr_map__new(evsel_list->core.user_requested_cpus,
-							 get_id, /*data=*/NULL, needs_sort);
+		stat_config.aggr_map = cpu_aggr_map__new(
+			evlist__core(evsel_list)->user_requested_cpus,
+			get_id, /*data=*/NULL, needs_sort);
 		if (!stat_config.aggr_map) {
 			pr_err("cannot build %s map\n", aggr_mode__string[stat_config.aggr_mode]);
 			return -1;
@@ -1596,7 +1600,7 @@ static int perf_stat_init_aggr_mode(void)
 	}
 
 	if (stat_config.aggr_mode == AGGR_THREAD) {
-		nr = perf_thread_map__nr(evsel_list->core.threads);
+		nr = perf_thread_map__nr(evlist__core(evsel_list)->threads);
 		stat_config.aggr_map = cpu_aggr_map__empty_new(nr);
 		if (stat_config.aggr_map == NULL)
 			return -ENOMEM;
@@ -1615,7 +1619,7 @@ static int perf_stat_init_aggr_mode(void)
 	 * taking the highest cpu number to be the size of
 	 * the aggregation translate cpumap.
 	 */
-	nr = perf_cpu_map__max(evsel_list->core.all_cpus).cpu + 1;
+	nr = perf_cpu_map__max(evlist__core(evsel_list)->all_cpus).cpu + 1;
 	stat_config.cpus_aggr_map = cpu_aggr_map__empty_new(nr);
 	return stat_config.cpus_aggr_map ? 0 : -ENOMEM;
 }
@@ -1902,7 +1906,7 @@ static int perf_stat_init_aggr_mode_file(struct perf_stat *st)
 	bool needs_sort = stat_config.aggr_mode != AGGR_NONE;
 
 	if (stat_config.aggr_mode == AGGR_THREAD) {
-		int nr = perf_thread_map__nr(evsel_list->core.threads);
+		int nr = perf_thread_map__nr(evlist__core(evsel_list)->threads);
 
 		stat_config.aggr_map = cpu_aggr_map__empty_new(nr);
 		if (stat_config.aggr_map == NULL)
@@ -1920,7 +1924,7 @@ static int perf_stat_init_aggr_mode_file(struct perf_stat *st)
 	if (!get_id)
 		return 0;
 
-	stat_config.aggr_map = cpu_aggr_map__new(evsel_list->core.user_requested_cpus,
+	stat_config.aggr_map = cpu_aggr_map__new(evlist__core(evsel_list)->user_requested_cpus,
 						 get_id, env, needs_sort);
 	if (!stat_config.aggr_map) {
 		pr_err("cannot build %s map\n", aggr_mode__string[stat_config.aggr_mode]);
@@ -2088,7 +2092,7 @@ static int add_default_events(void)
 	if (!stat_config.topdown_level)
 		stat_config.topdown_level = 1;
 
-	if (!evlist->core.nr_entries && !evsel_list->core.nr_entries) {
+	if (!evlist__nr_entries(evlist) && !evlist__nr_entries(evsel_list)) {
 		/*
 		 * Add Default metrics. To minimize multiplexing, don't request
 		 * threshold computation, but it will be computed if the events
@@ -2127,13 +2131,13 @@ static int add_default_events(void)
 			evlist__for_each_entry(metric_evlist, evsel)
 				evsel->default_metricgroup = true;
 
-			evlist__splice_list_tail(evlist, &metric_evlist->core.entries);
+			evlist__splice_list_tail(evlist, &evlist__core(metric_evlist)->entries);
 			metricgroup__copy_metric_events(evlist, /*cgrp=*/NULL,
-							&evlist->metric_events,
-							&metric_evlist->metric_events);
+							evlist__metric_events(evlist),
+							evlist__metric_events(metric_evlist));
 			evlist__put(metric_evlist);
 		}
-		list_sort(/*priv=*/NULL, &evlist->core.entries, default_evlist_evsel_cmp);
+		list_sort(/*priv=*/NULL, &evlist__core(evlist)->entries, default_evlist_evsel_cmp);
 
 	}
 out:
@@ -2148,10 +2152,10 @@ static int add_default_events(void)
 		}
 	}
 	parse_events_error__exit(&err);
-	evlist__splice_list_tail(evsel_list, &evlist->core.entries);
+	evlist__splice_list_tail(evsel_list, &evlist__core(evlist)->entries);
 	metricgroup__copy_metric_events(evsel_list, /*cgrp=*/NULL,
-					&evsel_list->metric_events,
-					&evlist->metric_events);
+					evlist__metric_events(evsel_list),
+					evlist__metric_events(evlist));
 	evlist__put(evlist);
 	return ret;
 }
@@ -2272,7 +2276,7 @@ static int set_maps(struct perf_stat *st)
 	if (WARN_ONCE(st->maps_allocated, "stats double allocation\n"))
 		return -EINVAL;
 
-	perf_evlist__set_maps(&evsel_list->core, st->cpus, st->threads);
+	perf_evlist__set_maps(evlist__core(evsel_list), st->cpus, st->threads);
 
 	if (evlist__alloc_stats(&stat_config, evsel_list, /*alloc_raw=*/true))
 		return -ENOMEM;
@@ -2424,7 +2428,7 @@ static void setup_system_wide(int forks)
 			}
 		}
 
-		if (evsel_list->core.nr_entries)
+		if (evlist__nr_entries(evsel_list))
 			target.system_wide = true;
 	}
 }
@@ -2651,7 +2655,7 @@ int cmd_stat(int argc, const char **argv)
 		stat_config.csv_sep = DEFAULT_SEPARATOR;
 
 	if (affinity_set)
-		evsel_list->no_affinity = !affinity;
+		evlist__set_no_affinity(evsel_list, !affinity);
 
 	if (argc && strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
 		argc = __cmd_record(stat_options, &opt_mode, argc, argv);
@@ -2818,7 +2822,7 @@ int cmd_stat(int argc, const char **argv)
 	}
 
 	if (stat_config.iostat_run) {
-		status = iostat_prepare(evsel_list, &stat_config);
+		status = iostat_prepare(&evsel_list, &stat_config);
 		if (status)
 			goto out;
 		if (iostat_mode == IOSTAT_LIST) {
@@ -2882,9 +2886,10 @@ int cmd_stat(int argc, const char **argv)
 	}
 #ifdef HAVE_BPF_SKEL
 	if (target.use_bpf && nr_cgroups &&
-	    (evsel_list->core.nr_entries / nr_cgroups) > BPERF_CGROUP__MAX_EVENTS) {
+	    (evlist__nr_entries(evsel_list) / nr_cgroups) > BPERF_CGROUP__MAX_EVENTS) {
 		pr_warning("Disabling BPF counters due to more events (%d) than the max (%d)\n",
-			   evsel_list->core.nr_entries / nr_cgroups, BPERF_CGROUP__MAX_EVENTS);
+			   evlist__nr_entries(evsel_list) / nr_cgroups,
+			   BPERF_CGROUP__MAX_EVENTS);
 		target.use_bpf = false;
 	}
 #endif // HAVE_BPF_SKEL
@@ -2922,7 +2927,7 @@ int cmd_stat(int argc, const char **argv)
 	 * so we could print it out on output.
 	 */
 	if (stat_config.aggr_mode == AGGR_THREAD) {
-		thread_map__read_comms(evsel_list->core.threads);
+		thread_map__read_comms(evlist__core(evsel_list)->threads);
 	}
 
 	if (stat_config.aggr_mode == AGGR_NODE)
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index ff24ae35c67fc..5933c46ee137e 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -141,7 +141,7 @@ static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
 	notes = symbol__annotation(sym);
 	annotation__lock(notes);
 
-	if (!symbol__hists(sym, top->evlist->core.nr_entries)) {
+	if (!symbol__hists(sym, evlist__nr_entries(top->evlist))) {
 		annotation__unlock(notes);
 		pr_err("Not enough memory for annotating '%s' symbol!\n",
 		       sym->name);
@@ -267,7 +267,7 @@ static void perf_top__show_details(struct perf_top *top)
 
 	more = hist_entry__annotate_printf(he, top->sym_evsel);
 
-	if (top->evlist->enabled) {
+	if (evlist__enabled(top->evlist)) {
 		if (top->zero)
 			symbol__annotate_zero_histogram(symbol, top->sym_evsel);
 		else
@@ -293,7 +293,7 @@ static void perf_top__resort_hists(struct perf_top *t)
 		 */
 		hists__unlink(hists);
 
-		if (evlist->enabled) {
+		if (evlist__enabled(evlist)) {
 			if (t->zero) {
 				hists__delete_entries(hists);
 			} else {
@@ -334,13 +334,13 @@ static void perf_top__print_sym_table(struct perf_top *top)
 	printf("%-*.*s\n", win_width, win_width, graph_dotted_line);
 
 	if (!top->record_opts.overwrite &&
-	    (top->evlist->stats.nr_lost_warned !=
-	     top->evlist->stats.nr_events[PERF_RECORD_LOST])) {
-		top->evlist->stats.nr_lost_warned =
-			      top->evlist->stats.nr_events[PERF_RECORD_LOST];
+	    (evlist__stats(top->evlist)->nr_lost_warned !=
+	     evlist__stats(top->evlist)->nr_events[PERF_RECORD_LOST])) {
+		evlist__stats(top->evlist)->nr_lost_warned =
+			      evlist__stats(top->evlist)->nr_events[PERF_RECORD_LOST];
 		color_fprintf(stdout, PERF_COLOR_RED,
 			      "WARNING: LOST %d chunks, Check IO/CPU overload",
-			      top->evlist->stats.nr_lost_warned);
+			      evlist__stats(top->evlist)->nr_lost_warned);
 		++printed;
 	}
 
@@ -447,7 +447,7 @@ static void perf_top__print_mapped_keys(struct perf_top *top)
 	fprintf(stdout, "\t[d]     display refresh delay.             \t(%d)\n", top->delay_secs);
 	fprintf(stdout, "\t[e]     display entries (lines).           \t(%d)\n", top->print_entries);
 
-	if (top->evlist->core.nr_entries > 1)
+	if (evlist__nr_entries(top->evlist) > 1)
 		fprintf(stdout, "\t[E]     active event counter.              \t(%s)\n", evsel__name(top->sym_evsel));
 
 	fprintf(stdout, "\t[f]     profile display filter (count).    \t(%d)\n", top->count_filter);
@@ -482,7 +482,7 @@ static int perf_top__key_mapped(struct perf_top *top, int c)
 		case 'S':
 			return 1;
 		case 'E':
-			return top->evlist->core.nr_entries > 1 ? 1 : 0;
+			return evlist__nr_entries(top->evlist) > 1 ? 1 : 0;
 		default:
 			break;
 	}
@@ -528,7 +528,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
 			}
 			break;
 		case 'E':
-			if (top->evlist->core.nr_entries > 1) {
+			if (evlist__nr_entries(top->evlist) > 1) {
 				/* Select 0 as the default event: */
 				int counter = 0;
 
@@ -539,7 +539,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
 
 				prompt_integer(&counter, "Enter details event counter");
 
-				if (counter >= top->evlist->core.nr_entries) {
+				if (counter >= evlist__nr_entries(top->evlist)) {
 					top->sym_evsel = evlist__first(top->evlist);
 					fprintf(stderr, "Sorry, no such event, using %s.\n", evsel__name(top->sym_evsel));
 					sleep(1);
@@ -598,8 +598,8 @@ static void perf_top__sort_new_samples(void *arg)
 {
 	struct perf_top *t = arg;
 
-	if (t->evlist->selected != NULL)
-		t->sym_evsel = t->evlist->selected;
+	if (evlist__selected(t->evlist) != NULL)
+		t->sym_evsel = evlist__selected(t->evlist);
 
 	perf_top__resort_hists(t);
 
@@ -766,7 +766,7 @@ static void perf_event__process_sample(const struct perf_tool *tool,
 
 	if (!machine) {
 		pr_err("%u unprocessable samples recorded.\r",
-		       top->session->evlist->stats.nr_unprocessable_samples++);
+		       evlist__stats(top->session->evlist)->nr_unprocessable_samples++);
 		return;
 	}
 
@@ -859,7 +859,7 @@ perf_top__process_lost(struct perf_top *top, union perf_event *event,
 {
 	top->lost += event->lost.lost;
 	top->lost_total += event->lost.lost;
-	evsel->evlist->stats.total_lost += event->lost.lost;
+	evlist__stats(evsel->evlist)->total_lost += event->lost.lost;
 }
 
 static void
@@ -869,7 +869,7 @@ perf_top__process_lost_samples(struct perf_top *top,
 {
 	top->lost += event->lost_samples.lost;
 	top->lost_total += event->lost_samples.lost;
-	evsel->evlist->stats.total_lost_samples += event->lost_samples.lost;
+	evlist__stats(evsel->evlist)->total_lost_samples += event->lost_samples.lost;
 }
 
 static u64 last_timestamp;
@@ -881,7 +881,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
 	struct mmap *md;
 	union perf_event *event;
 
-	md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx];
+	md = opts->overwrite ? &evlist__overwrite_mmap(evlist)[idx] : &evlist__mmap(evlist)[idx];
 	if (perf_mmap__read_init(&md->core) < 0)
 		return;
 
@@ -918,7 +918,7 @@ static void perf_top__mmap_read(struct perf_top *top)
 	if (overwrite)
 		evlist__toggle_bkw_mmap(evlist, BKW_MMAP_DATA_PENDING);
 
-	for (i = 0; i < top->evlist->core.nr_mmaps; i++)
+	for (i = 0; i < evlist__core(top->evlist)->nr_mmaps; i++)
 		perf_top__mmap_read_idx(top, i);
 
 	if (overwrite) {
@@ -1063,7 +1063,7 @@ static int perf_top__start_counters(struct perf_top *top)
 		goto out_err;
 	}
 
-	if (evlist__mmap(evlist, opts->mmap_pages) < 0) {
+	if (evlist__do_mmap(evlist, opts->mmap_pages) < 0) {
 		ui__error("Failed to mmap with %d (%s)\n",
 			    errno, str_error_r(errno, msg, sizeof(msg)));
 		goto out_err;
@@ -1218,10 +1218,10 @@ static int deliver_event(struct ordered_events *qe,
 	} else if (event->header.type == PERF_RECORD_LOST_SAMPLES) {
 		perf_top__process_lost_samples(top, event, evsel);
 	} else if (event->header.type < PERF_RECORD_MAX) {
-		events_stats__inc(&session->evlist->stats, event->header.type);
+		events_stats__inc(evlist__stats(session->evlist), event->header.type);
 		machine__process_event(machine, event, &sample);
 	} else
-		++session->evlist->stats.nr_unknown_events;
+		++evlist__stats(session->evlist)->nr_unknown_events;
 
 	ret = 0;
 next_event:
@@ -1296,7 +1296,7 @@ static int __cmd_top(struct perf_top *top)
 		pr_debug("Couldn't synthesize cgroup events.\n");
 
 	machine__synthesize_threads(&top->session->machines.host, &opts->target,
-				    top->evlist->core.threads, true, false,
+				    evlist__core(top->evlist)->threads, true, false,
 				    top->nr_threads_synthesize);
 
 	perf_set_multithreaded();
@@ -1714,13 +1714,13 @@ int cmd_top(int argc, const char **argv)
 	if (target__none(target))
 		target->system_wide = true;
 
-	if (!top.evlist->core.nr_entries) {
+	if (!evlist__nr_entries(top.evlist)) {
 		struct evlist *def_evlist = evlist__new_default(target, callchain_param.enabled);
 
 		if (!def_evlist)
 			goto out_put_evlist;
 
-		evlist__splice_list_tail(top.evlist, &def_evlist->core.entries);
+		evlist__splice_list_tail(top.evlist, &evlist__core(def_evlist)->entries);
 		evlist__put(def_evlist);
 	}
 
@@ -1797,7 +1797,7 @@ int cmd_top(int argc, const char **argv)
 		top.session = NULL;
 		goto out_put_evlist;
 	}
-	top.evlist->session = top.session;
+	evlist__set_session(top.evlist, top.session);
 
 	if (setup_sorting(top.evlist, perf_session__env(top.session)) < 0) {
 		if (sort_order)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 496863e825023..b605bd7e519e1 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2023,7 +2023,7 @@ static int trace__symbols_init(struct trace *trace, int argc, const char **argv,
 		goto out;
 
 	err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
-					    evlist->core.threads, trace__tool_process,
+					    evlist__core(evlist)->threads, trace__tool_process,
 					    /*needs_mmap=*/callchain_param.enabled &&
 							   !trace->summary_only,
 					    /*mmap_data=*/false,
@@ -4216,7 +4216,7 @@ static int trace__set_filter_pids(struct trace *trace)
 			err = augmented_syscalls__set_filter_pids(trace->filter_pids.nr,
 						       trace->filter_pids.entries);
 		}
-	} else if (perf_thread_map__pid(trace->evlist->core.threads, 0) == -1) {
+	} else if (perf_thread_map__pid(evlist__core(trace->evlist)->threads, 0) == -1) {
 		err = trace__set_filter_loop_pids(trace);
 	}
 
@@ -4530,7 +4530,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 			fprintf(trace->output, "Couldn't run the workload!\n");
 			goto out_put_evlist;
 		}
-		workload_pid = evlist->workload.pid;
+		workload_pid = evlist__workload_pid(evlist);
 	}
 
 	err = evlist__open(evlist);
@@ -4582,7 +4582,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 		goto out_error_apply_filters;
 
 	if (!trace->summary_only || !trace->summary_bpf) {
-		err = evlist__mmap(evlist, trace->opts.mmap_pages);
+		err = evlist__do_mmap(evlist, trace->opts.mmap_pages);
 		if (err < 0)
 			goto out_error_mmap;
 	}
@@ -4601,8 +4601,8 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 	if (trace->summary_bpf)
 		trace_start_bpf_summary();
 
-	trace->multiple_threads = perf_thread_map__pid(evlist->core.threads, 0) == -1 ||
-		perf_thread_map__nr(evlist->core.threads) > 1 ||
+	trace->multiple_threads = perf_thread_map__pid(evlist__core(evlist)->threads, 0) == -1 ||
+		perf_thread_map__nr(evlist__core(evlist)->threads) > 1 ||
 		evlist__first(evlist)->core.attr.inherit;
 
 	/*
@@ -4619,11 +4619,11 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 again:
 	before = trace->nr_events;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
 		union perf_event *event;
 		struct mmap *md;
 
-		md = &evlist->mmap[i];
+		md = &evlist__mmap(evlist)[i];
 		if (perf_mmap__read_init(&md->core) < 0)
 			continue;
 
@@ -5325,7 +5325,7 @@ static int trace__parse_cgroups(const struct option *opt, const char *str, int u
 {
 	struct trace *trace = opt->value;
 
-	if (!list_empty(&trace->evlist->core.entries)) {
+	if (!list_empty(&evlist__core(trace->evlist)->entries)) {
 		struct option o = {
 			.value = &trace->evlist,
 		};
@@ -5599,7 +5599,7 @@ int cmd_trace(int argc, const char **argv)
 	 * .perfconfig trace.add_events, and filter those out.
 	 */
 	if (!trace.trace_syscalls && !trace.trace_pgfaults &&
-	    trace.evlist->core.nr_entries == 0 /* Was --events used? */) {
+	    evlist__nr_entries(trace.evlist) == 0 /* Was --events used? */) {
 		trace.trace_syscalls = true;
 	}
 	/*
@@ -5685,7 +5685,7 @@ int cmd_trace(int argc, const char **argv)
 		symbol_conf.use_callchain = true;
 	}
 
-	if (trace.evlist->core.nr_entries > 0) {
+	if (evlist__nr_entries(trace.evlist) > 0) {
 		bool use_btf = false;
 
 		evlist__set_default_evsel_handler(trace.evlist, trace__event_handler);
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c
index 2b49b002d749e..2735cc26d7eec 100644
--- a/tools/perf/tests/backward-ring-buffer.c
+++ b/tools/perf/tests/backward-ring-buffer.c
@@ -34,8 +34,8 @@ static int count_samples(struct evlist *evlist, int *sample_count,
 {
 	int i;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		struct mmap *map = &evlist->overwrite_mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		struct mmap *map = &evlist__overwrite_mmap(evlist)[i];
 		union perf_event *event;
 
 		perf_mmap__read_init(&map->core);
@@ -65,7 +65,7 @@ static int do_test(struct evlist *evlist, int mmap_pages,
 	int err;
 	char sbuf[STRERR_BUFSIZE];
 
-	err = evlist__mmap(evlist, mmap_pages);
+	err = evlist__do_mmap(evlist, mmap_pages);
 	if (err < 0) {
 		pr_debug("evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
@@ -77,7 +77,7 @@ static int do_test(struct evlist *evlist, int mmap_pages,
 	evlist__disable(evlist);
 
 	err = count_samples(evlist, sample_count, comm_count);
-	evlist__munmap(evlist);
+	evlist__do_munmap(evlist);
 	return err;
 }
 
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 3c88b7e8387a5..f0e8ea8754ef5 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -592,8 +592,8 @@ static int process_events(struct machine *machine, struct evlist *evlist,
 	struct mmap *md;
 	int i, ret;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		md = &evlist->mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		md = &evlist__mmap(evlist)[i];
 		if (perf_mmap__read_init(&md->core) < 0)
 			continue;
 
@@ -781,7 +781,7 @@ static int do_test_code_reading(bool try_kcore)
 			goto out_put;
 		}
 
-		perf_evlist__set_maps(&evlist->core, cpus, threads);
+		perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 		str = events[evidx];
 		pr_debug("Parsing event '%s'\n", str);
@@ -809,7 +809,7 @@ static int do_test_code_reading(bool try_kcore)
 				pr_debug("perf_evlist__open() failed!\n%s\n", errbuf);
 			}
 
-			perf_evlist__set_maps(&evlist->core, NULL, NULL);
+			perf_evlist__set_maps(evlist__core(evlist), NULL, NULL);
 			evlist__put(evlist);
 			evlist = NULL;
 			continue;
@@ -820,7 +820,7 @@ static int do_test_code_reading(bool try_kcore)
 	if (events[evidx] == NULL)
 		goto out_put;
 
-	ret = evlist__mmap(evlist, UINT_MAX);
+	ret = evlist__do_mmap(evlist, UINT_MAX);
 	if (ret < 0) {
 		pr_debug("evlist__mmap failed\n");
 		goto out_put;
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
index 94ab54ecd3f92..56dd37ca760ec 100644
--- a/tools/perf/tests/event-times.c
+++ b/tools/perf/tests/event-times.c
@@ -50,7 +50,7 @@ static int attach__enable_on_exec(struct evlist *evlist)
 
 static int detach__enable_on_exec(struct evlist *evlist)
 {
-	waitpid(evlist->workload.pid, NULL, 0);
+	waitpid(evlist__workload_pid(evlist), NULL, 0);
 	return 0;
 }
 
diff --git a/tools/perf/tests/event_update.c b/tools/perf/tests/event_update.c
index 73141b122d2fc..220cc0347747d 100644
--- a/tools/perf/tests/event_update.c
+++ b/tools/perf/tests/event_update.c
@@ -92,7 +92,7 @@ static int test__event_update(struct test_suite *test __maybe_unused, int subtes
 	TEST_ASSERT_VAL("failed to allocate ids",
 			!perf_evsel__alloc_id(&evsel->core, 1, 1));
 
-	perf_evlist__id_add(&evlist->core, &evsel->core, 0, 0, 123);
+	perf_evlist__id_add(evlist__core(evlist), &evsel->core, 0, 0, 123);
 
 	free((char *)evsel->unit);
 	evsel->unit = strdup("KRAVA");
diff --git a/tools/perf/tests/expand-cgroup.c b/tools/perf/tests/expand-cgroup.c
index a7a445f126935..549fbd473ab74 100644
--- a/tools/perf/tests/expand-cgroup.c
+++ b/tools/perf/tests/expand-cgroup.c
@@ -28,7 +28,7 @@ static int test_expand_events(struct evlist *evlist)
 
 	TEST_ASSERT_VAL("evlist is empty", !evlist__empty(evlist));
 
-	nr_events = evlist->core.nr_entries;
+	nr_events = evlist__nr_entries(evlist);
 	ev_name = calloc(nr_events, sizeof(*ev_name));
 	if (ev_name == NULL) {
 		pr_debug("memory allocation failure\n");
@@ -54,7 +54,7 @@ static int test_expand_events(struct evlist *evlist)
 	}
 
 	ret = TEST_FAIL;
-	if (evlist->core.nr_entries != nr_events * nr_cgrps) {
+	if (evlist__nr_entries(evlist) != nr_events * nr_cgrps) {
 		pr_debug("event count doesn't match\n");
 		goto out;
 	}
diff --git a/tools/perf/tests/hwmon_pmu.c b/tools/perf/tests/hwmon_pmu.c
index 9e89051e7fdc4..e26b3fe3fab15 100644
--- a/tools/perf/tests/hwmon_pmu.c
+++ b/tools/perf/tests/hwmon_pmu.c
@@ -184,9 +184,10 @@ static int do_test(size_t i, bool with_pmu, bool with_alias)
 	}
 
 	ret = TEST_OK;
-	if (with_pmu ? (evlist->core.nr_entries != 1) : (evlist->core.nr_entries < 1)) {
+	if (with_pmu ? (evlist__nr_entries(evlist) != 1)
+		     : (evlist__nr_entries(evlist) < 1)) {
 		pr_debug("FAILED %s:%d Unexpected number of events for '%s' of %d\n",
-			 __FILE__, __LINE__, str, evlist->core.nr_entries);
+			 __FILE__, __LINE__, str, evlist__nr_entries(evlist));
 		ret = TEST_FAIL;
 		goto out;
 	}
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c
index 51cfd65228676..b760041bed307 100644
--- a/tools/perf/tests/keep-tracking.c
+++ b/tools/perf/tests/keep-tracking.c
@@ -37,8 +37,8 @@ static int find_comm(struct evlist *evlist, const char *comm)
 	int i, found;
 
 	found = 0;
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		md = &evlist->mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		md = &evlist__mmap(evlist)[i];
 		if (perf_mmap__read_init(&md->core) < 0)
 			continue;
 		while ((event = perf_mmap__read_event(&md->core)) != NULL) {
@@ -87,7 +87,7 @@ static int test__keep_tracking(struct test_suite *test __maybe_unused, int subte
 	evlist = evlist__new();
 	CHECK_NOT_NULL__(evlist);
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	CHECK__(parse_event(evlist, "dummy:u"));
 	CHECK__(parse_event(evlist, "cpu-cycles:u"));
@@ -106,7 +106,7 @@ static int test__keep_tracking(struct test_suite *test __maybe_unused, int subte
 		goto out_err;
 	}
 
-	CHECK__(evlist__mmap(evlist, UINT_MAX));
+	CHECK__(evlist__do_mmap(evlist, UINT_MAX));
 
 	/*
 	 * First, test that a 'comm' event can be found when the event is
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
index 5ff58eb2af8de..5cec7644952c7 100644
--- a/tools/perf/tests/mmap-basic.c
+++ b/tools/perf/tests/mmap-basic.c
@@ -81,7 +81,7 @@ static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest
 		goto out_free_cpus;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	for (i = 0; i < nsyscalls; ++i) {
 		char name[64];
@@ -113,7 +113,7 @@ static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest
 		expected_nr_events[i] = 1 + rand() % 127;
 	}
 
-	if (evlist__mmap(evlist, 128) < 0) {
+	if (evlist__do_mmap(evlist, 128) < 0) {
 		pr_debug("failed to mmap events: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
 		goto out_put_evlist;
@@ -124,7 +124,7 @@ static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest
 			syscalls[i]();
 		}
 
-	md = &evlist->mmap[0];
+	md = &evlist__mmap(evlist)[0];
 	if (perf_mmap__read_init(&md->core) < 0)
 		goto out_init;
 
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index b30f286fb421c..5365889d326f8 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -64,7 +64,7 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
 
 	evsel__config(evsel, &opts, NULL);
 
-	perf_thread_map__set_pid(evlist->core.threads, 0, getpid());
+	perf_thread_map__set_pid(evlist__core(evlist)->threads, 0, getpid());
 
 	err = evlist__open(evlist);
 	if (err < 0) {
@@ -73,7 +73,7 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
 		goto out_put_evlist;
 	}
 
-	err = evlist__mmap(evlist, UINT_MAX);
+	err = evlist__do_mmap(evlist, UINT_MAX);
 	if (err < 0) {
 		pr_debug("evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
@@ -90,11 +90,11 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
 	while (1) {
 		int before = nr_events;
 
-		for (i = 0; i < evlist->core.nr_mmaps; i++) {
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
 			union perf_event *event;
 			struct mmap *md;
 
-			md = &evlist->mmap[i];
+			md = &evlist__mmap(evlist)[i];
 			if (perf_mmap__read_init(&md->core) < 0)
 				continue;
 
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
index 19dc7b7475d2d..0ad0273da923a 100644
--- a/tools/perf/tests/parse-events.c
+++ b/tools/perf/tests/parse-events.c
@@ -109,7 +109,7 @@ static int test__checkevent_tracepoint(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups", 0 == evlist__nr_groups(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong sample_type",
@@ -122,7 +122,7 @@ static int test__checkevent_tracepoint_multi(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", evlist->core.nr_entries > 1, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", evlist__nr_entries(evlist) > 1, evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups", 0 == evlist__nr_groups(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
@@ -144,7 +144,7 @@ static int test__checkevent_raw(struct evlist *evlist)
 	struct evsel *evsel;
 	bool raw_type_match = false;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		struct perf_pmu *pmu __maybe_unused = NULL;
@@ -182,7 +182,7 @@ static int test__checkevent_numeric(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", 1 == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 1 == evsel->core.attr.config, evsel);
 	return TEST_OK;
@@ -193,7 +193,7 @@ static int test__checkevent_symbolic_name(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("unexpected event",
@@ -207,7 +207,7 @@ static int test__checkevent_symbolic_name_config(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("unexpected event",
@@ -228,7 +228,7 @@ static int test__checkevent_symbolic_alias(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type/config", evsel__match(evsel, SOFTWARE, SW_PAGE_FAULTS),
 			  evsel);
 	return TEST_OK;
@@ -238,7 +238,7 @@ static int test__checkevent_genhw(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 0 != evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type, evsel);
@@ -251,7 +251,7 @@ static int test__checkevent_breakpoint(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type",
@@ -265,7 +265,7 @@ static int test__checkevent_breakpoint_x(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type", HW_BREAKPOINT_X == evsel->core.attr.bp_type, evsel);
@@ -278,7 +278,7 @@ static int test__checkevent_breakpoint_r(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type", HW_BREAKPOINT_R == evsel->core.attr.bp_type, evsel);
@@ -290,7 +290,7 @@ static int test__checkevent_breakpoint_w(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type", HW_BREAKPOINT_W == evsel->core.attr.bp_type, evsel);
@@ -302,7 +302,7 @@ static int test__checkevent_breakpoint_rw(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type",
@@ -316,7 +316,7 @@ static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong exclude_user", evsel->core.attr.exclude_user, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_hv", evsel->core.attr.exclude_hv, evsel);
@@ -330,7 +330,7 @@ test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", evlist->core.nr_entries > 1, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", evlist__nr_entries(evlist) > 1, evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("wrong exclude_user", !evsel->core.attr.exclude_user, evsel);
@@ -346,7 +346,7 @@ static int test__checkevent_raw_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("wrong exclude_user", evsel->core.attr.exclude_user, evsel);
@@ -361,7 +361,7 @@ static int test__checkevent_numeric_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("wrong exclude_user", evsel->core.attr.exclude_user, evsel);
@@ -377,7 +377,7 @@ static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
 	struct evsel *evsel;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
@@ -394,7 +394,7 @@ static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
 	struct evsel *evsel;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
@@ -409,7 +409,7 @@ static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
 	struct evsel *evsel;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
@@ -423,7 +423,8 @@ static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries",
+			   1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong exclude_user", !evsel->core.attr.exclude_user, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_kernel", evsel->core.attr.exclude_kernel, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_hv", evsel->core.attr.exclude_hv, evsel);
@@ -437,7 +438,7 @@ static int test__checkevent_genhw_modifier(struct evlist *evlist)
 	struct evsel *evsel;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
@@ -454,7 +455,7 @@ static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	TEST_ASSERT_EVSEL("wrong exclude idle", evsel->core.attr.exclude_idle, evsel);
@@ -473,7 +474,7 @@ static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	TEST_ASSERT_EVSEL("wrong exclude idle", evsel->core.attr.exclude_idle, evsel);
@@ -622,7 +623,7 @@ static int test__checkevent_breakpoint_2_events(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVSEL("wrong number of entries", 2 == evlist->core.nr_entries, evsel);
+	TEST_ASSERT_EVSEL("wrong number of entries", 2 == evlist__nr_entries(evlist), evsel);
 
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong name", evsel__name_is(evsel, "breakpoint1"), evsel);
@@ -641,7 +642,7 @@ static int test__checkevent_pmu(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 	struct perf_pmu *core_pmu = perf_pmus__find_core_pmu();
 
-	TEST_ASSERT_EVSEL("wrong number of entries", 1 == evlist->core.nr_entries, evsel);
+	TEST_ASSERT_EVSEL("wrong number of entries", 1 == evlist__nr_entries(evlist), evsel);
 	TEST_ASSERT_EVSEL("wrong type", core_pmu->type == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config",    test_hw_config(evsel, 10), evsel);
 	TEST_ASSERT_EVSEL("wrong config1",    1 == evsel->core.attr.config1, evsel);
@@ -661,7 +662,7 @@ static int test__checkevent_list(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVSEL("wrong number of entries", 3 <= evlist->core.nr_entries, evsel);
+	TEST_ASSERT_EVSEL("wrong number of entries", 3 <= evlist__nr_entries(evlist), evsel);
 
 	/* r1 */
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type, evsel);
@@ -707,14 +708,15 @@ static int test__checkevent_pmu_name(struct evlist *evlist)
 	char buf[256];
 
 	/* default_core/config=1,name=krava/u */
-	TEST_ASSERT_EVLIST("wrong number of entries", 2 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries",
+			   2 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", core_pmu->type == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 1 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong name", evsel__name_is(evsel, "krava"), evsel);
 
 	/* default_core/config=2/u" */
 	evsel = evsel__next(evsel);
-	TEST_ASSERT_EVSEL("wrong number of entries", 2 == evlist->core.nr_entries, evsel);
+	TEST_ASSERT_EVSEL("wrong number of entries", 2 == evlist__nr_entries(evlist), evsel);
 	TEST_ASSERT_EVSEL("wrong type", core_pmu->type == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 2 == evsel->core.attr.config, evsel);
 	snprintf(buf, sizeof(buf), "%s/config=2/u", core_pmu->name);
@@ -729,7 +731,8 @@ static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
 	struct perf_pmu *core_pmu = perf_pmus__find_core_pmu();
 
 	/* default_core/config=1,call-graph=fp,time,period=100000/ */
-	TEST_ASSERT_EVLIST("wrong number of entries", 2 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries",
+			   2 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", core_pmu->type == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 1 == evsel->core.attr.config, evsel);
 	/*
@@ -760,7 +763,7 @@ static int test__checkevent_pmu_events(struct evlist *evlist)
 	struct evsel *evsel;
 	struct perf_pmu *core_pmu = perf_pmus__find_core_pmu();
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 <= evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 <= evlist__nr_entries(evlist), evlist);
 
 	evlist__for_each_entry(evlist, evsel) {
 		TEST_ASSERT_EVSEL("wrong type",
@@ -787,8 +790,9 @@ static int test__checkevent_pmu_events_mix(struct evlist *evlist)
 	 * The wild card event will be opened at least once, but it may be
 	 * opened on each core PMU.
 	 */
-	TEST_ASSERT_EVLIST("wrong number of entries", evlist->core.nr_entries >= 2, evlist);
-	for (int i = 0; i < evlist->core.nr_entries - 1; i++) {
+	TEST_ASSERT_EVLIST("wrong number of entries",
+			   evlist__nr_entries(evlist) >= 2, evlist);
+	for (int i = 0; i < evlist__nr_entries(evlist) - 1; i++) {
 		evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
 		/* pmu-event:u */
 		TEST_ASSERT_EVSEL("wrong exclude_user", !evsel->core.attr.exclude_user, evsel);
@@ -905,7 +909,7 @@ static int test__group1(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (num_core_entries(evlist) * 2),
+			   evlist__nr_entries(evlist) == (num_core_entries(evlist) * 2),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == num_core_entries(evlist),
@@ -950,7 +954,7 @@ static int test__group2(struct evlist *evlist)
 	struct evsel *evsel, *leader = NULL;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist) + 1),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist) + 1),
 			   evlist);
 	/*
 	 * TODO: Currently the software event won't be grouped with the hardware
@@ -1018,7 +1022,7 @@ static int test__group3(struct evlist *evlist __maybe_unused)
 	struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2),
+			   evlist__nr_entries(evlist) == (3 * perf_pmus__num_core_pmus() + 2),
 			   evlist);
 	/*
 	 * Currently the software event won't be grouped with the hardware event
@@ -1144,7 +1148,7 @@ static int test__group4(struct evlist *evlist __maybe_unused)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (num_core_entries(evlist) * 2),
+			   evlist__nr_entries(evlist) == (num_core_entries(evlist) * 2),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   num_core_entries(evlist) == evlist__nr_groups(evlist),
@@ -1191,7 +1195,7 @@ static int test__group5(struct evlist *evlist __maybe_unused)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (5 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (5 * num_core_entries(evlist)),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == (2 * num_core_entries(evlist)),
@@ -1284,7 +1288,7 @@ static int test__group_gh1(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist)),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == num_core_entries(evlist),
@@ -1329,7 +1333,7 @@ static int test__group_gh2(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist)),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == num_core_entries(evlist),
@@ -1374,7 +1378,7 @@ static int test__group_gh3(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist)),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == num_core_entries(evlist),
@@ -1419,7 +1423,7 @@ static int test__group_gh4(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist)),
 			   evlist);
 	TEST_ASSERT_EVLIST("wrong number of groups",
 			   evlist__nr_groups(evlist) == num_core_entries(evlist),
@@ -1464,7 +1468,7 @@ static int test__leader_sample1(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (3 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (3 * num_core_entries(evlist)),
 			   evlist);
 
 	for (int i = 0; i < num_core_entries(evlist); i++) {
@@ -1520,7 +1524,7 @@ static int test__leader_sample2(struct evlist *evlist __maybe_unused)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (2 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (2 * num_core_entries(evlist)),
 			   evlist);
 
 	for (int i = 0; i < num_core_entries(evlist); i++) {
@@ -1562,7 +1566,7 @@ static int test__checkevent_pinned_modifier(struct evlist *evlist)
 	struct evsel *evsel = NULL;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 
 	for (int i = 0; i < num_core_entries(evlist); i++) {
@@ -1581,7 +1585,7 @@ static int test__pinned_group(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == (3 * num_core_entries(evlist)),
+			   evlist__nr_entries(evlist) == (3 * num_core_entries(evlist)),
 			   evlist);
 
 	for (int i = 0; i < num_core_entries(evlist); i++) {
@@ -1618,7 +1622,7 @@ static int test__checkevent_exclusive_modifier(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("wrong exclude_user", !evsel->core.attr.exclude_user, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_kernel", evsel->core.attr.exclude_kernel, evsel);
@@ -1634,7 +1638,7 @@ static int test__exclusive_group(struct evlist *evlist)
 	struct evsel *evsel = NULL, *leader;
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == 3 * num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == 3 * num_core_entries(evlist),
 			   evlist);
 
 	for (int i = 0; i < num_core_entries(evlist); i++) {
@@ -1669,7 +1673,7 @@ static int test__checkevent_breakpoint_len(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type",
@@ -1684,7 +1688,7 @@ static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0 == evsel->core.attr.config, evsel);
 	TEST_ASSERT_EVSEL("wrong bp_type", HW_BREAKPOINT_W == evsel->core.attr.bp_type, evsel);
@@ -1698,7 +1702,7 @@ test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong exclude_user", !evsel->core.attr.exclude_user, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_kernel", evsel->core.attr.exclude_kernel, evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_hv", evsel->core.attr.exclude_hv, evsel);
@@ -1712,7 +1716,7 @@ static int test__checkevent_precise_max_modifier(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == 1 + num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == 1 + num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("wrong type/config", evsel__match(evsel, SOFTWARE, SW_TASK_CLOCK), evsel);
 	return TEST_OK;
@@ -1723,7 +1727,7 @@ static int test__checkevent_config_symbol(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("wrong name setting", evsel__name_is(evsel, "insn"), evsel);
 	return TEST_OK;
@@ -1733,7 +1737,7 @@ static int test__checkevent_config_raw(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong name setting", evsel__name_is(evsel, "rawpmu"), evsel);
 	return TEST_OK;
 }
@@ -1742,7 +1746,7 @@ static int test__checkevent_config_num(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong name setting", evsel__name_is(evsel, "numpmu"), evsel);
 	return TEST_OK;
 }
@@ -1752,7 +1756,7 @@ static int test__checkevent_config_cache(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("wrong name setting", evsel__name_is(evsel, "cachepmu"), evsel);
 	return test__checkevent_genhw(evlist);
@@ -1777,7 +1781,7 @@ static int test__intel_pt(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"), evsel);
 	return TEST_OK;
 }
@@ -1798,7 +1802,8 @@ static int test__ratio_to_prev(struct evlist *evlist)
 {
 	struct evsel *evsel, *leader;
 
-	TEST_ASSERT_VAL("wrong number of entries", 2 * perf_pmus__num_core_pmus() == evlist->core.nr_entries);
+	TEST_ASSERT_VAL("wrong number of entries",
+			2 * perf_pmus__num_core_pmus() == evlist__nr_entries(evlist));
 
 	evlist__for_each_entry(evlist, evsel) {
 		if (evsel != evsel__leader(evsel) ||
@@ -1842,7 +1847,7 @@ static int test__checkevent_complex_name(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("wrong complex name parsing",
 			  evsel__name_is(evsel,
@@ -1855,7 +1860,7 @@ static int test__checkevent_raw_pmu(struct evlist *evlist)
 {
 	struct evsel *evsel = evlist__first(evlist);
 
-	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist->core.nr_entries, evlist);
+	TEST_ASSERT_EVLIST("wrong number of entries", 1 == evlist__nr_entries(evlist), evlist);
 	TEST_ASSERT_EVSEL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type, evsel);
 	TEST_ASSERT_EVSEL("wrong config", 0x1a == evsel->core.attr.config, evsel);
 	return TEST_OK;
@@ -1866,7 +1871,7 @@ static int test__sym_event_slash(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("unexpected event", evsel__match(evsel, HARDWARE, HW_CPU_CYCLES), evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_kernel", evsel->core.attr.exclude_kernel, evsel);
@@ -1878,7 +1883,7 @@ static int test__sym_event_dc(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("unexpected event", evsel__match(evsel, HARDWARE, HW_CPU_CYCLES), evsel);
 	TEST_ASSERT_EVSEL("wrong exclude_user", evsel->core.attr.exclude_user, evsel);
@@ -1890,7 +1895,7 @@ static int test__term_equal_term(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("unexpected event", evsel__match(evsel, HARDWARE, HW_CPU_CYCLES), evsel);
 	TEST_ASSERT_EVSEL("wrong name setting", strcmp(evsel->name, "name") == 0, evsel);
@@ -1902,7 +1907,7 @@ static int test__term_equal_legacy(struct evlist *evlist)
 	struct evsel *evsel = evlist__first(evlist);
 
 	TEST_ASSERT_EVLIST("wrong number of entries",
-			   evlist->core.nr_entries == num_core_entries(evlist),
+			   evlist__nr_entries(evlist) == num_core_entries(evlist),
 			   evlist);
 	TEST_ASSERT_EVSEL("unexpected event", evsel__match(evsel, HARDWARE, HW_CPU_CYCLES), evsel);
 	TEST_ASSERT_EVSEL("wrong name setting", strcmp(evsel->name, "l1d") == 0, evsel);
@@ -1958,7 +1963,7 @@ static int count_tracepoints(void)
 static int test__all_tracepoints(struct evlist *evlist)
 {
 	TEST_ASSERT_VAL("wrong events count",
-			count_tracepoints() == evlist->core.nr_entries);
+			count_tracepoints() == evlist__nr_entries(evlist));
 
 	return test__checkevent_tracepoint_multi(evlist);
 }
diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c
index 3f0ec839c056a..8f9211eaf341e 100644
--- a/tools/perf/tests/parse-metric.c
+++ b/tools/perf/tests/parse-metric.c
@@ -53,7 +53,7 @@ static double compute_single(struct evlist *evlist, const char *name)
 	struct evsel *evsel;
 
 	evlist__for_each_entry(evlist, evsel) {
-		me = metricgroup__lookup(&evlist->metric_events, evsel, false);
+		me = metricgroup__lookup(evlist__metric_events(evlist), evsel, false);
 		if (me != NULL) {
 			list_for_each_entry (mexp, &me->head, nd) {
 				if (strcmp(mexp->metric_name, name))
@@ -88,7 +88,7 @@ static int __compute_metric(const char *name, struct value *vals,
 		return -ENOMEM;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, NULL);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, NULL);
 
 	/* Parse the metric into metric_events list. */
 	pme_test = find_core_metrics_table("testarch", "testcpu");
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index f95752b2ed1c0..0cac6ae1a1fc0 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -129,7 +129,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 	evsel__set_sample_bit(evsel, TIME);
 	evlist__config(evlist, &opts, NULL);
 
-	err = sched__get_first_possible_cpu(evlist->workload.pid, cpu_mask);
+	err = sched__get_first_possible_cpu(evlist__workload_pid(evlist), cpu_mask);
 	if (err < 0) {
 		pr_debug("sched__get_first_possible_cpu: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
@@ -142,7 +142,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 	/*
 	 * So that we can check perf_sample.cpu on all the samples.
 	 */
-	if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, cpu_mask) < 0) {
+	if (sched_setaffinity(evlist__workload_pid(evlist), cpu_mask_size, cpu_mask) < 0) {
 		pr_debug("sched_setaffinity: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
 		evlist__cancel_workload(evlist);
@@ -166,7 +166,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 	 * fds in the same CPU to be injected in the same mmap ring buffer
 	 * (using ioctl(PERF_EVENT_IOC_SET_OUTPUT)).
 	 */
-	err = evlist__mmap(evlist, opts.mmap_pages);
+	err = evlist__do_mmap(evlist, opts.mmap_pages);
 	if (err < 0) {
 		pr_debug("evlist__mmap: %s\n",
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
@@ -188,11 +188,11 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 	while (1) {
 		int before = total_events;
 
-		for (i = 0; i < evlist->core.nr_mmaps; i++) {
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
 			union perf_event *event;
 			struct mmap *md;
 
-			md = &evlist->mmap[i];
+			md = &evlist__mmap(evlist)[i];
 			if (perf_mmap__read_init(&md->core) < 0)
 				continue;
 
@@ -231,15 +231,15 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 					++errs;
 				}
 
-				if ((pid_t)sample.pid != evlist->workload.pid) {
+				if ((pid_t)sample.pid != evlist__workload_pid(evlist)) {
 					pr_debug("%s with unexpected pid, expected %d, got %d\n",
-						 name, evlist->workload.pid, sample.pid);
+						 name, evlist__workload_pid(evlist), sample.pid);
 					++errs;
 				}
 
-				if ((pid_t)sample.tid != evlist->workload.pid) {
+				if ((pid_t)sample.tid != evlist__workload_pid(evlist)) {
 					pr_debug("%s with unexpected tid, expected %d, got %d\n",
-						 name, evlist->workload.pid, sample.tid);
+						 name, evlist__workload_pid(evlist), sample.tid);
 					++errs;
 				}
 
@@ -248,7 +248,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 				     type == PERF_RECORD_MMAP2 ||
 				     type == PERF_RECORD_FORK ||
 				     type == PERF_RECORD_EXIT) &&
-				     (pid_t)event->comm.pid != evlist->workload.pid) {
+				     (pid_t)event->comm.pid != evlist__workload_pid(evlist)) {
 					pr_debug("%s with unexpected pid/tid\n", name);
 					++errs;
 				}
@@ -352,9 +352,9 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
 	}
 out_put_evlist:
 	CPU_FREE(cpu_mask);
-	evlist__put(evlist);
 out:
 	perf_sample__exit(&sample);
+	evlist__put(evlist);
 	if (err == -EACCES)
 		return TEST_SKIP;
 	if (err < 0 || errs != 0)
diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c
index d3538fa20af30..f8f71fdd32b1b 100644
--- a/tools/perf/tests/perf-time-to-tsc.c
+++ b/tools/perf/tests/perf-time-to-tsc.c
@@ -99,7 +99,7 @@ static int test__perf_time_to_tsc(struct test_suite *test __maybe_unused, int su
 	evlist = evlist__new();
 	CHECK_NOT_NULL__(evlist);
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	CHECK__(parse_event(evlist, "cpu-cycles:u"));
 
@@ -121,9 +121,9 @@ static int test__perf_time_to_tsc(struct test_suite *test __maybe_unused, int su
 		goto out_err;
 	}
 
-	CHECK__(evlist__mmap(evlist, UINT_MAX));
+	CHECK__(evlist__do_mmap(evlist, UINT_MAX));
 
-	pc = evlist->mmap[0].core.base;
+	pc = evlist__mmap(evlist)[0].core.base;
 	ret = perf_read_tsc_conversion(pc, &tc);
 	if (ret) {
 		if (ret == -EOPNOTSUPP) {
@@ -145,8 +145,8 @@ static int test__perf_time_to_tsc(struct test_suite *test __maybe_unused, int su
 
 	evlist__disable(evlist);
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		md = &evlist->mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		md = &evlist__mmap(evlist)[i];
 		if (perf_mmap__read_init(&md->core) < 0)
 			continue;
 
diff --git a/tools/perf/tests/pfm.c b/tools/perf/tests/pfm.c
index 8d19b1bfecbca..f7bf55be5e6ee 100644
--- a/tools/perf/tests/pfm.c
+++ b/tools/perf/tests/pfm.c
@@ -69,12 +69,12 @@ static int test__pfm_events(struct test_suite *test __maybe_unused,
 		if (evlist == NULL)
 			return -ENOMEM;
 
-		opt.value = evlist;
+		opt.value = &evlist;
 		parse_libpfm_events_option(&opt,
 					table[i].events,
 					0);
 		TEST_ASSERT_EQUAL(table[i].events,
-				count_pfm_events(&evlist->core),
+				count_pfm_events(evlist__core(evlist)),
 				table[i].nr_events);
 		TEST_ASSERT_EQUAL(table[i].events,
 				evlist__nr_groups(evlist),
@@ -154,12 +154,12 @@ static int test__pfm_group(struct test_suite *test __maybe_unused,
 		if (evlist == NULL)
 			return -ENOMEM;
 
-		opt.value = evlist;
+		opt.value = &evlist;
 		parse_libpfm_events_option(&opt,
 					table[i].events,
 					0);
 		TEST_ASSERT_EQUAL(table[i].events,
-				count_pfm_events(&evlist->core),
+				count_pfm_events(evlist__core(evlist)),
 				table[i].nr_events);
 		TEST_ASSERT_EQUAL(table[i].events,
 				evlist__nr_groups(evlist),
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
index 4ea6d392085b2..4c6fc1207b6de 100644
--- a/tools/perf/tests/pmu-events.c
+++ b/tools/perf/tests/pmu-events.c
@@ -869,7 +869,7 @@ static int test__parsing_callback(const struct pmu_metric *pm,
 		return -ENOMEM;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, NULL);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, NULL);
 
 	err = metricgroup__parse_groups_test(evlist, table, pm->metric_name);
 	if (err) {
@@ -895,7 +895,8 @@ static int test__parsing_callback(const struct pmu_metric *pm,
 		k++;
 	}
 	evlist__for_each_entry(evlist, evsel) {
-		struct metric_event *me = metricgroup__lookup(&evlist->metric_events, evsel, false);
+		struct metric_event *me = metricgroup__lookup(evlist__metric_events(evlist),
+							      evsel, false);
 
 		if (me != NULL) {
 			struct metric_expr *mexp;
diff --git a/tools/perf/tests/sample-parsing.c b/tools/perf/tests/sample-parsing.c
index 55f0b73ca20e0..20cab91ceaeb2 100644
--- a/tools/perf/tests/sample-parsing.c
+++ b/tools/perf/tests/sample-parsing.c
@@ -205,15 +205,11 @@ static bool samples_same(struct perf_sample *s1,
 
 static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 {
-	struct evsel evsel = {
-		.needs_swap = false,
-		.core = {
-			. attr = {
-				.sample_type = sample_type,
-				.read_format = read_format,
-			},
-		},
+	struct perf_event_attr attr = {
+		.sample_type = sample_type,
+		.read_format = read_format,
 	};
+	struct evsel *evsel;
 	union perf_event *event;
 	union {
 		struct ip_callchain callchain;
@@ -287,16 +283,21 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 	size_t i, sz, bufsz;
 	int err, ret = -1;
 
+	evsel = evsel__new(&attr);
+	if (!evsel) {
+		pr_debug("evsel__new failed\n");
+		return -1;
+	}
 	perf_sample__init(&sample_out, /*all=*/false);
 	perf_sample__init(&sample_out_endian, /*all=*/false);
 	if (sample_type & PERF_SAMPLE_REGS_USER)
-		evsel.core.attr.sample_regs_user = sample_regs;
+		evsel->core.attr.sample_regs_user = sample_regs;
 
 	if (sample_type & PERF_SAMPLE_REGS_INTR)
-		evsel.core.attr.sample_regs_intr = sample_regs;
+		evsel->core.attr.sample_regs_intr = sample_regs;
 
 	if (sample_type & PERF_SAMPLE_BRANCH_STACK)
-		evsel.core.attr.branch_sample_type |= PERF_SAMPLE_BRANCH_HW_INDEX;
+		evsel->core.attr.branch_sample_type |= PERF_SAMPLE_BRANCH_HW_INDEX;
 
 	for (i = 0; i < sizeof(regs); i++)
 		*(i + (u8 *)regs) = i & 0xfe;
@@ -311,12 +312,12 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 	}
 
 	sz = perf_event__sample_event_size(&sample, sample_type, read_format,
-					   evsel.core.attr.branch_sample_type);
+					   evsel->core.attr.branch_sample_type);
 	bufsz = sz + 4096; /* Add a bit for overrun checking */
 	event = malloc(bufsz);
 	if (!event) {
 		pr_debug("malloc failed\n");
-		return -1;
+		goto out_free;
 	}
 
 	memset(event, 0xff, bufsz);
@@ -325,7 +326,7 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 	event->header.size = sz;
 
 	err = perf_event__synthesize_sample(event, sample_type, read_format,
-					    evsel.core.attr.branch_sample_type, &sample);
+					    evsel->core.attr.branch_sample_type, &sample);
 	if (err) {
 		pr_debug("%s failed for sample_type %#"PRIx64", error %d\n",
 			 "perf_event__synthesize_sample", sample_type, err);
@@ -343,32 +344,33 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 		goto out_free;
 	}
 
-	evsel.sample_size = __evsel__sample_size(sample_type);
+	evsel->sample_size = __evsel__sample_size(sample_type);
 
-	err = evsel__parse_sample(&evsel, event, &sample_out);
+	err = evsel__parse_sample(evsel, event, &sample_out);
 	if (err) {
 		pr_debug("%s failed for sample_type %#"PRIx64", error %d\n",
 			 "evsel__parse_sample", sample_type, err);
 		goto out_free;
 	}
 
-	if (!samples_same(&sample, &sample_out, sample_type, read_format, evsel.needs_swap)) {
+	if (!samples_same(&sample, &sample_out, sample_type, read_format, evsel->needs_swap)) {
 		pr_debug("parsing failed for sample_type %#"PRIx64"\n",
 			 sample_type);
 		goto out_free;
 	}
 
 	if (sample_type == PERF_SAMPLE_BRANCH_STACK) {
-		evsel.needs_swap = true;
-		evsel.sample_size = __evsel__sample_size(sample_type);
-		err = evsel__parse_sample(&evsel, event, &sample_out_endian);
+		evsel->needs_swap = true;
+		evsel->sample_size = __evsel__sample_size(sample_type);
+		err = evsel__parse_sample(evsel, event, &sample_out_endian);
 		if (err) {
 			pr_debug("%s failed for sample_type %#"PRIx64", error %d\n",
 				 "evsel__parse_sample", sample_type, err);
 			goto out_free;
 		}
 
-		if (!samples_same(&sample, &sample_out_endian, sample_type, read_format, evsel.needs_swap)) {
+		if (!samples_same(&sample, &sample_out_endian, sample_type,
+				  read_format, evsel->needs_swap)) {
 			pr_debug("parsing failed for sample_type %#"PRIx64"\n",
 				 sample_type);
 			goto out_free;
@@ -380,6 +382,7 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
 	free(event);
 	perf_sample__exit(&sample_out_endian);
 	perf_sample__exit(&sample_out);
+	evsel__put(evsel);
 	if (ret && read_format)
 		pr_debug("read_format %#"PRIx64"\n", read_format);
 	return ret;
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index bb6b62cf51d17..d181858816352 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -71,7 +71,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		goto out_put_evlist;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	if (evlist__open(evlist)) {
 		const char *knob = "/proc/sys/kernel/perf_event_max_sample_rate";
@@ -83,7 +83,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		goto out_put_evlist;
 	}
 
-	err = evlist__mmap(evlist, 128);
+	err = evlist__do_mmap(evlist, 128);
 	if (err < 0) {
 		pr_debug("failed to mmap event: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
@@ -98,7 +98,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 
 	evlist__disable(evlist);
 
-	md = &evlist->mmap[0];
+	md = &evlist__mmap(evlist)[0];
 	if (perf_mmap__read_init(&md->core) < 0)
 		goto out_init;
 
diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c
index abd08d60179c5..73568c782d72b 100644
--- a/tools/perf/tests/switch-tracking.c
+++ b/tools/perf/tests/switch-tracking.c
@@ -237,6 +237,7 @@ static int add_event(struct evlist *evlist, struct list_head *events,
 
 	if (evlist__parse_sample(evlist, event, &sample)) {
 		pr_debug("evlist__parse_sample failed\n");
+		perf_sample__exit(&sample);
 		return -1;
 	}
 
@@ -282,8 +283,8 @@ static int process_events(struct evlist *evlist,
 	struct mmap *md;
 	int i, ret;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		md = &evlist->mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		md = &evlist__mmap(evlist)[i];
 		if (perf_mmap__read_init(&md->core) < 0)
 			continue;
 
@@ -374,7 +375,7 @@ static int test__switch_tracking(struct test_suite *test __maybe_unused, int sub
 		goto out_err;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	/* First event */
 	err = parse_event(evlist, "cpu-clock:u");
@@ -471,7 +472,7 @@ static int test__switch_tracking(struct test_suite *test __maybe_unused, int sub
 		goto out;
 	}
 
-	err = evlist__mmap(evlist, UINT_MAX);
+	err = evlist__do_mmap(evlist, UINT_MAX);
 	if (err) {
 		pr_debug("evlist__mmap failed!\n");
 		goto out_err;
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index a46650b10689e..95393edbfe363 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -77,7 +77,7 @@ static int test__task_exit(struct test_suite *test __maybe_unused, int subtest _
 		goto out_put_evlist;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	err = evlist__prepare_workload(evlist, &target, argv, false, workload_exec_failed_signal);
 	if (err < 0) {
@@ -104,7 +104,7 @@ static int test__task_exit(struct test_suite *test __maybe_unused, int subtest _
 		goto out_put_evlist;
 	}
 
-	if (evlist__mmap(evlist, 128) < 0) {
+	if (evlist__do_mmap(evlist, 128) < 0) {
 		pr_debug("failed to mmap events: %d (%s)\n", errno,
 			 str_error_r(errno, sbuf, sizeof(sbuf)));
 		err = -1;
@@ -114,7 +114,7 @@ static int test__task_exit(struct test_suite *test __maybe_unused, int subtest _
 	evlist__start_workload(evlist);
 
 retry:
-	md = &evlist->mmap[0];
+	md = &evlist__mmap(evlist)[0];
 	if (perf_mmap__read_init(&md->core) < 0)
 		goto out_init;
 
diff --git a/tools/perf/tests/time-utils-test.c b/tools/perf/tests/time-utils-test.c
index 38df10373c1e1..90a9a4b4f1789 100644
--- a/tools/perf/tests/time-utils-test.c
+++ b/tools/perf/tests/time-utils-test.c
@@ -69,16 +69,19 @@ struct test_data {
 
 static bool test__perf_time__parse_for_ranges(struct test_data *d)
 {
-	struct evlist evlist = {
-		.first_sample_time = d->first,
-		.last_sample_time = d->last,
-	};
-	struct perf_session session = { .evlist = &evlist };
+	struct evlist *evlist = evlist__new();
+	struct perf_session session = { .evlist = evlist };
 	struct perf_time_interval *ptime = NULL;
 	int range_size, range_num;
 	bool pass = false;
 	int i, err;
 
+	if (!evlist) {
+		pr_debug("Missing evlist\n");
+		return false;
+	}
+	evlist__set_first_sample_time(evlist, d->first);
+	evlist__set_last_sample_time(evlist, d->last);
 	pr_debug("\nperf_time__parse_for_ranges(\"%s\")\n", d->str);
 
 	if (strchr(d->str, '%'))
@@ -127,6 +130,7 @@ static bool test__perf_time__parse_for_ranges(struct test_data *d)
 
 	pass = true;
 out:
+	evlist__put(evlist);
 	free(ptime);
 	return pass;
 }
diff --git a/tools/perf/tests/tool_pmu.c b/tools/perf/tests/tool_pmu.c
index e78ff9dcea97f..c6c5ebf0e935f 100644
--- a/tools/perf/tests/tool_pmu.c
+++ b/tools/perf/tests/tool_pmu.c
@@ -40,9 +40,10 @@ static int do_test(enum tool_pmu_event ev, bool with_pmu)
 	}
 
 	ret = TEST_OK;
-	if (with_pmu ? (evlist->core.nr_entries != 1) : (evlist->core.nr_entries < 1)) {
+	if (with_pmu ? (evlist__nr_entries(evlist) != 1)
+		     : (evlist__nr_entries(evlist) < 1)) {
 		pr_debug("FAILED %s:%d Unexpected number of events for '%s' of %d\n",
-			 __FILE__, __LINE__, str, evlist->core.nr_entries);
+			 __FILE__, __LINE__, str, evlist__nr_entries(evlist));
 		ret = TEST_FAIL;
 		goto out;
 	}
diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c
index 15741abec8c6d..77cb8318c0b18 100644
--- a/tools/perf/tests/topology.c
+++ b/tools/perf/tests/topology.c
@@ -46,7 +46,7 @@ static int session_write_header(char *path)
 
 	session->evlist = evlist__new_default(&target, /*sample_callchains=*/false);
 	TEST_ASSERT_VAL("can't get evlist", session->evlist);
-	session->evlist->session = session;
+	evlist__set_session(session->evlist, session);
 
 	perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY);
 	perf_header__set_feat(&session->header, HEADER_NRCPUS);
diff --git a/tools/perf/tests/uncore-event-sorting.c b/tools/perf/tests/uncore-event-sorting.c
index 2e741aef4a59d..7756777c54c2e 100644
--- a/tools/perf/tests/uncore-event-sorting.c
+++ b/tools/perf/tests/uncore-event-sorting.c
@@ -147,8 +147,8 @@ static int test__uncore_event_sorting(struct test_suite *test __maybe_unused,
 		goto out_err;
 	}
 
-	CHECK_COND(evlist->core.nr_entries >= 4, "Number of events is >= 4");
-	CHECK_EQUAL(evlist->core.nr_entries % 2, 0, "Number of events is a multiple of 2");
+	CHECK_COND(evlist__nr_entries(evlist) >= 4, "Number of events is >= 4");
+	CHECK_EQUAL(evlist__nr_entries(evlist) % 2, 0, "Number of events is a multiple of 2");
 
 	evlist__for_each_entry(evlist, evsel) {
 		struct evsel *next;
diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
index 97ae4c86bebbe..d25761a8d25eb 100644
--- a/tools/perf/ui/browsers/annotate.c
+++ b/tools/perf/ui/browsers/annotate.c
@@ -597,7 +597,7 @@ static bool annotate_browser__callq(struct annotate_browser *browser,
 	notes = symbol__annotation(dl->ops.target.sym);
 	annotation__lock(notes);
 
-	if (!symbol__hists(dl->ops.target.sym, evsel->evlist->core.nr_entries)) {
+	if (!symbol__hists(dl->ops.target.sym, evlist__nr_entries(evsel->evlist))) {
 		annotation__unlock(notes);
 		ui__warning("Not enough memory for annotating '%s' symbol!\n",
 			    dl->ops.target.sym->name);
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index cfa6386e6e1da..da7cc195b9f41 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -688,10 +688,10 @@ static int hist_browser__handle_hotkey(struct hist_browser *browser, bool warn_l
 		ui_browser__update_nr_entries(&browser->b, nr_entries);
 
 		if (warn_lost_event &&
-		    (evsel->evlist->stats.nr_lost_warned !=
-		     evsel->evlist->stats.nr_events[PERF_RECORD_LOST])) {
-			evsel->evlist->stats.nr_lost_warned =
-				evsel->evlist->stats.nr_events[PERF_RECORD_LOST];
+		    (evlist__stats(evsel->evlist)->nr_lost_warned !=
+		     evlist__stats(evsel->evlist)->nr_events[PERF_RECORD_LOST])) {
+			evlist__stats(evsel->evlist)->nr_lost_warned =
+				evlist__stats(evsel->evlist)->nr_events[PERF_RECORD_LOST];
 			ui_browser__warn_lost_events(&browser->b);
 		}
 
@@ -3321,7 +3321,7 @@ static int evsel__hists_browse(struct evsel *evsel, int nr_events, const char *h
 				 * No need to refresh, resort/decay histogram
 				 * entries if we are not collecting samples:
 				 */
-				if (top->evlist->enabled) {
+				if (evlist__enabled(top->evlist)) {
 					helpline = "Press 'f' to disable the events or 'h' to see other hotkeys";
 					hbt->refresh = delay_secs;
 				} else {
@@ -3493,7 +3493,7 @@ static void perf_evsel_menu__write(struct ui_browser *browser,
 			   unit, unit == ' ' ? "" : " ", ev_name);
 	ui_browser__printf(browser, "%s", bf);
 
-	nr_events = evsel->evlist->stats.nr_events[PERF_RECORD_LOST];
+	nr_events = evlist__stats(evsel->evlist)->nr_events[PERF_RECORD_LOST];
 	if (nr_events != 0) {
 		menu->lost_events = true;
 		if (!current_entry)
@@ -3559,13 +3559,13 @@ static int perf_evsel_menu__run(struct evsel_menu *menu,
 			ui_browser__show_title(&menu->b, title);
 			switch (key) {
 			case K_TAB:
-				if (pos->core.node.next == &evlist->core.entries)
+				if (pos->core.node.next == &evlist__core(evlist)->entries)
 					pos = evlist__first(evlist);
 				else
 					pos = evsel__next(pos);
 				goto browse_hists;
 			case K_UNTAB:
-				if (pos->core.node.prev == &evlist->core.entries)
+				if (pos->core.node.prev == &evlist__core(evlist)->entries)
 					pos = evlist__last(evlist);
 				else
 					pos = evsel__prev(pos);
@@ -3618,7 +3618,7 @@ static int __evlist__tui_browse_hists(struct evlist *evlist, int nr_entries, con
 	struct evsel *pos;
 	struct evsel_menu menu = {
 		.b = {
-			.entries    = &evlist->core.entries,
+			.entries    = &evlist__core(evlist)->entries,
 			.refresh    = ui_browser__list_head_refresh,
 			.seek	    = ui_browser__list_head_seek,
 			.write	    = perf_evsel_menu__write,
@@ -3646,7 +3646,7 @@ static int __evlist__tui_browse_hists(struct evlist *evlist, int nr_entries, con
 
 static bool evlist__single_entry(struct evlist *evlist)
 {
-	int nr_entries = evlist->core.nr_entries;
+	int nr_entries = evlist__nr_entries(evlist);
 
 	if (nr_entries == 1)
 	       return true;
@@ -3664,7 +3664,7 @@ static bool evlist__single_entry(struct evlist *evlist)
 int evlist__tui_browse_hists(struct evlist *evlist, const char *help, struct hist_browser_timer *hbt,
 			     float min_pcnt, struct perf_env *env, bool warn_lost_event)
 {
-	int nr_entries = evlist->core.nr_entries;
+	int nr_entries = evlist__nr_entries(evlist);
 
 	if (evlist__single_entry(evlist)) {
 single_entry: {
diff --git a/tools/perf/util/amd-sample-raw.c b/tools/perf/util/amd-sample-raw.c
index 394c061fbeb38..cda3836329c3a 100644
--- a/tools/perf/util/amd-sample-raw.c
+++ b/tools/perf/util/amd-sample-raw.c
@@ -421,7 +421,7 @@ static void parse_cpuid(struct perf_env *env)
  */
 bool evlist__has_amd_ibs(struct evlist *evlist)
 {
-	struct perf_env *env = perf_session__env(evlist->session);
+	struct perf_env *env = perf_session__env(evlist__session(evlist));
 	int ret, nr_pmu_mappings = perf_env__nr_pmu_mappings(env);
 	const char *pmu_mapping = perf_env__pmu_mappings(env);
 	char name[sizeof("ibs_fetch")];
diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-data.c
index 63e3c54fab421..4e4c587640823 100644
--- a/tools/perf/util/annotate-data.c
+++ b/tools/perf/util/annotate-data.c
@@ -1829,7 +1829,7 @@ int annotated_data_type__update_samples(struct annotated_data_type *adt,
 		return 0;
 
 	if (adt->histograms == NULL) {
-		int nr = evsel->evlist->core.nr_entries;
+		int nr = evlist__nr_entries(evsel->evlist);
 
 		if (alloc_data_type_histograms(adt, nr) < 0)
 			return -1;
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 02505222d8c2d..53b2a224b21df 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -328,7 +328,7 @@ static int symbol__inc_addr_samples(struct map_symbol *ms,
 
 	if (sym == NULL)
 		return 0;
-	src = symbol__hists(sym, sample->evsel->evlist->core.nr_entries);
+	src = symbol__hists(sym, evlist__nr_entries(sample->evsel->evlist));
 	return src ? __symbol__inc_addr_samples(ms, src, addr, sample) : 0;
 }
 
@@ -339,7 +339,7 @@ static int symbol__account_br_cntr(struct annotated_branch *branch,
 {
 	unsigned int br_cntr_nr = evsel__leader(evsel)->br_cntr_nr;
 	unsigned int base = evsel__leader(evsel)->br_cntr_idx;
-	unsigned int off = offset * evsel->evlist->nr_br_cntr;
+	unsigned int off = offset * evlist__nr_br_cntr(evsel->evlist);
 	u64 *branch_br_cntr = branch->br_cntr;
 	unsigned int i, mask, width;
 
@@ -369,7 +369,7 @@ static int symbol__account_cycles(u64 addr, u64 start, struct symbol *sym,
 
 	if (sym == NULL)
 		return 0;
-	branch = symbol__find_branch_hist(sym, evsel->evlist->nr_br_cntr);
+	branch = symbol__find_branch_hist(sym, evlist__nr_br_cntr(evsel->evlist));
 	if (!branch)
 		return -ENOMEM;
 	if (addr < sym->start || addr >= sym->end)
@@ -511,7 +511,7 @@ static void annotation__count_and_fill(struct annotation *notes, u64 start, u64
 static int annotation__compute_ipc(struct annotation *notes, size_t size,
 				   struct evsel *evsel)
 {
-	unsigned int br_cntr_nr = evsel->evlist->nr_br_cntr;
+	unsigned int br_cntr_nr = evlist__nr_br_cntr(evsel->evlist);
 	int err = 0;
 	s64 offset;
 
@@ -1813,7 +1813,7 @@ int annotation_br_cntr_abbr_list(char **str, struct evsel *evsel, bool header)
 	struct evsel *pos;
 	struct strbuf sb;
 
-	if (evsel->evlist->nr_br_cntr <= 0)
+	if (evlist__nr_br_cntr(evsel->evlist) <= 0)
 		return -ENOTSUP;
 
 	strbuf_init(&sb, /*hint=*/ 0);
diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 4cd2caf540152..0b851f32e98c8 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -191,7 +191,7 @@ void auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp,
 				   struct evlist *evlist,
 				   struct evsel *evsel, int idx)
 {
-	bool per_cpu = !perf_cpu_map__has_any_cpu(evlist->core.user_requested_cpus);
+	bool per_cpu = !perf_cpu_map__has_any_cpu(evlist__core(evlist)->user_requested_cpus);
 
 	mp->mmap_needed = evsel->needs_auxtrace_mmap;
 
@@ -201,11 +201,11 @@ void auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp,
 	mp->idx = idx;
 
 	if (per_cpu) {
-		mp->cpu = perf_cpu_map__cpu(evlist->core.all_cpus, idx);
-		mp->tid = perf_thread_map__pid(evlist->core.threads, 0);
+		mp->cpu = perf_cpu_map__cpu(evlist__core(evlist)->all_cpus, idx);
+		mp->tid = perf_thread_map__pid(evlist__core(evlist)->threads, 0);
 	} else {
 		mp->cpu.cpu = -1;
-		mp->tid = perf_thread_map__pid(evlist->core.threads, idx);
+		mp->tid = perf_thread_map__pid(evlist__core(evlist)->threads, idx);
 	}
 }
 
@@ -668,10 +668,10 @@ int auxtrace_parse_snapshot_options(struct auxtrace_record *itr,
 
 static int evlist__enable_event_idx(struct evlist *evlist, struct evsel *evsel, int idx)
 {
-	bool per_cpu_mmaps = !perf_cpu_map__has_any_cpu(evlist->core.user_requested_cpus);
+	bool per_cpu_mmaps = !perf_cpu_map__has_any_cpu(evlist__core(evlist)->user_requested_cpus);
 
 	if (per_cpu_mmaps) {
-		struct perf_cpu evlist_cpu = perf_cpu_map__cpu(evlist->core.all_cpus, idx);
+		struct perf_cpu evlist_cpu = perf_cpu_map__cpu(evlist__core(evlist)->all_cpus, idx);
 		int cpu_map_idx = perf_cpu_map__idx(evsel->core.cpus, evlist_cpu);
 
 		if (cpu_map_idx == -1)
@@ -1838,7 +1838,7 @@ void perf_session__auxtrace_error_inc(struct perf_session *session,
 	struct perf_record_auxtrace_error *e = &event->auxtrace_error;
 
 	if (e->type < PERF_AUXTRACE_ERROR_MAX)
-		session->evlist->stats.nr_auxtrace_errors[e->type] += 1;
+		evlist__stats(session->evlist)->nr_auxtrace_errors[e->type] += 1;
 }
 
 void events_stats__auxtrace_error_warn(const struct events_stats *stats)
diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c
index 8d3a9a661f267..1135e54f4c7fc 100644
--- a/tools/perf/util/block-info.c
+++ b/tools/perf/util/block-info.c
@@ -472,7 +472,7 @@ struct block_report *block_info__create_report(struct evlist *evlist,
 					       int *nr_reps)
 {
 	struct block_report *block_reports;
-	int nr_hists = evlist->core.nr_entries, i = 0;
+	int nr_hists = evlist__nr_entries(evlist), i = 0;
 	struct evsel *pos;
 
 	block_reports = calloc(nr_hists, sizeof(struct block_report));
@@ -483,7 +483,7 @@ struct block_report *block_info__create_report(struct evlist *evlist,
 		struct hists *hists = evsel__hists(pos);
 
 		process_block_report(hists, &block_reports[i], total_cycles,
-				     block_hpps, nr_hpps, evlist->nr_br_cntr);
+				     block_hpps, nr_hpps, evlist__nr_br_cntr(evlist));
 		i++;
 	}
 
diff --git a/tools/perf/util/bpf_counter.c b/tools/perf/util/bpf_counter.c
index 34b6b0da18b73..9362e45e17ceb 100644
--- a/tools/perf/util/bpf_counter.c
+++ b/tools/perf/util/bpf_counter.c
@@ -443,7 +443,7 @@ static int bperf_check_target(struct evsel *evsel,
 	} else if (target->tid) {
 		*filter_type = BPERF_FILTER_PID;
 		*filter_entry_cnt = perf_thread_map__nr(evsel->core.threads);
-	} else if (target->pid || evsel->evlist->workload.pid != -1) {
+	} else if (target->pid || evlist__workload_pid(evsel->evlist) != -1) {
 		*filter_type = BPERF_FILTER_TGID;
 		*filter_entry_cnt = perf_thread_map__nr(evsel->core.threads);
 	} else {
diff --git a/tools/perf/util/bpf_counter_cgroup.c b/tools/perf/util/bpf_counter_cgroup.c
index 6842c9f6d71e3..4e5f4b9dd4428 100644
--- a/tools/perf/util/bpf_counter_cgroup.c
+++ b/tools/perf/util/bpf_counter_cgroup.c
@@ -104,7 +104,7 @@ static int bperf_load_program(struct evlist *evlist)
 
 	set_max_rlimit();
 
-	if (nr_cgroups == 0 || evlist->core.nr_entries % nr_cgroups != 0) {
+	if (nr_cgroups == 0 || evlist__nr_entries(evlist) % nr_cgroups != 0) {
 		pr_err("Invalid cgroup or event count\n");
 		return -EINVAL;
 	}
@@ -116,7 +116,7 @@ static int bperf_load_program(struct evlist *evlist)
 		pr_err("Failed to open cgroup skeleton\n");
 		return -1;
 	}
-	setup_rodata(skel, evlist->core.nr_entries);
+	setup_rodata(skel, evlist__nr_entries(evlist));
 
 	err = bperf_cgroup_bpf__load(skel);
 	if (err) {
@@ -127,12 +127,12 @@ static int bperf_load_program(struct evlist *evlist)
 	err = -1;
 
 	cgrp_switch = evsel__new(&cgrp_switch_attr);
-	if (evsel__open_per_cpu(cgrp_switch, evlist->core.all_cpus, -1) < 0) {
+	if (evsel__open_per_cpu(cgrp_switch, evlist__core(evlist)->all_cpus, -1) < 0) {
 		pr_err("Failed to open cgroup switches event\n");
 		goto out;
 	}
 
-	perf_cpu_map__for_each_cpu(cpu, i, evlist->core.all_cpus) {
+	perf_cpu_map__for_each_cpu(cpu, i, evlist__core(evlist)->all_cpus) {
 		link = bpf_program__attach_perf_event(skel->progs.on_cgrp_switch,
 						      FD(cgrp_switch, i));
 		if (IS_ERR(link)) {
@@ -197,7 +197,7 @@ static int bperf_load_program(struct evlist *evlist)
 	 */
 	{
 		struct evsel *leader;
-		int num_events = evlist->core.nr_entries / nr_cgroups;
+		int num_events = evlist__nr_entries(evlist) / nr_cgroups;
 
 		evlist__for_each_entry(evlist, evsel) {
 			leader = evlist__find_evsel(evlist, evsel->core.idx % num_events);
@@ -258,7 +258,7 @@ static int bperf_cgrp__sync_counters(struct evlist *evlist)
 	unsigned int idx;
 	int prog_fd = bpf_program__fd(skel->progs.trigger_read);
 
-	perf_cpu_map__for_each_cpu(cpu, idx, evlist->core.all_cpus)
+	perf_cpu_map__for_each_cpu(cpu, idx, evlist__core(evlist)->all_cpus)
 		bperf_trigger_reading(prog_fd, cpu.cpu);
 
 	return 0;
diff --git a/tools/perf/util/bpf_ftrace.c b/tools/perf/util/bpf_ftrace.c
index c456d24efa308..abeafd406e8e0 100644
--- a/tools/perf/util/bpf_ftrace.c
+++ b/tools/perf/util/bpf_ftrace.c
@@ -59,13 +59,13 @@ int perf_ftrace__latency_prepare_bpf(struct perf_ftrace *ftrace)
 
 	/* don't need to set cpu filter for system-wide mode */
 	if (ftrace->target.cpu_list) {
-		ncpus = perf_cpu_map__nr(ftrace->evlist->core.user_requested_cpus);
+		ncpus = perf_cpu_map__nr(evlist__core(ftrace->evlist)->user_requested_cpus);
 		bpf_map__set_max_entries(skel->maps.cpu_filter, ncpus);
 		skel->rodata->has_cpu = 1;
 	}
 
 	if (target__has_task(&ftrace->target) || target__none(&ftrace->target)) {
-		ntasks = perf_thread_map__nr(ftrace->evlist->core.threads);
+		ntasks = perf_thread_map__nr(evlist__core(ftrace->evlist)->threads);
 		bpf_map__set_max_entries(skel->maps.task_filter, ntasks);
 		skel->rodata->has_task = 1;
 	}
@@ -87,7 +87,8 @@ int perf_ftrace__latency_prepare_bpf(struct perf_ftrace *ftrace)
 		fd = bpf_map__fd(skel->maps.cpu_filter);
 
 		for (i = 0; i < ncpus; i++) {
-			cpu = perf_cpu_map__cpu(ftrace->evlist->core.user_requested_cpus, i).cpu;
+			cpu = perf_cpu_map__cpu(
+				evlist__core(ftrace->evlist)->user_requested_cpus, i).cpu;
 			bpf_map_update_elem(fd, &cpu, &val, BPF_ANY);
 		}
 	}
@@ -99,7 +100,7 @@ int perf_ftrace__latency_prepare_bpf(struct perf_ftrace *ftrace)
 		fd = bpf_map__fd(skel->maps.task_filter);
 
 		for (i = 0; i < ntasks; i++) {
-			pid = perf_thread_map__pid(ftrace->evlist->core.threads, i);
+			pid = perf_thread_map__pid(evlist__core(ftrace->evlist)->threads, i);
 			bpf_map_update_elem(fd, &pid, &val, BPF_ANY);
 		}
 	}
diff --git a/tools/perf/util/bpf_lock_contention.c b/tools/perf/util/bpf_lock_contention.c
index b1cfa63a488fa..c20bd075664e1 100644
--- a/tools/perf/util/bpf_lock_contention.c
+++ b/tools/perf/util/bpf_lock_contention.c
@@ -223,11 +223,11 @@ int lock_contention_prepare(struct lock_contention *con)
 
 	if (target__has_cpu(target)) {
 		skel->rodata->has_cpu = 1;
-		ncpus = perf_cpu_map__nr(evlist->core.user_requested_cpus);
+		ncpus = perf_cpu_map__nr(evlist__core(evlist)->user_requested_cpus);
 	}
 	if (target__has_task(target)) {
 		skel->rodata->has_task = 1;
-		ntasks = perf_thread_map__nr(evlist->core.threads);
+		ntasks = perf_thread_map__nr(evlist__core(evlist)->threads);
 	}
 	if (con->filters->nr_types) {
 		skel->rodata->has_type = 1;
@@ -334,7 +334,7 @@ int lock_contention_prepare(struct lock_contention *con)
 		fd = bpf_map__fd(skel->maps.cpu_filter);
 
 		for (i = 0; i < ncpus; i++) {
-			cpu = perf_cpu_map__cpu(evlist->core.user_requested_cpus, i).cpu;
+			cpu = perf_cpu_map__cpu(evlist__core(evlist)->user_requested_cpus, i).cpu;
 			bpf_map_update_elem(fd, &cpu, &val, BPF_ANY);
 		}
 	}
@@ -346,13 +346,13 @@ int lock_contention_prepare(struct lock_contention *con)
 		fd = bpf_map__fd(skel->maps.task_filter);
 
 		for (i = 0; i < ntasks; i++) {
-			pid = perf_thread_map__pid(evlist->core.threads, i);
+			pid = perf_thread_map__pid(evlist__core(evlist)->threads, i);
 			bpf_map_update_elem(fd, &pid, &val, BPF_ANY);
 		}
 	}
 
-	if (target__none(target) && evlist->workload.pid > 0) {
-		u32 pid = evlist->workload.pid;
+	if (target__none(target) && evlist__workload_pid(evlist) > 0) {
+		u32 pid = evlist__workload_pid(evlist);
 		u8 val = 1;
 
 		fd = bpf_map__fd(skel->maps.task_filter);
diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c
index 48cb930cdd2e7..c4639f6a57766 100644
--- a/tools/perf/util/bpf_off_cpu.c
+++ b/tools/perf/util/bpf_off_cpu.c
@@ -73,13 +73,13 @@ static void off_cpu_start(void *arg)
 
 	/* update task filter for the given workload */
 	if (skel->rodata->has_task && skel->rodata->uses_tgid &&
-	    perf_thread_map__pid(evlist->core.threads, 0) != -1) {
+	    perf_thread_map__pid(evlist__core(evlist)->threads, 0) != -1) {
 		int fd;
 		u32 pid;
 		u8 val = 1;
 
 		fd = bpf_map__fd(skel->maps.task_filter);
-		pid = perf_thread_map__pid(evlist->core.threads, 0);
+		pid = perf_thread_map__pid(evlist__core(evlist)->threads, 0);
 		bpf_map_update_elem(fd, &pid, &val, BPF_ANY);
 	}
 
@@ -168,7 +168,7 @@ int off_cpu_prepare(struct evlist *evlist, struct target *target,
 
 	/* don't need to set cpu filter for system-wide mode */
 	if (target->cpu_list) {
-		ncpus = perf_cpu_map__nr(evlist->core.user_requested_cpus);
+		ncpus = perf_cpu_map__nr(evlist__core(evlist)->user_requested_cpus);
 		bpf_map__set_max_entries(skel->maps.cpu_filter, ncpus);
 		skel->rodata->has_cpu = 1;
 	}
@@ -199,7 +199,7 @@ int off_cpu_prepare(struct evlist *evlist, struct target *target,
 		skel->rodata->has_task = 1;
 		skel->rodata->uses_tgid = 1;
 	} else if (target__has_task(target)) {
-		ntasks = perf_thread_map__nr(evlist->core.threads);
+		ntasks = perf_thread_map__nr(evlist__core(evlist)->threads);
 		bpf_map__set_max_entries(skel->maps.task_filter, ntasks);
 		skel->rodata->has_task = 1;
 	} else if (target__none(target)) {
@@ -209,7 +209,7 @@ int off_cpu_prepare(struct evlist *evlist, struct target *target,
 	}
 
 	if (evlist__first(evlist)->cgrp) {
-		ncgrps = evlist->core.nr_entries - 1; /* excluding a dummy */
+		ncgrps = evlist__nr_entries(evlist) - 1; /* excluding a dummy */
 		bpf_map__set_max_entries(skel->maps.cgroup_filter, ncgrps);
 
 		if (!cgroup_is_v2("perf_event"))
@@ -240,7 +240,7 @@ int off_cpu_prepare(struct evlist *evlist, struct target *target,
 		fd = bpf_map__fd(skel->maps.cpu_filter);
 
 		for (i = 0; i < ncpus; i++) {
-			cpu = perf_cpu_map__cpu(evlist->core.user_requested_cpus, i).cpu;
+			cpu = perf_cpu_map__cpu(evlist__core(evlist)->user_requested_cpus, i).cpu;
 			bpf_map_update_elem(fd, &cpu, &val, BPF_ANY);
 		}
 	}
@@ -269,7 +269,7 @@ int off_cpu_prepare(struct evlist *evlist, struct target *target,
 		fd = bpf_map__fd(skel->maps.task_filter);
 
 		for (i = 0; i < ntasks; i++) {
-			pid = perf_thread_map__pid(evlist->core.threads, i);
+			pid = perf_thread_map__pid(evlist__core(evlist)->threads, i);
 			bpf_map_update_elem(fd, &pid, &val, BPF_ANY);
 		}
 	}
diff --git a/tools/perf/util/cgroup.c b/tools/perf/util/cgroup.c
index 9147447244674..c7be16a7915e6 100644
--- a/tools/perf/util/cgroup.c
+++ b/tools/perf/util/cgroup.c
@@ -367,7 +367,7 @@ int parse_cgroups(const struct option *opt, const char *str,
 	char *s;
 	int ret, i;
 
-	if (list_empty(&evlist->core.entries)) {
+	if (list_empty(&evlist__core(evlist)->entries)) {
 		fprintf(stderr, "must define events before cgroups\n");
 		return -1;
 	}
@@ -423,7 +423,7 @@ int evlist__expand_cgroup(struct evlist *evlist, const char *str, bool open_cgro
 	int ret = -1;
 	int prefix_len;
 
-	if (evlist->core.nr_entries == 0) {
+	if (evlist__nr_entries(evlist) == 0) {
 		fprintf(stderr, "must define events before cgroups\n");
 		return -EINVAL;
 	}
@@ -436,11 +436,11 @@ int evlist__expand_cgroup(struct evlist *evlist, const char *str, bool open_cgro
 	}
 
 	/* save original events and init evlist */
-	evlist__splice_list_tail(orig_list, &evlist->core.entries);
-	evlist->core.nr_entries = 0;
+	evlist__splice_list_tail(orig_list, &evlist__core(evlist)->entries);
+	evlist__core(evlist)->nr_entries = 0;
 
-	orig_metric_events = evlist->metric_events;
-	metricgroup__rblist_init(&evlist->metric_events);
+	orig_metric_events = *evlist__metric_events(evlist);
+	metricgroup__rblist_init(evlist__metric_events(evlist));
 
 	if (has_pattern_string(str))
 		prefix_len = match_cgroups(str);
@@ -503,15 +503,15 @@ int evlist__expand_cgroup(struct evlist *evlist, const char *str, bool open_cgro
 		nr_cgroups++;
 
 		if (metricgroup__copy_metric_events(tmp_list, cgrp,
-						    &evlist->metric_events,
+						    evlist__metric_events(evlist),
 						    &orig_metric_events) < 0)
 			goto out_err;
 
-		evlist__splice_list_tail(evlist, &tmp_list->core.entries);
-		tmp_list->core.nr_entries = 0;
+		evlist__splice_list_tail(evlist, &evlist__core(tmp_list)->entries);
+		evlist__core(tmp_list)->nr_entries = 0;
 	}
 
-	if (list_empty(&evlist->core.entries)) {
+	if (list_empty(&evlist__core(evlist)->entries)) {
 		fprintf(stderr, "no cgroup matched: %s\n", str);
 		goto out_err;
 	}
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5d0664ff73b79..2284cda78abe1 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -1691,8 +1691,9 @@ static int cs_etm__synth_branch_sample(struct cs_etm_queue *etmq,
 {
 	int ret = 0;
 	struct cs_etm_auxtrace *etm = etmq->etm;
-	struct perf_sample sample = {.ip = 0,};
+	struct perf_sample sample;
 	union perf_event *event = tidq->event_buf;
+
 	struct dummy_branch_stack {
 		u64			nr;
 		u64			hw_idx;
@@ -1700,6 +1701,7 @@ static int cs_etm__synth_branch_sample(struct cs_etm_queue *etmq,
 	} dummy_bs;
 	u64 ip;
 
+	perf_sample__init(&sample, /*all=*/true);
 	ip = cs_etm__last_executed_instr(tidq->prev_packet);
 
 	event->sample.header.type = PERF_RECORD_SAMPLE;
@@ -1752,6 +1754,7 @@ static int cs_etm__synth_branch_sample(struct cs_etm_queue *etmq,
 		"CS ETM Trace: failed to deliver instruction event, error %d\n",
 		ret);
 
+	perf_sample__exit(&sample);
 	return ret;
 }
 
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 1721a2470fb67..eb7c0d7be064e 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -31,6 +31,7 @@
 
 #include <api/fs/fs.h>
 #include <internal/lib.h> // page_size
+#include <internal/rc_check.h>
 #include <internal/xyarray.h>
 #include <perf/cpumap.h>
 #include <perf/evlist.h>
@@ -75,30 +76,31 @@ int sigqueue(pid_t pid, int sig, const union sigval value);
 #define FD(e, x, y) (*(int *)xyarray__entry(e->core.fd, x, y))
 #define SID(e, x, y) xyarray__entry(e->core.sample_id, x, y)
 
-static void evlist__init(struct evlist *evlist, struct perf_cpu_map *cpus,
-		  struct perf_thread_map *threads)
-{
-	perf_evlist__init(&evlist->core);
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
-	evlist->workload.pid = -1;
-	evlist->bkw_mmap_state = BKW_MMAP_NOTREADY;
-	evlist->ctl_fd.fd = -1;
-	evlist->ctl_fd.ack = -1;
-	evlist->ctl_fd.pos = -1;
-	evlist->nr_br_cntr = -1;
-	metricgroup__rblist_init(&evlist->metric_events);
-	INIT_LIST_HEAD(&evlist->deferred_samples);
-	refcount_set(&evlist->refcnt, 1);
-}
+static void event_enable_timer__exit(struct event_enable_timer **ep);
 
 struct evlist *evlist__new(void)
 {
-	struct evlist *evlist = zalloc(sizeof(*evlist));
-
-	if (evlist != NULL)
-		evlist__init(evlist, NULL, NULL);
-
-	return evlist;
+	struct evlist *result;
+	RC_STRUCT(evlist) *evlist;
+
+	evlist = zalloc(sizeof(*evlist));
+	if (ADD_RC_CHK(result, evlist)) {
+		perf_evlist__init(evlist__core(result));
+		perf_evlist__set_maps(evlist__core(result), /*cpus=*/NULL, /*threads=*/NULL);
+		evlist__set_workload_pid(result, -1);
+		evlist__set_bkw_mmap_state(result, BKW_MMAP_NOTREADY);
+		evlist__set_ctl_fd_fd(result, -1);
+		evlist__set_ctl_fd_ack(result, -1);
+		evlist__set_ctl_fd_pos(result, -1);
+		evlist__set_nr_br_cntr(result, -1);
+		metricgroup__rblist_init(evlist__metric_events(result));
+		INIT_LIST_HEAD(&evlist->deferred_samples);
+		refcount_set(evlist__refcnt(result), 1);
+	} else {
+		free(evlist);
+		result = NULL;
+	}
+	return result;
 }
 
 struct evlist *evlist__new_default(const struct target *target, bool sample_callchains)
@@ -106,7 +108,6 @@ struct evlist *evlist__new_default(const struct target *target, bool sample_call
 	struct evlist *evlist = evlist__new();
 	bool can_profile_kernel;
 	struct perf_pmu *pmu = NULL;
-	struct evsel *evsel;
 	char buf[256];
 	int err;
 
@@ -133,7 +134,9 @@ struct evlist *evlist__new_default(const struct target *target, bool sample_call
 	}
 
 	/* If there is only 1 event a sample identifier isn't necessary. */
-	if (evlist->core.nr_entries > 1) {
+	if (evlist__nr_entries(evlist) > 1) {
+		struct evsel *evsel;
+
 		evlist__for_each_entry(evlist, evsel)
 			evsel__set_sample_id(evsel, /*can_sample_identifier=*/false);
 	}
@@ -158,8 +161,12 @@ struct evlist *evlist__new_dummy(void)
 
 struct evlist *evlist__get(struct evlist *evlist)
 {
-	refcount_inc(&evlist->refcnt);
-	return evlist;
+	struct evlist *result;
+
+	if (RC_CHK_GET(result, evlist))
+		refcount_inc(evlist__refcnt(evlist));
+
+	return result;
 }
 
 /**
@@ -173,8 +180,8 @@ void evlist__set_id_pos(struct evlist *evlist)
 {
 	struct evsel *first = evlist__first(evlist);
 
-	evlist->id_pos = first->id_pos;
-	evlist->is_pos = first->is_pos;
+	RC_CHK_ACCESS(evlist)->id_pos =  first->id_pos;
+	RC_CHK_ACCESS(evlist)->is_pos =  first->is_pos;
 }
 
 static void evlist__update_id_pos(struct evlist *evlist)
@@ -193,52 +200,85 @@ static void evlist__purge(struct evlist *evlist)
 
 	evlist__for_each_entry_safe(evlist, n, pos) {
 		list_del_init(&pos->core.node);
+		if (pos->evlist) {
+			if (!RC_CHK_EQUAL(pos->evlist, evlist)) {
+				evlist__put(pos->evlist);
+			} else {
+				refcount_dec_and_test(evlist__refcnt(pos->evlist));
+				RC_CHK_PUT(pos->evlist);
+			}
+		}
 		pos->evlist = NULL;
 		evsel__put(pos);
 	}
 
-	evlist->core.nr_entries = 0;
+	evlist__core(evlist)->nr_entries = 0;
 }
 
 static void evlist__exit(struct evlist *evlist)
 {
-	metricgroup__rblist_exit(&evlist->metric_events);
-	event_enable_timer__exit(&evlist->eet);
-	zfree(&evlist->mmap);
-	zfree(&evlist->overwrite_mmap);
-	perf_evlist__exit(&evlist->core);
+	metricgroup__rblist_exit(evlist__metric_events(evlist));
+	event_enable_timer__exit(&RC_CHK_ACCESS(evlist)->eet);
+	free(evlist__mmap(evlist));
+	free(evlist__overwrite_mmap(evlist));
+	perf_evlist__exit(evlist__core(evlist));
 }
 
 void evlist__put(struct evlist *evlist)
 {
+	struct evsel *evsel;
+	unsigned int count, ref_cnt;
+
 	if (evlist == NULL)
 		return;
 
-	if (!refcount_dec_and_test(&evlist->refcnt))
-		return;
+	if (refcount_dec_and_test(evlist__refcnt(evlist)))
+		goto out_delete;
+
+retry:
+	count = refcount_read(evlist__refcnt(evlist));
+	ref_cnt = count;
+	evlist__for_each_entry(evlist, evsel) {
+		if (RC_CHK_EQUAL(evsel->evlist, evlist) && count &&
+		    refcount_read(&evsel->refcnt) == 1)
+			count--;
+	}
+	if (refcount_read(evlist__refcnt(evlist)) != ref_cnt)
+		goto retry;
 
+	if (count != 0) {
+		/*
+		 * Not the last reference except for back references from
+		 * evsels.
+		 */
+		RC_CHK_PUT(evlist);
+		return;
+	}
+out_delete:
 	evlist__free_stats(evlist);
-	evlist__munmap(evlist);
+	evlist__do_munmap(evlist);
 	evlist__close(evlist);
 	evlist__purge(evlist);
 	evlist__exit(evlist);
-	free(evlist);
+	RC_CHK_FREE(evlist);
 }
 
 void evlist__add(struct evlist *evlist, struct evsel *entry)
 {
-	perf_evlist__add(&evlist->core, &entry->core);
-	entry->evlist = evlist;
+	perf_evlist__add(evlist__core(evlist), &entry->core);
+	evlist__put(entry->evlist);
+	entry->evlist = evlist__get(evlist);
 	entry->tracking = !entry->core.idx;
 
-	if (evlist->core.nr_entries == 1)
+	if (evlist__nr_entries(evlist) == 1)
 		evlist__set_id_pos(evlist);
 }
 
 void evlist__remove(struct evlist *evlist, struct evsel *evsel)
 {
+	perf_evlist__remove(evlist__core(evlist), &evsel->core);
+	evlist__put(evsel->evlist);
 	evsel->evlist = NULL;
-	perf_evlist__remove(&evlist->core, &evsel->core);
 }
 
 void evlist__splice_list_tail(struct evlist *evlist, struct list_head *list)
@@ -287,7 +327,7 @@ int __evlist__set_tracepoints_handlers(struct evlist *evlist,
 
 static void evlist__set_leader(struct evlist *evlist)
 {
-	perf_evlist__set_leader(&evlist->core);
+	perf_evlist__set_leader(evlist__core(evlist));
 }
 
 static struct evsel *evlist__dummy_event(struct evlist *evlist)
@@ -301,7 +341,7 @@ static struct evsel *evlist__dummy_event(struct evlist *evlist)
 		.sample_period = 1,
 	};
 
-	return evsel__new_idx(&attr, evlist->core.nr_entries);
+	return evsel__new_idx(&attr, evlist__nr_entries(evlist));
 }
 
 int evlist__add_dummy(struct evlist *evlist)
@@ -390,8 +430,8 @@ static bool evlist__use_affinity(struct evlist *evlist)
 	struct perf_cpu_map *used_cpus = NULL;
 	bool ret = false;
 
-	if (evlist->no_affinity || !evlist->core.user_requested_cpus ||
-	    cpu_map__is_dummy(evlist->core.user_requested_cpus))
+	if (evlist__no_affinity(evlist) || !evlist__core(evlist)->user_requested_cpus ||
+	    cpu_map__is_dummy(evlist__core(evlist)->user_requested_cpus))
 		return false;
 
 	evlist__for_each_entry(evlist, pos) {
@@ -446,7 +486,7 @@ void evlist_cpu_iterator__init(struct evlist_cpu_iterator *itr, struct evlist *e
 		.evsel = NULL,
 		.cpu_map_idx = 0,
 		.evlist_cpu_map_idx = 0,
-		.evlist_cpu_map_nr = perf_cpu_map__nr(evlist->core.all_cpus),
+		.evlist_cpu_map_nr = perf_cpu_map__nr(evlist__core(evlist)->all_cpus),
 		.cpu = (struct perf_cpu){ .cpu = -1},
 		.affinity = NULL,
 	};
@@ -462,7 +502,7 @@ void evlist_cpu_iterator__init(struct evlist_cpu_iterator *itr, struct evlist *e
 			itr->affinity = &itr->saved_affinity;
 	}
 	itr->evsel = evlist__first(evlist);
-	itr->cpu = perf_cpu_map__cpu(evlist->core.all_cpus, 0);
+	itr->cpu = perf_cpu_map__cpu(evlist__core(evlist)->all_cpus, 0);
 	if (itr->affinity)
 		affinity__set(itr->affinity, itr->cpu.cpu);
 	itr->cpu_map_idx = perf_cpu_map__idx(itr->evsel->core.cpus, itr->cpu);
@@ -497,7 +537,7 @@ void evlist_cpu_iterator__next(struct evlist_cpu_iterator *evlist_cpu_itr)
 	if (evlist_cpu_itr->evlist_cpu_map_idx < evlist_cpu_itr->evlist_cpu_map_nr) {
 		evlist_cpu_itr->evsel = evlist__first(evlist_cpu_itr->container);
 		evlist_cpu_itr->cpu =
-			perf_cpu_map__cpu(evlist_cpu_itr->container->core.all_cpus,
+			perf_cpu_map__cpu(evlist__core(evlist_cpu_itr->container)->all_cpus,
 					  evlist_cpu_itr->evlist_cpu_map_idx);
 		if (evlist_cpu_itr->affinity)
 			affinity__set(evlist_cpu_itr->affinity, evlist_cpu_itr->cpu.cpu);
@@ -524,7 +564,7 @@ static int evsel__strcmp(struct evsel *pos, char *evsel_name)
 	return !evsel__name_is(pos, evsel_name);
 }
 
-static int evlist__is_enabled(struct evlist *evlist)
+static bool evlist__is_enabled(struct evlist *evlist)
 {
 	struct evsel *pos;
 
@@ -581,10 +621,7 @@ static void __evlist__disable(struct evlist *evlist, char *evsel_name, bool excl
 	 * If we disabled only single event, we need to check
 	 * the enabled state of the evlist manually.
 	 */
-	if (evsel_name)
-		evlist->enabled = evlist__is_enabled(evlist);
-	else
-		evlist->enabled = false;
+	evlist__set_enabled(evlist, evsel_name ? evlist__is_enabled(evlist) : false);
 }
 
 void evlist__disable(struct evlist *evlist)
@@ -635,7 +672,7 @@ static void __evlist__enable(struct evlist *evlist, char *evsel_name, bool excl_
 	 * so the toggle can work properly and toggle to
 	 * 'disabled' state.
 	 */
-	evlist->enabled = true;
+	evlist__set_enabled(evlist, true);
 }
 
 void evlist__enable(struct evlist *evlist)
@@ -655,23 +692,24 @@ void evlist__enable_evsel(struct evlist *evlist, char *evsel_name)
 
 void evlist__toggle_enable(struct evlist *evlist)
 {
-	(evlist->enabled ? evlist__disable : evlist__enable)(evlist);
+	(evlist__enabled(evlist) ? evlist__disable : evlist__enable)(evlist);
 }
 
 int evlist__add_pollfd(struct evlist *evlist, int fd)
 {
-	return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, fdarray_flag__default);
+	return perf_evlist__add_pollfd(evlist__core(evlist), fd, NULL, POLLIN,
+				       fdarray_flag__default);
 }
 
 int evlist__filter_pollfd(struct evlist *evlist, short revents_and_mask)
 {
-	return perf_evlist__filter_pollfd(&evlist->core, revents_and_mask);
+	return perf_evlist__filter_pollfd(evlist__core(evlist), revents_and_mask);
 }
 
 #ifdef HAVE_EVENTFD_SUPPORT
 int evlist__add_wakeup_eventfd(struct evlist *evlist, int fd)
 {
-	return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN,
+	return perf_evlist__add_pollfd(evlist__core(evlist), fd, NULL, POLLIN,
 				       fdarray_flag__nonfilterable |
 				       fdarray_flag__non_perf_event);
 }
@@ -679,7 +717,7 @@ int evlist__add_wakeup_eventfd(struct evlist *evlist, int fd)
 
 int evlist__poll(struct evlist *evlist, int timeout)
 {
-	return perf_evlist__poll(&evlist->core, timeout);
+	return perf_evlist__poll(evlist__core(evlist), timeout);
 }
 
 struct perf_sample_id *evlist__id2sid(struct evlist *evlist, u64 id)
@@ -689,7 +727,7 @@ struct perf_sample_id *evlist__id2sid(struct evlist *evlist, u64 id)
 	int hash;
 
 	hash = hash_64(id, PERF_EVLIST__HLIST_BITS);
-	head = &evlist->core.heads[hash];
+	head = &evlist__core(evlist)->heads[hash];
 
 	hlist_for_each_entry(sid, head, node)
 		if (sid->id == id)
@@ -702,7 +740,7 @@ struct evsel *evlist__id2evsel(struct evlist *evlist, u64 id)
 {
 	struct perf_sample_id *sid;
 
-	if (evlist->core.nr_entries == 1 || !id)
+	if (evlist__nr_entries(evlist) == 1 || !id)
 		return evlist__first(evlist);
 
 	sid = evlist__id2sid(evlist, id);
@@ -737,13 +775,13 @@ static int evlist__event2id(struct evlist *evlist, union perf_event *event, u64
 	n = (event->header.size - sizeof(event->header)) >> 3;
 
 	if (event->header.type == PERF_RECORD_SAMPLE) {
-		if (evlist->id_pos >= n)
+		if (evlist__id_pos(evlist) >= n)
 			return -1;
-		*id = array[evlist->id_pos];
+		*id = array[evlist__id_pos(evlist)];
 	} else {
-		if (evlist->is_pos > n)
+		if (evlist__is_pos(evlist) > n)
 			return -1;
-		n -= evlist->is_pos;
+		n -= evlist__is_pos(evlist);
 		*id = array[n];
 	}
 	return 0;
@@ -757,7 +795,7 @@ struct evsel *evlist__event2evsel(struct evlist *evlist, union perf_event *event
 	int hash;
 	u64 id;
 
-	if (evlist->core.nr_entries == 1)
+	if (evlist__nr_entries(evlist) == 1)
 		return first;
 
 	if (!first->core.attr.sample_id_all &&
@@ -772,7 +810,7 @@ struct evsel *evlist__event2evsel(struct evlist *evlist, union perf_event *event
 		return first;
 
 	hash = hash_64(id, PERF_EVLIST__HLIST_BITS);
-	head = &evlist->core.heads[hash];
+	head = &evlist__core(evlist)->heads[hash];
 
 	hlist_for_each_entry(sid, head, node) {
 		if (sid->id == id)
@@ -785,11 +823,11 @@ static int evlist__set_paused(struct evlist *evlist, bool value)
 {
 	int i;
 
-	if (!evlist->overwrite_mmap)
+	if (!evlist__overwrite_mmap(evlist))
 		return 0;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		int fd = evlist->overwrite_mmap[i].core.fd;
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		int fd = evlist__overwrite_mmap(evlist)[i].core.fd;
 		int err;
 
 		if (fd < 0)
@@ -815,20 +853,20 @@ static void evlist__munmap_nofree(struct evlist *evlist)
 {
 	int i;
 
-	if (evlist->mmap)
-		for (i = 0; i < evlist->core.nr_mmaps; i++)
-			perf_mmap__munmap(&evlist->mmap[i].core);
+	if (evlist__mmap(evlist))
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++)
+			perf_mmap__munmap(&evlist__mmap(evlist)[i].core);
 
-	if (evlist->overwrite_mmap)
-		for (i = 0; i < evlist->core.nr_mmaps; i++)
-			perf_mmap__munmap(&evlist->overwrite_mmap[i].core);
+	if (evlist__overwrite_mmap(evlist))
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++)
+			perf_mmap__munmap(&evlist__overwrite_mmap(evlist)[i].core);
 }
 
-void evlist__munmap(struct evlist *evlist)
+void evlist__do_munmap(struct evlist *evlist)
 {
 	evlist__munmap_nofree(evlist);
-	zfree(&evlist->mmap);
-	zfree(&evlist->overwrite_mmap);
+	zfree(&RC_CHK_ACCESS(evlist)->mmap);
+	zfree(&RC_CHK_ACCESS(evlist)->overwrite_mmap);
 }
 
 static void perf_mmap__unmap_cb(struct perf_mmap *map)
@@ -842,12 +880,12 @@ static struct mmap *evlist__alloc_mmap(struct evlist *evlist,
 				       bool overwrite)
 {
 	int i;
-	struct mmap *map = calloc(evlist->core.nr_mmaps, sizeof(struct mmap));
+	struct mmap *map = calloc(evlist__core(evlist)->nr_mmaps, sizeof(struct mmap));
 
 	if (!map)
 		return NULL;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
 		struct perf_mmap *prev = i ? &map[i - 1].core : NULL;
 
 		/*
@@ -865,41 +903,73 @@ static struct mmap *evlist__alloc_mmap(struct evlist *evlist,
 	return map;
 }
 
+static struct evlist *from_list_start(struct perf_evlist *core)
+{
+#ifdef REFCNT_CHECKING
+	RC_STRUCT(evlist) *core_evlist = container_of(core, RC_STRUCT(evlist), core);
+	struct evlist *evlist;
+
+	if (ADD_RC_CHK(evlist, core_evlist))
+		refcount_inc(evlist__refcnt(evlist));
+
+	return evlist;
+#else
+	return container_of(core, struct evlist, core);
+#endif
+}
+
+static void from_list_end(struct evlist *evlist __maybe_unused)
+{
+#ifdef REFCNT_CHECKING
+	evlist__put(evlist);
+#endif
+}
+
 static void
 perf_evlist__mmap_cb_idx(struct perf_evlist *_evlist,
 			 struct perf_evsel *_evsel,
 			 struct perf_mmap_param *_mp,
 			 int idx)
 {
-	struct evlist *evlist = container_of(_evlist, struct evlist, core);
+	struct evlist *evlist = from_list_start(_evlist);
 	struct mmap_params *mp = container_of(_mp, struct mmap_params, core);
 	struct evsel *evsel = container_of(_evsel, struct evsel, core);
 
+	if (!evlist)
+		return;
+
 	auxtrace_mmap_params__set_idx(&mp->auxtrace_mp, evlist, evsel, idx);
+
+	from_list_end(evlist);
 }
 
 static struct perf_mmap*
 perf_evlist__mmap_cb_get(struct perf_evlist *_evlist, bool overwrite, int idx)
 {
-	struct evlist *evlist = container_of(_evlist, struct evlist, core);
+	struct evlist *evlist = from_list_start(_evlist);
 	struct mmap *maps;
 
-	maps = overwrite ? evlist->overwrite_mmap : evlist->mmap;
+	if (!evlist)
+		return NULL;
+
+	maps = overwrite ? evlist__overwrite_mmap(evlist) : evlist__mmap(evlist);
 
 	if (!maps) {
 		maps = evlist__alloc_mmap(evlist, overwrite);
-		if (!maps)
+		if (!maps) {
+			from_list_end(evlist);
 			return NULL;
+		}
 
 		if (overwrite) {
-			evlist->overwrite_mmap = maps;
-			if (evlist->bkw_mmap_state == BKW_MMAP_NOTREADY)
+			RC_CHK_ACCESS(evlist)->overwrite_mmap = maps;
+			if (evlist__bkw_mmap_state(evlist) == BKW_MMAP_NOTREADY)
 				evlist__toggle_bkw_mmap(evlist, BKW_MMAP_RUNNING);
 		} else {
-			evlist->mmap = maps;
+			RC_CHK_ACCESS(evlist)->mmap = maps;
 		}
 	}
-
+	from_list_end(evlist);
 	return &maps[idx].core;
 }
 
@@ -1056,16 +1126,16 @@ int evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
 		.mmap = perf_evlist__mmap_cb_mmap,
 	};
 
-	evlist->core.mmap_len = evlist__mmap_size(pages);
-	pr_debug("mmap size %zuB\n", evlist->core.mmap_len);
+	evlist__core(evlist)->mmap_len = evlist__mmap_size(pages);
+	pr_debug("mmap size %zuB\n", evlist__core(evlist)->mmap_len);
 
-	auxtrace_mmap_params__init(&mp.auxtrace_mp, evlist->core.mmap_len,
+	auxtrace_mmap_params__init(&mp.auxtrace_mp, evlist__core(evlist)->mmap_len,
 				   auxtrace_pages, auxtrace_overwrite);
 
-	return perf_evlist__mmap_ops(&evlist->core, &ops, &mp.core);
+	return perf_evlist__mmap_ops(evlist__core(evlist), &ops, &mp.core);
 }
 
-int evlist__mmap(struct evlist *evlist, unsigned int pages)
+int evlist__do_mmap(struct evlist *evlist, unsigned int pages)
 {
 	return evlist__mmap_ex(evlist, pages, 0, false, 0, PERF_AFFINITY_SYS, 1, 0);
 }
@@ -1107,9 +1177,9 @@ int evlist__create_maps(struct evlist *evlist, struct target *target)
 	if (!cpus)
 		goto out_delete_threads;
 
-	evlist->core.has_user_cpus = !!target->cpu_list;
+	evlist__core(evlist)->has_user_cpus = !!target->cpu_list;
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 
 	/* as evlist now has references, put count here */
 	perf_cpu_map__put(cpus);
@@ -1249,15 +1319,15 @@ bool evlist__valid_sample_type(struct evlist *evlist)
 {
 	struct evsel *pos;
 
-	if (evlist->core.nr_entries == 1)
+	if (evlist__nr_entries(evlist) == 1)
 		return true;
 
-	if (evlist->id_pos < 0 || evlist->is_pos < 0)
+	if (evlist__id_pos(evlist) < 0 || evlist__is_pos(evlist) < 0)
 		return false;
 
 	evlist__for_each_entry(evlist, pos) {
-		if (pos->id_pos != evlist->id_pos ||
-		    pos->is_pos != evlist->is_pos)
+		if (pos->id_pos != evlist__id_pos(evlist) ||
+		    pos->is_pos != evlist__is_pos(evlist))
 			return false;
 	}
 
@@ -1268,18 +1338,18 @@ u64 __evlist__combined_sample_type(struct evlist *evlist)
 {
 	struct evsel *evsel;
 
-	if (evlist->combined_sample_type)
-		return evlist->combined_sample_type;
+	if (RC_CHK_ACCESS(evlist)->combined_sample_type)
+		return RC_CHK_ACCESS(evlist)->combined_sample_type;
 
 	evlist__for_each_entry(evlist, evsel)
-		evlist->combined_sample_type |= evsel->core.attr.sample_type;
+		RC_CHK_ACCESS(evlist)->combined_sample_type |= evsel->core.attr.sample_type;
 
-	return evlist->combined_sample_type;
+	return RC_CHK_ACCESS(evlist)->combined_sample_type;
 }
 
 u64 evlist__combined_sample_type(struct evlist *evlist)
 {
-	evlist->combined_sample_type = 0;
+	RC_CHK_ACCESS(evlist)->combined_sample_type = 0;
 	return __evlist__combined_sample_type(evlist);
 }
 
@@ -1356,7 +1426,7 @@ void evlist__update_br_cntr(struct evlist *evlist)
 				evlist__new_abbr_name(evsel->abbr_name);
 		}
 	}
-	evlist->nr_br_cntr = i;
+	evlist__set_nr_br_cntr(evlist, i);
 }
 
 bool evlist__valid_read_format(struct evlist *evlist)
@@ -1406,11 +1476,6 @@ bool evlist__sample_id_all(struct evlist *evlist)
 	return first->core.attr.sample_id_all;
 }
 
-void evlist__set_selected(struct evlist *evlist, struct evsel *evsel)
-{
-	evlist->selected = evsel;
-}
-
 void evlist__close(struct evlist *evlist)
 {
 	struct evsel *evsel;
@@ -1427,7 +1492,7 @@ void evlist__close(struct evlist *evlist)
 		perf_evsel__free_fd(&evsel->core);
 		perf_evsel__free_id(&evsel->core);
 	}
-	perf_evlist__reset_id_hash(&evlist->core);
+	perf_evlist__reset_id_hash(evlist__core(evlist));
 }
 
 static int evlist__create_syswide_maps(struct evlist *evlist)
@@ -1454,7 +1519,7 @@ static int evlist__create_syswide_maps(struct evlist *evlist)
 		return -ENOMEM;
 	}
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 	perf_thread_map__put(threads);
 	perf_cpu_map__put(cpus);
 	return 0;
@@ -1469,7 +1534,8 @@ int evlist__open(struct evlist *evlist)
 	 * Default: one fd per CPU, all threads, aka systemwide
 	 * as sys_perf_event_open(cpu = -1, thread = -1) is EINVAL
 	 */
-	if (evlist->core.threads == NULL && evlist->core.user_requested_cpus == NULL) {
+	if (evlist__core(evlist)->threads == NULL &&
+	    evlist__core(evlist)->user_requested_cpus == NULL) {
 		err = evlist__create_syswide_maps(evlist);
 		if (err < 0)
 			goto out_err;
@@ -1496,7 +1562,7 @@ int evlist__prepare_workload(struct evlist *evlist, struct target *target, const
 	int child_ready_pipe[2], go_pipe[2];
 	char bf;
 
-	evlist->workload.cork_fd = -1;
+	evlist__set_workload_cork_fd(evlist, -1);
 
 	if (pipe(child_ready_pipe) < 0) {
 		perror("failed to create 'ready' pipe");
@@ -1508,13 +1574,13 @@ int evlist__prepare_workload(struct evlist *evlist, struct target *target, const
 		goto out_close_ready_pipe;
 	}
 
-	evlist->workload.pid = fork();
-	if (evlist->workload.pid < 0) {
+	evlist__set_workload_pid(evlist, fork());
+	if (evlist__workload_pid(evlist) < 0) {
 		perror("failed to fork");
 		goto out_close_pipes;
 	}
 
-	if (!evlist->workload.pid) {
+	if (!evlist__workload_pid(evlist)) {
 		int ret;
 
 		if (pipe_output)
@@ -1580,12 +1646,13 @@ int evlist__prepare_workload(struct evlist *evlist, struct target *target, const
 	}
 
 	if (target__none(target)) {
-		if (evlist->core.threads == NULL) {
+		if (evlist__core(evlist)->threads == NULL) {
 			fprintf(stderr, "FATAL: evlist->threads need to be set at this point (%s:%d).\n",
 				__func__, __LINE__);
 			goto out_close_pipes;
 		}
-		perf_thread_map__set_pid(evlist->core.threads, 0, evlist->workload.pid);
+		perf_thread_map__set_pid(evlist__core(evlist)->threads, 0,
+					 evlist__workload_pid(evlist));
 	}
 
 	close(child_ready_pipe[1]);
@@ -1599,7 +1666,7 @@ int evlist__prepare_workload(struct evlist *evlist, struct target *target, const
 	}
 
 	fcntl(go_pipe[1], F_SETFD, FD_CLOEXEC);
-	evlist->workload.cork_fd = go_pipe[1];
+	evlist__set_workload_cork_fd(evlist, go_pipe[1]);
 	close(child_ready_pipe[0]);
 	return 0;
 
@@ -1614,18 +1681,18 @@ int evlist__prepare_workload(struct evlist *evlist, struct target *target, const
 
 int evlist__start_workload(struct evlist *evlist)
 {
-	if (evlist->workload.cork_fd >= 0) {
+	if (evlist__workload_cork_fd(evlist) >= 0) {
 		char bf = 0;
 		int ret;
 		/*
 		 * Remove the cork, let it rip!
 		 */
-		ret = write(evlist->workload.cork_fd, &bf, 1);
+		ret = write(evlist__workload_cork_fd(evlist), &bf, 1);
 		if (ret < 0)
 			perror("unable to write to pipe");
 
-		close(evlist->workload.cork_fd);
-		evlist->workload.cork_fd = -1;
+		close(evlist__workload_cork_fd(evlist));
+		evlist__set_workload_cork_fd(evlist, -1);
 		return ret;
 	}
 
@@ -1636,10 +1703,10 @@ void evlist__cancel_workload(struct evlist *evlist)
 {
 	int status;
 
-	if (evlist->workload.cork_fd >= 0) {
-		close(evlist->workload.cork_fd);
-		evlist->workload.cork_fd = -1;
-		waitpid(evlist->workload.pid, &status, WNOHANG);
+	if (evlist__workload_cork_fd(evlist) >= 0) {
+		close(evlist__workload_cork_fd(evlist));
+		evlist__set_workload_cork_fd(evlist, -1);
+		waitpid(evlist__workload_pid(evlist), &status, WNOHANG);
 	}
 }
 
@@ -1733,7 +1800,8 @@ int evlist__strerror_open(struct evlist *evlist, int err, char *buf, size_t size
 
 int evlist__strerror_mmap(struct evlist *evlist, int err, char *buf, size_t size)
 {
-	int pages_attempted = evlist->core.mmap_len / 1024, pages_max_per_user, printed = 0;
+	int pages_attempted = evlist__core(evlist)->mmap_len / 1024;
+	int pages_max_per_user, printed = 0;
 
 	switch (err) {
 	case EPERM:
@@ -1776,7 +1844,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel)
 			list_move_tail(&evsel->core.node, &move);
 	}
 
-	list_splice(&move, &evlist->core.entries);
+	list_splice(&move, &evlist__core(evlist)->entries);
 }
 
 struct evsel *evlist__get_tracking_event(struct evlist *evlist)
@@ -1818,7 +1886,7 @@ struct evsel *evlist__findnew_tracking_event(struct evlist *evlist, bool system_
 
 		evlist__set_tracking_event(evlist, evsel);
 	} else if (system_wide) {
-		perf_evlist__go_system_wide(&evlist->core, &evsel->core);
+		perf_evlist__go_system_wide(evlist__core(evlist), &evsel->core);
 	}
 
 	return evsel;
@@ -1840,14 +1908,14 @@ struct evsel *evlist__find_evsel_by_str(struct evlist *evlist, const char *str)
 
 void evlist__toggle_bkw_mmap(struct evlist *evlist, enum bkw_mmap_state state)
 {
-	enum bkw_mmap_state old_state = evlist->bkw_mmap_state;
+	enum bkw_mmap_state old_state = evlist__bkw_mmap_state(evlist);
 	enum action {
 		NONE,
 		PAUSE,
 		RESUME,
 	} action = NONE;
 
-	if (!evlist->overwrite_mmap)
+	if (!evlist__overwrite_mmap(evlist))
 		return;
 
 	switch (old_state) {
@@ -1877,7 +1945,7 @@ void evlist__toggle_bkw_mmap(struct evlist *evlist, enum bkw_mmap_state state)
 		WARN_ONCE(1, "Shouldn't get there\n");
 	}
 
-	evlist->bkw_mmap_state = state;
+	evlist__set_bkw_mmap_state(evlist, state);
 
 	switch (action) {
 	case PAUSE:
@@ -2055,40 +2123,41 @@ int evlist__initialize_ctlfd(struct evlist *evlist, int fd, int ack)
 		return 0;
 	}
 
-	evlist->ctl_fd.pos = perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN,
-						     fdarray_flag__nonfilterable |
-						     fdarray_flag__non_perf_event);
-	if (evlist->ctl_fd.pos < 0) {
-		evlist->ctl_fd.pos = -1;
+	evlist__set_ctl_fd_pos(evlist,
+			       perf_evlist__add_pollfd(evlist__core(evlist), fd, NULL, POLLIN,
+						       fdarray_flag__nonfilterable |
+						       fdarray_flag__non_perf_event));
+	if (evlist__ctl_fd_pos(evlist) < 0) {
+		evlist__set_ctl_fd_pos(evlist, -1);
 		pr_err("Failed to add ctl fd entry: %m\n");
 		return -1;
 	}
 
-	evlist->ctl_fd.fd = fd;
-	evlist->ctl_fd.ack = ack;
+	evlist__set_ctl_fd_fd(evlist, fd);
+	evlist__set_ctl_fd_ack(evlist, ack);
 
 	return 0;
 }
 
 bool evlist__ctlfd_initialized(struct evlist *evlist)
 {
-	return evlist->ctl_fd.pos >= 0;
+	return evlist__ctl_fd_pos(evlist) >= 0;
 }
 
 int evlist__finalize_ctlfd(struct evlist *evlist)
 {
-	struct pollfd *entries = evlist->core.pollfd.entries;
+	struct pollfd *entries = evlist__core(evlist)->pollfd.entries;
 
 	if (!evlist__ctlfd_initialized(evlist))
 		return 0;
 
-	entries[evlist->ctl_fd.pos].fd = -1;
-	entries[evlist->ctl_fd.pos].events = 0;
-	entries[evlist->ctl_fd.pos].revents = 0;
+	entries[evlist__ctl_fd_pos(evlist)].fd = -1;
+	entries[evlist__ctl_fd_pos(evlist)].events = 0;
+	entries[evlist__ctl_fd_pos(evlist)].revents = 0;
 
-	evlist->ctl_fd.pos = -1;
-	evlist->ctl_fd.ack = -1;
-	evlist->ctl_fd.fd = -1;
+	evlist__set_ctl_fd_pos(evlist, -1);
+	evlist__set_ctl_fd_ack(evlist, -1);
+	evlist__set_ctl_fd_fd(evlist, -1);
 
 	return 0;
 }
@@ -2105,7 +2174,7 @@ static int evlist__ctlfd_recv(struct evlist *evlist, enum evlist_ctl_cmd *cmd,
 	data_size--;
 
 	do {
-		err = read(evlist->ctl_fd.fd, &c, 1);
+		err = read(evlist__ctl_fd_fd(evlist), &c, 1);
 		if (err > 0) {
 			if (c == '\n' || c == '\0')
 				break;
@@ -2119,7 +2188,8 @@ static int evlist__ctlfd_recv(struct evlist *evlist, enum evlist_ctl_cmd *cmd,
 			if (errno == EAGAIN || errno == EWOULDBLOCK)
 				err = 0;
 			else
-				pr_err("Failed to read from ctlfd %d: %m\n", evlist->ctl_fd.fd);
+				pr_err("Failed to read from ctlfd %d: %m\n",
+				       evlist__ctl_fd_fd(evlist));
 		}
 		break;
 	} while (1);
@@ -2157,13 +2227,13 @@ int evlist__ctlfd_ack(struct evlist *evlist)
 {
 	int err;
 
-	if (evlist->ctl_fd.ack == -1)
+	if (evlist__ctl_fd_ack(evlist) == -1)
 		return 0;
 
-	err = write(evlist->ctl_fd.ack, EVLIST_CTL_CMD_ACK_TAG,
+	err = write(evlist__ctl_fd_ack(evlist), EVLIST_CTL_CMD_ACK_TAG,
 		    sizeof(EVLIST_CTL_CMD_ACK_TAG));
 	if (err == -1)
-		pr_err("failed to write to ctl_ack_fd %d: %m\n", evlist->ctl_fd.ack);
+		pr_err("failed to write to ctl_ack_fd %d: %m\n", evlist__ctl_fd_ack(evlist));
 
 	return err;
 }
@@ -2264,8 +2334,8 @@ int evlist__ctlfd_process(struct evlist *evlist, enum evlist_ctl_cmd *cmd)
 {
 	int err = 0;
 	char cmd_data[EVLIST_CTL_CMD_MAX_LEN];
-	int ctlfd_pos = evlist->ctl_fd.pos;
-	struct pollfd *entries = evlist->core.pollfd.entries;
+	int ctlfd_pos = evlist__ctl_fd_pos(evlist);
+	struct pollfd *entries = evlist__core(evlist)->pollfd.entries;
 
 	if (!evlist__ctlfd_initialized(evlist) || !entries[ctlfd_pos].revents)
 		return 0;
@@ -2436,14 +2506,15 @@ int evlist__parse_event_enable_time(struct evlist *evlist, struct record_opts *o
 		goto free_eet_times;
 	}
 
-	eet->pollfd_pos = perf_evlist__add_pollfd(&evlist->core, eet->timerfd, NULL, POLLIN, flags);
+	eet->pollfd_pos = perf_evlist__add_pollfd(evlist__core(evlist), eet->timerfd,
+						  NULL, POLLIN, flags);
 	if (eet->pollfd_pos < 0) {
 		err = eet->pollfd_pos;
 		goto close_timerfd;
 	}
 
 	eet->evlist = evlist;
-	evlist->eet = eet;
+	RC_CHK_ACCESS(evlist)->eet = eet;
 	opts->target.initial_delay = eet->times[0].start;
 
 	return 0;
@@ -2493,7 +2564,7 @@ int event_enable_timer__process(struct event_enable_timer *eet)
 	if (!eet)
 		return 0;
 
-	entries = eet->evlist->core.pollfd.entries;
+	entries = evlist__core(eet->evlist)->pollfd.entries;
 	revents = entries[eet->pollfd_pos].revents;
 	entries[eet->pollfd_pos].revents = 0;
 
@@ -2529,7 +2600,7 @@ int event_enable_timer__process(struct event_enable_timer *eet)
 	return 0;
 }
 
-void event_enable_timer__exit(struct event_enable_timer **ep)
+static void event_enable_timer__exit(struct event_enable_timer **ep)
 {
 	if (!ep || !*ep)
 		return;
@@ -2633,7 +2704,7 @@ void evlist__warn_user_requested_cpus(struct evlist *evlist, const char *cpu_lis
 }
 
 /* Should uniquify be disabled for the evlist? */
-static bool evlist__disable_uniquify(const struct evlist *evlist)
+static bool evlist__disable_uniquify(struct evlist *evlist)
 {
 	struct evsel *counter;
 	struct perf_pmu *last_pmu = NULL;
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 866392011f6b3..1997843dca0ef 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -9,6 +9,7 @@
 #include <api/fd/array.h>
 #include <internal/evlist.h>
 #include <internal/evsel.h>
+#include <internal/rc_check.h>
 #include <perf/evlist.h>
 #include "affinity.h"
 #include "events_stats.h"
@@ -56,7 +57,7 @@ enum bkw_mmap_state {
 
 struct event_enable_timer;
 
-struct evlist {
+DECLARE_RC_STRUCT(evlist) {
 	struct perf_evlist core;
 	refcount_t	 refcnt;
 	bool		 enabled;
@@ -83,7 +84,7 @@ struct evlist {
 	struct {
 		pthread_t		th;
 		volatile int		done;
-	} thread;
+	} sb_thread;
 	struct {
 		int	fd;	/* control file descriptor */
 		int	ack;	/* ack file descriptor for control commands */
@@ -104,6 +105,227 @@ struct evsel_str_handler {
 	void	   *handler;
 };
 
+static inline struct perf_evlist *evlist__core(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->core;
+}
+
+static inline const struct perf_evlist *evlist__const_core(const struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->core;
+}
+
+static inline int evlist__nr_entries(const struct evlist *evlist)
+{
+	return evlist__const_core(evlist)->nr_entries;
+}
+
+static inline bool evlist__enabled(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->enabled;
+}
+
+static inline void evlist__set_enabled(struct evlist *evlist, bool enabled)
+{
+	RC_CHK_ACCESS(evlist)->enabled = enabled;
+}
+
+static inline bool evlist__no_affinity(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->no_affinity;
+}
+
+static inline void evlist__set_no_affinity(struct evlist *evlist, bool no_affinity)
+{
+	RC_CHK_ACCESS(evlist)->no_affinity = no_affinity;
+}
+
+static inline int evlist__sb_thread_done(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->sb_thread.done;
+}
+
+static inline void evlist__set_sb_thread_done(struct evlist *evlist, int done)
+{
+	RC_CHK_ACCESS(evlist)->sb_thread.done = done;
+}
+
+static inline pthread_t *evlist__sb_thread_th(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->sb_thread.th;
+}
+
+static inline int evlist__id_pos(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->id_pos;
+}
+
+static inline int evlist__is_pos(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->is_pos;
+}
+
+static inline struct event_enable_timer *evlist__event_enable_timer(struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->eet;
+}
+
+static inline enum bkw_mmap_state evlist__bkw_mmap_state(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->bkw_mmap_state;
+}
+
+static inline void evlist__set_bkw_mmap_state(struct evlist *evlist, enum bkw_mmap_state state)
+{
+	RC_CHK_ACCESS(evlist)->bkw_mmap_state = state;
+}
+
+static inline struct mmap *evlist__mmap(struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->mmap;
+}
+
+static inline struct mmap *evlist__overwrite_mmap(struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->overwrite_mmap;
+}
+
+static inline struct events_stats *evlist__stats(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->stats;
+}
+
+static inline u64 evlist__first_sample_time(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->first_sample_time;
+}
+
+static inline void evlist__set_first_sample_time(struct evlist *evlist, u64 first)
+{
+	RC_CHK_ACCESS(evlist)->first_sample_time = first;
+}
+
+static inline u64 evlist__last_sample_time(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->last_sample_time;
+}
+
+static inline void evlist__set_last_sample_time(struct evlist *evlist, u64 last)
+{
+	RC_CHK_ACCESS(evlist)->last_sample_time = last;
+}
+
+static inline int evlist__nr_br_cntr(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->nr_br_cntr;
+}
+
+static inline void evlist__set_nr_br_cntr(struct evlist *evlist, int nr)
+{
+	RC_CHK_ACCESS(evlist)->nr_br_cntr = nr;
+}
+
+static inline struct perf_session *evlist__session(struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->session;
+}
+
+static inline void evlist__set_session(struct evlist *evlist, struct perf_session *session)
+{
+	RC_CHK_ACCESS(evlist)->session = session;
+}
+
+static inline void (*evlist__trace_event_sample_raw(struct evlist *evlist))
+			(struct evlist *evlist,
+			 union perf_event *event,
+			 struct perf_sample *sample)
+{
+	return RC_CHK_ACCESS(evlist)->trace_event_sample_raw;
+}
+
+static inline void evlist__set_trace_event_sample_raw(struct evlist *evlist,
+						void (*fun)(struct evlist *evlist,
+							union perf_event *event,
+							struct perf_sample *sample))
+{
+	RC_CHK_ACCESS(evlist)->trace_event_sample_raw = fun;
+}
+
+static inline pid_t evlist__workload_pid(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->workload.pid;
+}
+
+static inline void evlist__set_workload_pid(struct evlist *evlist, pid_t pid)
+{
+	RC_CHK_ACCESS(evlist)->workload.pid = pid;
+}
+
+static inline int evlist__workload_cork_fd(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->workload.cork_fd;
+}
+
+static inline void evlist__set_workload_cork_fd(struct evlist *evlist, int cork_fd)
+{
+	RC_CHK_ACCESS(evlist)->workload.cork_fd = cork_fd;
+}
+
+static inline int evlist__ctl_fd_fd(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->ctl_fd.fd;
+}
+
+static inline void evlist__set_ctl_fd_fd(struct evlist *evlist, int fd)
+{
+	RC_CHK_ACCESS(evlist)->ctl_fd.fd = fd;
+}
+
+static inline int evlist__ctl_fd_ack(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->ctl_fd.ack;
+}
+
+static inline void evlist__set_ctl_fd_ack(struct evlist *evlist, int ack)
+{
+	RC_CHK_ACCESS(evlist)->ctl_fd.ack = ack;
+}
+
+static inline int evlist__ctl_fd_pos(const struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->ctl_fd.pos;
+}
+
+static inline void evlist__set_ctl_fd_pos(struct evlist *evlist, int pos)
+{
+	RC_CHK_ACCESS(evlist)->ctl_fd.pos = pos;
+}
+
+static inline refcount_t *evlist__refcnt(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->refcnt;
+}
+
+static inline struct rblist *evlist__metric_events(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->metric_events;
+}
+
+static inline struct list_head *evlist__deferred_samples(struct evlist *evlist)
+{
+	return &RC_CHK_ACCESS(evlist)->deferred_samples;
+}
+
+static inline struct evsel *evlist__selected(struct evlist *evlist)
+{
+	return RC_CHK_ACCESS(evlist)->selected;
+}
+
+static inline void evlist__set_selected(struct evlist *evlist, struct evsel *evsel)
+{
+	RC_CHK_ACCESS(evlist)->selected = evsel;
+}
+
 struct evlist *evlist__new(void);
 struct evlist *evlist__new_default(const struct target *target, bool sample_callchains);
 struct evlist *evlist__new_dummy(void);
@@ -197,8 +419,8 @@ int evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
 			 unsigned int auxtrace_pages,
 			 bool auxtrace_overwrite, int nr_cblocks,
 			 int affinity, int flush, int comp_level);
-int evlist__mmap(struct evlist *evlist, unsigned int pages);
-void evlist__munmap(struct evlist *evlist);
+int evlist__do_mmap(struct evlist *evlist, unsigned int pages);
+void evlist__do_munmap(struct evlist *evlist);
 
 size_t evlist__mmap_size(unsigned long pages);
 
@@ -210,8 +432,6 @@ void evlist__enable_evsel(struct evlist *evlist, char *evsel_name);
 void evlist__disable_non_dummy(struct evlist *evlist);
 void evlist__enable_non_dummy(struct evlist *evlist);
 
-void evlist__set_selected(struct evlist *evlist, struct evsel *evsel);
-
 int evlist__create_maps(struct evlist *evlist, struct target *target);
 int evlist__apply_filters(struct evlist *evlist, struct evsel **err_evsel,
 			  struct target *target);
@@ -234,26 +454,26 @@ void evlist__splice_list_tail(struct evlist *evlist, struct list_head *list);
 
 static inline bool evlist__empty(struct evlist *evlist)
 {
-	return list_empty(&evlist->core.entries);
+	return list_empty(&evlist__core(evlist)->entries);
 }
 
 static inline struct evsel *evlist__first(struct evlist *evlist)
 {
-	struct perf_evsel *evsel = perf_evlist__first(&evlist->core);
+	struct perf_evsel *evsel = perf_evlist__first(evlist__core(evlist));
 
 	return container_of(evsel, struct evsel, core);
 }
 
 static inline struct evsel *evlist__last(struct evlist *evlist)
 {
-	struct perf_evsel *evsel = perf_evlist__last(&evlist->core);
+	struct perf_evsel *evsel = perf_evlist__last(evlist__core(evlist));
 
 	return container_of(evsel, struct evsel, core);
 }
 
 static inline int evlist__nr_groups(struct evlist *evlist)
 {
-	return perf_evlist__nr_groups(&evlist->core);
+	return perf_evlist__nr_groups(evlist__core(evlist));
 }
 
 int evlist__strerror_open(struct evlist *evlist, int err, char *buf, size_t size);
@@ -276,7 +496,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel);
  * @evsel: struct evsel iterator
  */
 #define evlist__for_each_entry(evlist, evsel) \
-	__evlist__for_each_entry(&(evlist)->core.entries, evsel)
+	__evlist__for_each_entry(&evlist__core(evlist)->entries, evsel)
 
 /**
  * __evlist__for_each_entry_continue - continue iteration thru all the evsels
@@ -292,7 +512,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel);
  * @evsel: struct evsel iterator
  */
 #define evlist__for_each_entry_continue(evlist, evsel) \
-	__evlist__for_each_entry_continue(&(evlist)->core.entries, evsel)
+	__evlist__for_each_entry_continue(&evlist__core(evlist)->entries, evsel)
 
 /**
  * __evlist__for_each_entry_from - continue iteration from @evsel (included)
@@ -308,7 +528,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel);
  * @evsel: struct evsel iterator
  */
 #define evlist__for_each_entry_from(evlist, evsel) \
-	__evlist__for_each_entry_from(&(evlist)->core.entries, evsel)
+	__evlist__for_each_entry_from(&evlist__core(evlist)->entries, evsel)
 
 /**
  * __evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
@@ -324,7 +544,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel);
  * @evsel: struct evsel iterator
  */
 #define evlist__for_each_entry_reverse(evlist, evsel) \
-	__evlist__for_each_entry_reverse(&(evlist)->core.entries, evsel)
+	__evlist__for_each_entry_reverse(&evlist__core(evlist)->entries, evsel)
 
 /**
  * __evlist__for_each_entry_safe - safely iterate thru all the evsels
@@ -342,7 +562,7 @@ void evlist__to_front(struct evlist *evlist, struct evsel *move_evsel);
  * @tmp: struct evsel temp iterator
  */
 #define evlist__for_each_entry_safe(evlist, tmp, evsel) \
-	__evlist__for_each_entry_safe(&(evlist)->core.entries, tmp, evsel)
+	__evlist__for_each_entry_safe(&evlist__core(evlist)->entries, tmp, evsel)
 
 /** Iterator state for evlist__for_each_cpu */
 struct evlist_cpu_iterator {
@@ -448,7 +668,6 @@ int evlist__ctlfd_ack(struct evlist *evlist);
 int evlist__parse_event_enable_time(struct evlist *evlist, struct record_opts *opts,
 				    const char *str, int unset);
 int event_enable_timer__start(struct event_enable_timer *eet);
-void event_enable_timer__exit(struct event_enable_timer **ep);
 int event_enable_timer__process(struct event_enable_timer *eet);
 
 struct evsel *evlist__find_evsel(struct evlist *evlist, int idx);
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 395488ae36722..d5f7dbce7588d 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -3356,7 +3356,7 @@ static inline bool evsel__has_branch_counters(const struct evsel *evsel)
 	if (!leader || !evsel->evlist)
 		return false;
 
-	if (evsel->evlist->nr_br_cntr < 0)
+	if (evlist__nr_br_cntr(evsel->evlist) < 0)
 		evlist__update_br_cntr(evsel->evlist);
 
 	if (leader->br_cntr_nr > 0)
@@ -4388,7 +4388,7 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target,
 
 struct perf_session *evsel__session(struct evsel *evsel)
 {
-	return evsel && evsel->evlist ? evsel->evlist->session : NULL;
+	return evsel && evsel->evlist ? evlist__session(evsel->evlist) : NULL;
 }
 
 struct perf_env *evsel__env(struct evsel *evsel)
@@ -4413,7 +4413,7 @@ static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist)
 		     thread++) {
 			int fd = FD(evsel, cpu_map_idx, thread);
 
-			if (perf_evlist__id_add_fd(&evlist->core, &evsel->core,
+			if (perf_evlist__id_add_fd(evlist__core(evlist), &evsel->core,
 						   cpu_map_idx, thread, fd) < 0)
 				return -1;
 		}
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 0c0ab23823931..e4776fdeb4c29 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -535,7 +535,7 @@ for ((_evsel) = list_entry((_leader)->core.node.next, struct evsel, core.node);
 	(_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node))
 
 #define for_each_group_member(_evsel, _leader)				\
-	for_each_group_member_head(_evsel, _leader, &(_leader)->evlist->core.entries)
+	for_each_group_member_head(_evsel, _leader, &evlist__core((_leader)->evlist)->entries)
 
 /* Iterates group WITH the leader. */
 #define for_each_group_evsel_head(_evsel, _leader, _head)				\
@@ -545,7 +545,7 @@ for ((_evsel) = _leader;								\
 	(_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node))
 
 #define for_each_group_evsel(_evsel, _leader)				\
-	for_each_group_evsel_head(_evsel, _leader, &(_leader)->evlist->core.entries)
+	for_each_group_evsel_head(_evsel, _leader, &evlist__core((_leader)->evlist)->entries)
 
 static inline bool evsel__has_branch_callstack(const struct evsel *evsel)
 {
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 167ec2703d0e6..e90e541f546b4 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -385,7 +385,7 @@ static int write_tracing_data(struct feat_fd *ff,
 		return -1;
 
 #ifdef HAVE_LIBTRACEEVENT
-	return read_tracing_data(ff->fd, &evlist->core.entries);
+	return read_tracing_data(ff->fd, &evlist__core(evlist)->entries);
 #else
 	pr_err("ERROR: Trying to write tracing data without libtraceevent support.\n");
 	return -1;
@@ -434,8 +434,8 @@ static int write_osrelease(struct feat_fd *ff,
 	struct utsname uts;
 	const char *release = NULL;
 
-	if (evlist->session)
-		release = perf_env__os_release(perf_session__env(evlist->session));
+	if (evlist__session(evlist))
+		release = perf_env__os_release(perf_session__env(evlist__session(evlist)));
 
 	if (!release) {
 		int ret = uname(&uts);
@@ -452,8 +452,8 @@ static int write_arch(struct feat_fd *ff, struct evlist *evlist)
 	struct utsname uts;
 	const char *arch = NULL;
 
-	if (evlist->session)
-		arch = perf_env__arch(perf_session__env(evlist->session));
+	if (evlist__session(evlist))
+		arch = perf_env__arch(perf_session__env(evlist__session(evlist)));
 
 	if (!arch) {
 		int ret = uname(&uts);
@@ -469,7 +469,7 @@ static int write_e_machine(struct feat_fd *ff, struct evlist *evlist)
 {
 	/* e_machine expanded from 16 to 32-bits for alignment. */
 	uint32_t e_flags;
-	uint32_t e_machine = perf_session__e_machine(evlist->session, &e_flags);
+	uint32_t e_machine = perf_session__e_machine(evlist__session(evlist), &e_flags);
 	int ret;
 
 	ret = do_write(ff, &e_machine, sizeof(e_machine));
@@ -605,7 +605,7 @@ static int write_event_desc(struct feat_fd *ff,
 	u32 nre, nri, sz;
 	int ret;
 
-	nre = evlist->core.nr_entries;
+	nre = evlist__nr_entries(evlist);
 
 	/*
 	 * write number of events
@@ -987,7 +987,7 @@ int __weak get_cpuid(char *buffer __maybe_unused, size_t sz __maybe_unused,
 
 static int write_cpuid(struct feat_fd *ff, struct evlist *evlist)
 {
-	struct perf_cpu cpu = perf_cpu_map__min(evlist->core.all_cpus);
+	struct perf_cpu cpu = perf_cpu_map__min(evlist__core(evlist)->all_cpus);
 	char buffer[64];
 	int ret;
 
@@ -1420,14 +1420,14 @@ static int write_sample_time(struct feat_fd *ff,
 			     struct evlist *evlist)
 {
 	int ret;
+	u64 data = evlist__first_sample_time(evlist);
 
-	ret = do_write(ff, &evlist->first_sample_time,
-		       sizeof(evlist->first_sample_time));
+	ret = do_write(ff, &data, sizeof(data));
 	if (ret < 0)
 		return ret;
 
-	return do_write(ff, &evlist->last_sample_time,
-			sizeof(evlist->last_sample_time));
+	data = evlist__last_sample_time(evlist);
+	return do_write(ff, &data, sizeof(data));
 }
 
 
@@ -2551,16 +2551,16 @@ static void print_sample_time(struct feat_fd *ff, FILE *fp)
 
 	session = container_of(ff->ph, struct perf_session, header);
 
-	timestamp__scnprintf_usec(session->evlist->first_sample_time,
+	timestamp__scnprintf_usec(evlist__first_sample_time(session->evlist),
 				  time_buf, sizeof(time_buf));
 	fprintf(fp, "# time of first sample : %s\n", time_buf);
 
-	timestamp__scnprintf_usec(session->evlist->last_sample_time,
+	timestamp__scnprintf_usec(evlist__last_sample_time(session->evlist),
 				  time_buf, sizeof(time_buf));
 	fprintf(fp, "# time of last sample : %s\n", time_buf);
 
-	d = (double)(session->evlist->last_sample_time -
-		session->evlist->first_sample_time) / NSEC_PER_MSEC;
+	d = (double)(evlist__last_sample_time(session->evlist) -
+		evlist__first_sample_time(session->evlist)) / NSEC_PER_MSEC;
 
 	fprintf(fp, "# sample duration : %10.3f ms\n", d);
 }
@@ -3519,8 +3519,8 @@ static int process_sample_time(struct feat_fd *ff, void *data __maybe_unused)
 	if (ret)
 		return -1;
 
-	session->evlist->first_sample_time = first_sample_time;
-	session->evlist->last_sample_time = last_sample_time;
+	evlist__set_first_sample_time(session->evlist, first_sample_time);
+	evlist__set_last_sample_time(session->evlist, last_sample_time);
 	return 0;
 }
 
@@ -4610,7 +4610,7 @@ int perf_session__write_header(struct perf_session *session,
 					     /*write_attrs_after_data=*/false);
 }
 
-size_t perf_session__data_offset(const struct evlist *evlist)
+size_t perf_session__data_offset(struct evlist *evlist)
 {
 	struct evsel *evsel;
 	size_t data_offset;
@@ -4619,7 +4619,7 @@ size_t perf_session__data_offset(const struct evlist *evlist)
 	evlist__for_each_entry(evlist, evsel) {
 		data_offset += evsel->core.ids * sizeof(u64);
 	}
-	data_offset += evlist->core.nr_entries * sizeof(struct perf_file_attr);
+	data_offset += evlist__nr_entries(evlist) * sizeof(struct perf_file_attr);
 
 	return data_offset;
 }
@@ -5110,7 +5110,7 @@ int perf_session__read_header(struct perf_session *session)
 	if (session->evlist == NULL)
 		return -ENOMEM;
 
-	session->evlist->session = session;
+	evlist__set_session(session->evlist, session);
 	session->machines.host.env = &header->env;
 
 	/*
@@ -5243,7 +5243,8 @@ int perf_session__read_header(struct perf_session *session)
 			if (perf_header__getbuffer64(header, fd, &f_id, sizeof(f_id)))
 				goto out_errno;
 
-			perf_evlist__id_add(&session->evlist->core, &evsel->core, 0, j, f_id);
+			perf_evlist__id_add(evlist__core(session->evlist),
+					    &evsel->core, 0, j, f_id);
 		}
 
 		lseek(fd, tmp, SEEK_SET);
@@ -5607,7 +5608,7 @@ int perf_event__process_attr(const struct perf_tool *tool __maybe_unused,
 	 */
 	ids = (void *)&event->attr.attr + attr_size;
 	for (i = 0; i < n_ids; i++) {
-		perf_evlist__id_add(&evlist->core, &evsel->core, 0, i, ids[i]);
+		perf_evlist__id_add(evlist__core(evlist), &evsel->core, 0, i, ids[i]);
 	}
 
 	return 0;
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
index 86b1a72026d3f..5e03f884b7cc0 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -158,7 +158,7 @@ int perf_session__inject_header(struct perf_session *session,
 				struct feat_copier *fc,
 				bool write_attrs_after_data);
 
-size_t perf_session__data_offset(const struct evlist *evlist);
+size_t perf_session__data_offset(struct evlist *evlist);
 
 void perf_header__set_feat(struct perf_header *header, int feat);
 void perf_header__clear_feat(struct perf_header *header, int feat);
diff --git a/tools/perf/util/intel-tpebs.c b/tools/perf/util/intel-tpebs.c
index bc3b79bfa01a7..b41171b5df77d 100644
--- a/tools/perf/util/intel-tpebs.c
+++ b/tools/perf/util/intel-tpebs.c
@@ -98,8 +98,9 @@ static int evsel__tpebs_start_perf_record(struct evsel *evsel)
 	record_argv[i++] = "-o";
 	record_argv[i++] = PERF_DATA;
 
-	if (!perf_cpu_map__is_any_cpu_or_is_empty(evsel->evlist->core.user_requested_cpus)) {
-		cpu_map__snprint(evsel->evlist->core.user_requested_cpus, cpumap_buf,
+	if (!perf_cpu_map__is_any_cpu_or_is_empty(
+			evlist__core(evsel->evlist)->user_requested_cpus)) {
+		cpu_map__snprint(evlist__core(evsel->evlist)->user_requested_cpus, cpumap_buf,
 				 sizeof(cpumap_buf));
 		record_argv[i++] = "-C";
 		record_argv[i++] = cpumap_buf;
@@ -176,7 +177,7 @@ static bool should_ignore_sample(const struct perf_sample *sample, const struct
 	if (t->evsel->evlist == NULL)
 		return true;
 
-	workload_pid = t->evsel->evlist->workload.pid;
+	workload_pid = evlist__workload_pid(t->evsel->evlist);
 	if (workload_pid < 0 || workload_pid == sample_pid)
 		return false;
 
diff --git a/tools/perf/util/iostat.c b/tools/perf/util/iostat.c
index b770bd473af71..c9d5028a47f39 100644
--- a/tools/perf/util/iostat.c
+++ b/tools/perf/util/iostat.c
@@ -4,7 +4,7 @@
 
 enum iostat_mode_t iostat_mode = IOSTAT_NONE;
 
-__weak int iostat_prepare(struct evlist *evlist __maybe_unused,
+__weak int iostat_prepare(struct evlist **evlist __maybe_unused,
 			  struct perf_stat_config *config __maybe_unused)
 {
 	return -1;
diff --git a/tools/perf/util/iostat.h b/tools/perf/util/iostat.h
index a4e7299c5c2fb..df8a241fbc32a 100644
--- a/tools/perf/util/iostat.h
+++ b/tools/perf/util/iostat.h
@@ -30,7 +30,7 @@ extern enum iostat_mode_t iostat_mode;
 
 typedef void (*iostat_print_counter_t)(struct perf_stat_config *, struct evsel *, void *);
 
-int iostat_prepare(struct evlist *evlist, struct perf_stat_config *config);
+int iostat_prepare(struct evlist **evlist, struct perf_stat_config *config);
 int iostat_parse(const struct option *opt, const char *str,
 		 int unset __maybe_unused);
 void iostat_list(struct evlist *evlist, struct perf_stat_config *config);
diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 2c4e9fefb41f8..8c7b299a55db9 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -1490,7 +1490,7 @@ static int parse_groups(struct evlist *perf_evlist,
 			goto out;
 		}
 
-		me = metricgroup__lookup(&perf_evlist->metric_events,
+		me = metricgroup__lookup(evlist__metric_events(perf_evlist),
 					 pick_display_evsel(&metric_list, metric_events),
 					 /*create=*/true);
 
@@ -1541,13 +1541,13 @@ static int parse_groups(struct evlist *perf_evlist,
 
 
 	if (combined_evlist) {
-		evlist__splice_list_tail(perf_evlist, &combined_evlist->core.entries);
+		evlist__splice_list_tail(perf_evlist, &evlist__core(combined_evlist)->entries);
 		evlist__put(combined_evlist);
 	}
 
 	list_for_each_entry(m, &metric_list, nd) {
 		if (m->evlist)
-			evlist__splice_list_tail(perf_evlist, &m->evlist->core.entries);
+			evlist__splice_list_tail(perf_evlist, &evlist__core(m->evlist)->entries);
 	}
 
 out:
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 8fb5626d5d379..194bc94dfc1ec 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -2294,7 +2294,7 @@ int __parse_events(struct evlist *evlist, const char *str, const char *pmu_filte
 {
 	struct parse_events_state parse_state = {
 		.list	  = LIST_HEAD_INIT(parse_state.list),
-		.idx	  = evlist->core.nr_entries,
+		.idx	  = evlist__nr_entries(evlist),
 		.error	  = err,
 		.stoken	  = PE_START_EVENTS,
 		.fake_pmu = fake_pmu,
@@ -2568,7 +2568,7 @@ foreach_evsel_in_last_glob(struct evlist *evlist,
 	 *
 	 * So no need to WARN here, let *func do this.
 	 */
-	if (evlist->core.nr_entries > 0)
+	if (evlist__nr_entries(evlist) > 0)
 		last = evlist__last(evlist);
 
 	do {
@@ -2578,7 +2578,7 @@ foreach_evsel_in_last_glob(struct evlist *evlist,
 		if (!last)
 			return 0;
 
-		if (last->core.node.prev == &evlist->core.entries)
+		if (last->core.node.prev == &evlist__core(evlist)->entries)
 			return 0;
 		last = list_entry(last->core.node.prev, struct evsel, core.node);
 	} while (!last->cmdline_group_boundary);
diff --git a/tools/perf/util/pfm.c b/tools/perf/util/pfm.c
index 5f53c2f68a966..f80d6b0df47ae 100644
--- a/tools/perf/util/pfm.c
+++ b/tools/perf/util/pfm.c
@@ -85,7 +85,7 @@ int parse_libpfm_events_option(const struct option *opt, const char *str,
 		}
 
 		pmu = perf_pmus__find_by_type((unsigned int)attr.type);
-		evsel = parse_events__add_event(evlist->core.nr_entries,
+		evsel = parse_events__add_event(evlist__nr_entries(evlist),
 						&attr, q, /*metric_id=*/NULL,
 						pmu);
 		if (evsel == NULL)
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index 9d4773885dcbb..2ee17d3a3cd92 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -1523,7 +1523,7 @@ static int pyrf_evlist__init(struct pyrf_evlist *pevlist,
 	}
 	threads = ((struct pyrf_thread_map *)pthreads)->threads;
 	cpus = ((struct pyrf_cpu_map *)pcpus)->cpus;
-	perf_evlist__set_maps(&pevlist->evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(pevlist->evlist), cpus, threads);
 
 	return 0;
 }
@@ -1536,23 +1536,29 @@ static void pyrf_evlist__delete(struct pyrf_evlist *pevlist)
 
 static PyObject *pyrf_evlist__all_cpus(struct pyrf_evlist *pevlist)
 {
-	struct pyrf_cpu_map *pcpu_map = PyObject_New(struct pyrf_cpu_map, &pyrf_cpu_map__type);
+	struct pyrf_cpu_map *pcpu_map;
+
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
 
+	pcpu_map = PyObject_New(struct pyrf_cpu_map, &pyrf_cpu_map__type);
 	if (pcpu_map)
-		pcpu_map->cpus = perf_cpu_map__get(pevlist->evlist->core.all_cpus);
+		pcpu_map->cpus = perf_cpu_map__get(evlist__core(pevlist->evlist)->all_cpus);
 
 	return (PyObject *)pcpu_map;
 }
 
 static PyObject *pyrf_evlist__metrics(struct pyrf_evlist *pevlist)
 {
-	PyObject *list = PyList_New(/*len=*/0);
+	PyObject *list;
 	struct rb_node *node;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	list = PyList_New(/*len=*/0);
 	if (!list)
 		return NULL;
 
-	for (node = rb_first_cached(&pevlist->evlist->metric_events.entries); node;
+	for (node = rb_first_cached(&evlist__metric_events(pevlist->evlist)->entries); node;
 	     node = rb_next(node)) {
 		struct metric_event *me = container_of(node, struct metric_event, nd);
 		struct list_head *pos;
@@ -1655,10 +1661,12 @@ static PyObject *pyrf_evlist__compute_metric(struct pyrf_evlist *pevlist,
 	double result = 0;
 	struct evsel *metric_evsel = NULL;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
 	if (!PyArg_ParseTuple(args, "sii", &metric, &cpu, &thread))
 		return NULL;
 
-	for (node = rb_first_cached(&pevlist->evlist->metric_events.entries);
+	for (node = rb_first_cached(&evlist__metric_events(pevlist->evlist)->entries);
 	     mexp == NULL && node;
 	     node = rb_next(node)) {
 		struct metric_event *me = container_of(node, struct metric_event, nd);
@@ -1719,15 +1727,18 @@ static PyObject *pyrf_evlist__compute_metric(struct pyrf_evlist *pevlist,
 static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist,
 				   PyObject *args, PyObject *kwargs)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
 	static char *kwlist[] = { "pages", "overwrite", NULL };
 	int pages = 128, overwrite = false;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist,
 					 &pages, &overwrite))
 		return NULL;
 
-	if (evlist__mmap(evlist, pages) < 0) {
+	if (evlist__do_mmap(evlist, pages) < 0) {
 		PyErr_SetFromErrno(PyExc_OSError);
 		return NULL;
 	}
@@ -1739,10 +1750,13 @@ static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist,
 static PyObject *pyrf_evlist__poll(struct pyrf_evlist *pevlist,
 				   PyObject *args, PyObject *kwargs)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
 	static char *kwlist[] = { "timeout", NULL };
 	int timeout = -1, n;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, &timeout))
 		return NULL;
 
@@ -1759,13 +1773,18 @@ static PyObject *pyrf_evlist__get_pollfd(struct pyrf_evlist *pevlist,
 					 PyObject *args __maybe_unused,
 					 PyObject *kwargs __maybe_unused)
 {
-	struct evlist *evlist = pevlist->evlist;
-        PyObject *list = PyList_New(0);
+	struct evlist *evlist;
+	PyObject *list;
 	int i;
 
-	for (i = 0; i < evlist->core.pollfd.nr; ++i) {
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
+	list = PyList_New(0);
+
+	for (i = 0; i < evlist__core(evlist)->pollfd.nr; ++i) {
 		PyObject *file;
-		file = PyFile_FromFd(evlist->core.pollfd.entries[i].fd, "perf", "r", -1,
+		file = PyFile_FromFd(evlist__core(evlist)->pollfd.entries[i].fd, "perf", "r", -1,
 				     NULL, NULL, NULL, 0);
 		if (file == NULL)
 			goto free_list;
@@ -1788,28 +1807,33 @@ static PyObject *pyrf_evlist__add(struct pyrf_evlist *pevlist,
 				  PyObject *args,
 				  PyObject *kwargs __maybe_unused)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
 	PyObject *pevsel;
 	struct evsel *evsel;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
 	if (!PyArg_ParseTuple(args, "O!", &pyrf_evsel__type, &pevsel))
 		return NULL;
 
 	CHECK_INITIALIZED(((struct pyrf_evsel *)pevsel)->evsel, "evsel");
 
 	evsel = ((struct pyrf_evsel *)pevsel)->evsel;
-	evsel->core.idx = evlist->core.nr_entries;
+	CHECK_INITIALIZED(evsel, "evsel");
+
+	evsel->core.idx = evlist__nr_entries(evlist);
 	evlist__add(evlist, evsel__get(evsel));
 
-	return Py_BuildValue("i", evlist->core.nr_entries);
+	return Py_BuildValue("i", evlist__nr_entries(evlist));
 }
 
 static struct mmap *get_md(struct evlist *evlist, int cpu)
 {
 	int i;
 
-	for (i = 0; i < evlist->core.nr_mmaps; i++) {
-		struct mmap *md = &evlist->mmap[i];
+	for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+		struct mmap *md = &evlist__mmap(evlist)[i];
 
 		if (md->core.cpu.cpu == cpu)
 			return md;
@@ -1821,13 +1845,16 @@ static struct mmap *get_md(struct evlist *evlist, int cpu)
 static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
 					  PyObject *args, PyObject *kwargs)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
 	union perf_event *event;
 	int sample_id_all = 1, cpu;
 	static char *kwlist[] = { "cpu", "sample_id_all", NULL };
 	struct mmap *md;
 	int err;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
 					 &cpu, &sample_id_all))
 		return NULL;
@@ -1878,8 +1905,11 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
 static PyObject *pyrf_evlist__open(struct pyrf_evlist *pevlist,
 				   PyObject *args, PyObject *kwargs)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
+
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
 
+	evlist = pevlist->evlist;
 	if (evlist__open(evlist) < 0) {
 		PyErr_SetFromErrno(PyExc_OSError);
 		return NULL;
@@ -1891,8 +1921,11 @@ static PyObject *pyrf_evlist__open(struct pyrf_evlist *pevlist,
 
 static PyObject *pyrf_evlist__close(struct pyrf_evlist *pevlist)
 {
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
 
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
+
+	evlist = pevlist->evlist;
 	evlist__close(evlist);
 
 	Py_INCREF(Py_None);
@@ -1917,8 +1950,11 @@ static PyObject *pyrf_evlist__config(struct pyrf_evlist *pevlist)
 		.no_buffering        = true,
 		.no_inherit          = true,
 	};
-	struct evlist *evlist = pevlist->evlist;
+	struct evlist *evlist;
+
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
 
+	evlist = pevlist->evlist;
 	evlist__config(evlist, &opts, &callchain_param);
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -1926,6 +1962,7 @@ static PyObject *pyrf_evlist__config(struct pyrf_evlist *pevlist)
 
 static PyObject *pyrf_evlist__disable(struct pyrf_evlist *pevlist)
 {
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
 	evlist__disable(pevlist->evlist);
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -1933,6 +1970,7 @@ static PyObject *pyrf_evlist__disable(struct pyrf_evlist *pevlist)
 
 static PyObject *pyrf_evlist__enable(struct pyrf_evlist *pevlist)
 {
+	CHECK_INITIALIZED(pevlist->evlist, "evlist");
 	evlist__enable(pevlist->evlist);
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -2027,7 +2065,7 @@ static Py_ssize_t pyrf_evlist__length(PyObject *obj)
 	if (!pevlist->evlist)
 		return 0;
 
-	return pevlist->evlist->core.nr_entries;
+	return evlist__nr_entries(pevlist->evlist);
 }
 
 static PyObject *pyrf_evsel__from_evsel(struct evsel *evsel)
@@ -2046,7 +2084,7 @@ static PyObject *pyrf_evlist__item(PyObject *obj, Py_ssize_t i)
 	struct pyrf_evlist *pevlist = (void *)obj;
 	struct evsel *pos;
 
-	if (!pevlist->evlist || i >= pevlist->evlist->core.nr_entries) {
+	if (!pevlist->evlist || i >= evlist__nr_entries(pevlist->evlist)) {
 		PyErr_SetString(PyExc_IndexError, "Index out of range");
 		return NULL;
 	}
@@ -2274,7 +2312,7 @@ static PyObject *pyrf__parse_events(PyObject *self, PyObject *args)
 	cpus = pcpus ? ((struct pyrf_cpu_map *)pcpus)->cpus : NULL;
 
 	parse_events_error__init(&err);
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 	if (parse_events(evlist, input, &err)) {
 		parse_events_error__print(&err, input);
 		PyErr_SetFromErrno(PyExc_OSError);
@@ -2307,7 +2345,7 @@ static PyObject *pyrf__parse_metrics(PyObject *self, PyObject *args)
 	threads = pthreads ? ((struct pyrf_thread_map *)pthreads)->threads : NULL;
 	cpus = pcpus ? ((struct pyrf_cpu_map *)pcpus)->cpus : NULL;
 
-	perf_evlist__set_maps(&evlist->core, cpus, threads);
+	perf_evlist__set_maps(evlist__core(evlist), cpus, threads);
 	ret = metricgroup__parse_groups(evlist, pmu ?: "all", input,
 					/*metric_no_group=*/ false,
 					/*metric_no_merge=*/ false,
diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c
index 8a5fc7d5e43c7..38e8aee3106b7 100644
--- a/tools/perf/util/record.c
+++ b/tools/perf/util/record.c
@@ -99,7 +99,7 @@ void evlist__config(struct evlist *evlist, struct record_opts *opts, struct call
 	bool use_comm_exec;
 	bool sample_id = opts->sample_id;
 
-	if (perf_cpu_map__cpu(evlist->core.user_requested_cpus, 0).cpu < 0)
+	if (perf_cpu_map__cpu(evlist__core(evlist)->user_requested_cpus, 0).cpu < 0)
 		opts->no_inherit = true;
 
 	use_comm_exec = perf_can_comm_exec();
@@ -122,7 +122,7 @@ void evlist__config(struct evlist *evlist, struct record_opts *opts, struct call
 		 */
 		use_sample_identifier = perf_can_sample_identifier();
 		sample_id = true;
-	} else if (evlist->core.nr_entries > 1) {
+	} else if (evlist__nr_entries(evlist) > 1) {
 		struct evsel *first = evlist__first(evlist);
 
 		evlist__for_each_entry(evlist, evsel) {
@@ -237,7 +237,8 @@ bool evlist__can_select_event(struct evlist *evlist, const char *str)
 
 	evsel = evlist__last(temp_evlist);
 
-	if (!evlist || perf_cpu_map__is_any_cpu_or_is_empty(evlist->core.user_requested_cpus)) {
+	if (!evlist ||
+	    perf_cpu_map__is_any_cpu_or_is_empty(evlist__core(evlist)->user_requested_cpus)) {
 		struct perf_cpu_map *cpus = perf_cpu_map__new_online_cpus();
 
 		if (cpus)
@@ -245,7 +246,7 @@ bool evlist__can_select_event(struct evlist *evlist, const char *str)
 
 		perf_cpu_map__put(cpus);
 	} else {
-		cpu = perf_cpu_map__cpu(evlist->core.user_requested_cpus, 0);
+		cpu = perf_cpu_map__cpu(evlist__core(evlist)->user_requested_cpus, 0);
 	}
 
 	while (1) {
diff --git a/tools/perf/util/sample-raw.c b/tools/perf/util/sample-raw.c
index e20b73c0c5bd7..f5ae9f4689834 100644
--- a/tools/perf/util/sample-raw.c
+++ b/tools/perf/util/sample-raw.c
@@ -18,11 +18,11 @@ void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct perf_env
 	uint16_t e_machine = perf_env__e_machine(env, /*e_flags=*/NULL);
 
 	if (e_machine == EM_S390) {
-		evlist->trace_event_sample_raw = evlist__s390_sample_raw;
+		evlist__set_trace_event_sample_raw(evlist, evlist__s390_sample_raw);
 	} else if (e_machine == EM_X86_64 || e_machine == EM_386) {
 		const char *cpuid = perf_env__cpuid(env);
 
 		if (cpuid && strstarts(cpuid, "AuthenticAMD") && evlist__has_amd_ibs(evlist))
-			evlist->trace_event_sample_raw = evlist__amd_sample_raw;
+			evlist__set_trace_event_sample_raw(evlist, evlist__amd_sample_raw);
 	}
 }
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 9962b830a4026..10d8942f86dad 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -205,7 +205,7 @@ struct perf_session *__perf_session__new(struct perf_data *data,
 		session->machines.host.env = host_env;
 	}
 	if (session->evlist)
-		session->evlist->session = session;
+		evlist__set_session(session->evlist, session);
 
 	session->machines.host.single_address_space =
 		perf_env__single_address_space(session->machines.host.env);
@@ -1549,8 +1549,8 @@ static void dump_event(struct evlist *evlist, union perf_event *event,
 	       file_offset, file_path, event->header.size, event->header.type);
 
 	trace_event(event);
-	if (event->header.type == PERF_RECORD_SAMPLE && evlist->trace_event_sample_raw)
-		evlist->trace_event_sample_raw(evlist, event, sample);
+	if (event->header.type == PERF_RECORD_SAMPLE && evlist__trace_event_sample_raw(evlist))
+		evlist__trace_event_sample_raw(evlist)(evlist, event, sample);
 
 	if (sample)
 		evlist__print_tstamp(evlist, event, sample);
@@ -1751,7 +1751,7 @@ static int deliver_sample_value(struct evlist *evlist,
 	}
 
 	if (!storage || sid->evsel == NULL) {
-		++evlist->stats.nr_unknown_id;
+		++evlist__stats(evlist)->nr_unknown_id;
 		return 0;
 	}
 
@@ -1853,7 +1853,7 @@ static int evlist__deliver_deferred_callchain(struct evlist *evlist,
 		return ret;
 	}
 
-	list_for_each_entry_safe(de, tmp, &evlist->deferred_samples, list) {
+	list_for_each_entry_safe(de, tmp, evlist__deferred_samples(evlist), list) {
 		struct perf_sample orig_sample;
 
 		perf_sample__init(&orig_sample, /*all=*/false);
@@ -1902,7 +1902,7 @@ static int session__flush_deferred_samples(struct perf_session *session,
 	struct deferred_event *de, *tmp;
 	int ret = 0;
 
-	list_for_each_entry_safe(de, tmp, &evlist->deferred_samples, list) {
+	list_for_each_entry_safe(de, tmp, evlist__deferred_samples(evlist), list) {
 		struct perf_sample sample;
 
 		perf_sample__init(&sample, /*all=*/false);
@@ -1964,17 +1964,16 @@ static int machines__deliver_event(struct machines *machines,
 		sample->evsel = evlist__id2evsel(evlist, sample->id);
 	else
 		assert(sample->evsel == evlist__id2evsel(evlist, sample->id));
-
 	machine = machines__find_for_cpumode(machines, event, sample);
 
 	switch (event->header.type) {
 	case PERF_RECORD_SAMPLE:
 		if (sample->evsel == NULL) {
-			++evlist->stats.nr_unknown_id;
+			++evlist__stats(evlist)->nr_unknown_id;
 			return 0;
 		}
 		if (machine == NULL) {
-			++evlist->stats.nr_unprocessable_samples;
+			++evlist__stats(evlist)->nr_unprocessable_samples;
 			dump_sample(machine, event, sample);
 			return 0;
 		}
@@ -1993,7 +1992,7 @@ static int machines__deliver_event(struct machines *machines,
 			}
 			memcpy(de->event, event, sz);
 			de->file_offset = sample->file_offset;
-			list_add_tail(&de->list, &evlist->deferred_samples);
+			list_add_tail(&de->list, evlist__deferred_samples(evlist));
 			return 0;
 		}
 		return evlist__deliver_sample(evlist, tool, event, sample, machine);
@@ -2005,7 +2004,7 @@ static int machines__deliver_event(struct machines *machines,
 		return tool->mmap(tool, event, sample, machine);
 	case PERF_RECORD_MMAP2:
 		if (event->header.misc & PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT)
-			++evlist->stats.nr_proc_map_timeout;
+			++evlist__stats(evlist)->nr_proc_map_timeout;
 		if (!perf_event__check_nul(event->mmap2.filename,
 					   (void *)event + event->header.size,
 					   "MMAP2", file_offset))
@@ -2050,13 +2049,13 @@ static int machines__deliver_event(struct machines *machines,
 		return tool->exit(tool, event, sample, machine);
 	case PERF_RECORD_LOST:
 		if (tool->lost == perf_event__process_lost)
-			evlist->stats.total_lost += event->lost.lost;
+			evlist__stats(evlist)->total_lost += event->lost.lost;
 		return tool->lost(tool, event, sample, machine);
 	case PERF_RECORD_LOST_SAMPLES:
 		if (event->header.misc & PERF_RECORD_MISC_LOST_SAMPLES_BPF)
-			evlist->stats.total_dropped_samples += event->lost_samples.lost;
+			evlist__stats(evlist)->total_dropped_samples += event->lost_samples.lost;
 		else if (tool->lost_samples == perf_event__process_lost_samples)
-			evlist->stats.total_lost_samples += event->lost_samples.lost;
+			evlist__stats(evlist)->total_lost_samples += event->lost_samples.lost;
 		return tool->lost_samples(tool, event, sample, machine);
 	case PERF_RECORD_READ:
 		dump_read(sample->evsel, event);
@@ -2068,11 +2067,11 @@ static int machines__deliver_event(struct machines *machines,
 	case PERF_RECORD_AUX:
 		if (tool->aux == perf_event__process_aux) {
 			if (event->aux.flags & PERF_AUX_FLAG_TRUNCATED)
-				evlist->stats.total_aux_lost += 1;
+				evlist__stats(evlist)->total_aux_lost += 1;
 			if (event->aux.flags & PERF_AUX_FLAG_PARTIAL)
-				evlist->stats.total_aux_partial += 1;
+				evlist__stats(evlist)->total_aux_partial += 1;
 			if (event->aux.flags & PERF_AUX_FLAG_COLLISION)
-				evlist->stats.total_aux_collision += 1;
+				evlist__stats(evlist)->total_aux_collision += 1;
 		}
 		return tool->aux(tool, event, sample, machine);
 	case PERF_RECORD_ITRACE_START:
@@ -2108,7 +2107,7 @@ static int machines__deliver_event(struct machines *machines,
 		return evlist__deliver_deferred_callchain(evlist, tool, event,
 							  sample, machine);
 	default:
-		++evlist->stats.nr_unknown_events;
+		++evlist__stats(evlist)->nr_unknown_events;
 		return -1;
 	}
 }
@@ -2520,7 +2519,7 @@ int perf_session__deliver_synth_event(struct perf_session *session,
 	struct evlist *evlist = session->evlist;
 	const struct perf_tool *tool = session->tool;
 
-	events_stats__inc(&evlist->stats, event->header.type);
+	events_stats__inc(evlist__stats(evlist), event->header.type);
 
 	if (event->header.type >= PERF_RECORD_USER_TYPE_START)
 		return perf_session__process_user_event(session, event, 0, NULL);
@@ -2930,7 +2929,7 @@ static s64 perf_session__process_event(struct perf_session *session,
 		return 0;
 	}
 
-	events_stats__inc(&evlist->stats, event->header.type);
+	events_stats__inc(evlist__stats(evlist), event->header.type);
 
 	if (event->header.type >= PERF_RECORD_USER_TYPE_START)
 		return perf_session__process_user_event(session, event, file_offset, file_path);
@@ -2991,7 +2990,7 @@ perf_session__warn_order(const struct perf_session *session)
 
 static void perf_session__warn_about_errors(const struct perf_session *session)
 {
-	const struct events_stats *stats = &session->evlist->stats;
+	const struct events_stats *stats = evlist__stats(session->evlist);
 
 	if (session->tool->lost == perf_event__process_lost &&
 	    stats->nr_events[PERF_RECORD_LOST] != 0) {
@@ -3824,7 +3823,7 @@ size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp)
 
 	ret = fprintf(fp, "\nAggregated stats:%s\n", msg);
 
-	ret += events_stats__fprintf(&session->evlist->stats, fp);
+	ret += events_stats__fprintf(evlist__stats(session->evlist), fp);
 	return ret;
 }
 
diff --git a/tools/perf/util/sideband_evlist.c b/tools/perf/util/sideband_evlist.c
index b84a5463e0394..c07dacf3c54c5 100644
--- a/tools/perf/util/sideband_evlist.c
+++ b/tools/perf/util/sideband_evlist.c
@@ -22,7 +22,7 @@ int evlist__add_sb_event(struct evlist *evlist, struct perf_event_attr *attr,
 		attr->sample_id_all = 1;
 	}
 
-	evsel = evsel__new_idx(attr, evlist->core.nr_entries);
+	evsel = evsel__new_idx(attr, evlist__nr_entries(evlist));
 	if (!evsel)
 		return -1;
 
@@ -49,14 +49,14 @@ static void *perf_evlist__poll_thread(void *arg)
 	while (!done) {
 		bool got_data = false;
 
-		if (evlist->thread.done)
+		if (evlist__sb_thread_done(evlist))
 			draining = true;
 
 		if (!draining)
 			evlist__poll(evlist, 1000);
 
-		for (i = 0; i < evlist->core.nr_mmaps; i++) {
-			struct mmap *map = &evlist->mmap[i];
+		for (i = 0; i < evlist__core(evlist)->nr_mmaps; i++) {
+			struct mmap *map = &evlist__mmap(evlist)[i];
 			union perf_event *event;
 
 			if (perf_mmap__read_init(&map->core))
@@ -104,7 +104,7 @@ int evlist__start_sb_thread(struct evlist *evlist, struct target *target)
 	if (evlist__create_maps(evlist, target))
 		goto out_put_evlist;
 
-	if (evlist->core.nr_entries > 1) {
+	if (evlist__nr_entries(evlist) > 1) {
 		bool can_sample_identifier = perf_can_sample_identifier();
 
 		evlist__for_each_entry(evlist, counter)
@@ -114,12 +114,12 @@ int evlist__start_sb_thread(struct evlist *evlist, struct target *target)
 	}
 
 	evlist__for_each_entry(evlist, counter) {
-		if (evsel__open(counter, evlist->core.user_requested_cpus,
-				evlist->core.threads) < 0)
+		if (evsel__open(counter, evlist__core(evlist)->user_requested_cpus,
+				evlist__core(evlist)->threads) < 0)
 			goto out_put_evlist;
 	}
 
-	if (evlist__mmap(evlist, UINT_MAX))
+	if (evlist__do_mmap(evlist, UINT_MAX))
 		goto out_put_evlist;
 
 	evlist__for_each_entry(evlist, counter) {
@@ -127,8 +127,8 @@ int evlist__start_sb_thread(struct evlist *evlist, struct target *target)
 			goto out_put_evlist;
 	}
 
-	evlist->thread.done = 0;
-	if (pthread_create(&evlist->thread.th, NULL, perf_evlist__poll_thread, evlist))
+	evlist__set_sb_thread_done(evlist, 0);
+	if (pthread_create(evlist__sb_thread_th(evlist), NULL, perf_evlist__poll_thread, evlist))
 		goto out_put_evlist;
 
 	return 0;
@@ -143,7 +143,7 @@ void evlist__stop_sb_thread(struct evlist *evlist)
 {
 	if (!evlist)
 		return;
-	evlist->thread.done = 1;
-	pthread_join(evlist->thread.th, NULL);
+	evlist__set_sb_thread_done(evlist, 1);
+	pthread_join(*evlist__sb_thread_th(evlist), NULL);
 	evlist__put(evlist);
 }
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 005e7d85dc4a5..dcf9189786f8a 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -3487,7 +3487,7 @@ static struct evsel *find_evsel(struct evlist *evlist, char *event_name)
 	if (event_name[0] == '%') {
 		int nr = strtol(event_name+1, NULL, 0);
 
-		if (nr > evlist->core.nr_entries)
+		if (nr > evlist__nr_entries(evlist))
 			return NULL;
 
 		evsel = evlist__first(evlist);
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
index 0a5750bb59fa3..f94f1324d24ac 100644
--- a/tools/perf/util/stat-display.c
+++ b/tools/perf/util/stat-display.c
@@ -667,7 +667,7 @@ static void print_metric_header(struct perf_stat_config *config,
 
 	/* In case of iostat, print metric header for first root port only */
 	if (config->iostat_run &&
-	    os->evsel->priv != os->evsel->evlist->selected->priv)
+		os->evsel->priv != evlist__selected(os->evsel->evlist)->priv)
 		return;
 
 	if (os->evsel->cgrp != os->cgrp)
@@ -1126,7 +1126,7 @@ static void print_no_aggr_metric(struct perf_stat_config *config,
 	unsigned int all_idx;
 	struct perf_cpu cpu;
 
-	perf_cpu_map__for_each_cpu(cpu, all_idx, evlist->core.user_requested_cpus) {
+	perf_cpu_map__for_each_cpu(cpu, all_idx, evlist__core(evlist)->user_requested_cpus) {
 		struct evsel *counter;
 		bool first = true;
 
@@ -1543,7 +1543,7 @@ void evlist__print_counters(struct evlist *evlist, struct perf_stat_config *conf
 	evlist__uniquify_evsel_names(evlist, config);
 
 	if (config->iostat_run)
-		evlist->selected = evlist__first(evlist);
+		evlist__set_selected(evlist, evlist__first(evlist));
 
 	if (config->interval)
 		prepare_timestamp(config, &os, ts);
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
index 35062f964618a..525a3fe4a46ec 100644
--- a/tools/perf/util/stat-shadow.c
+++ b/tools/perf/util/stat-shadow.c
@@ -287,7 +287,7 @@ void *perf_stat__print_shadow_stats_metricgroup(struct perf_stat_config *config,
 	void *ctxp = out->ctx;
 	bool header_printed = false;
 	const char *name = NULL;
-	struct rblist *metric_events = &evsel->evlist->metric_events;
+	struct rblist *metric_events = evlist__metric_events(evsel->evlist);
 
 	me = metricgroup__lookup(metric_events, evsel, false);
 	if (me == NULL)
@@ -355,5 +355,5 @@ bool perf_stat__skip_metric_event(struct evsel *evsel)
 	if (!evsel->default_metricgroup)
 		return false;
 
-	return !metricgroup__lookup(&evsel->evlist->metric_events, evsel, false);
+	return !metricgroup__lookup(evlist__metric_events(evsel->evlist), evsel, false);
 }
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 66eb9a66a4f7a..25f31a1743682 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -547,8 +547,8 @@ static void evsel__merge_aliases(struct evsel *evsel)
 	struct evlist *evlist = evsel->evlist;
 	struct evsel *alias;
 
-	alias = list_prepare_entry(evsel, &(evlist->core.entries), core.node);
-	list_for_each_entry_continue(alias, &evlist->core.entries, core.node) {
+	alias = list_prepare_entry(evsel, &(evlist__core(evlist)->entries), core.node);
+	list_for_each_entry_continue(alias, &evlist__core(evlist)->entries, core.node) {
 		if (alias->first_wildcard_match == evsel) {
 			/* Merge the same events on different PMUs. */
 			evsel__merge_aggr_counters(evsel, alias);
diff --git a/tools/perf/util/stream.c b/tools/perf/util/stream.c
index 3de4a61308539..7bccd23783444 100644
--- a/tools/perf/util/stream.c
+++ b/tools/perf/util/stream.c
@@ -131,7 +131,7 @@ static int evlist__init_callchain_streams(struct evlist *evlist,
 	struct evsel *pos;
 	int i = 0;
 
-	BUG_ON(els->nr_evsel < evlist->core.nr_entries);
+	BUG_ON(els->nr_evsel < evlist__nr_entries(evlist));
 
 	evlist__for_each_entry(evlist, pos) {
 		struct hists *hists = evsel__hists(pos);
@@ -148,7 +148,7 @@ static int evlist__init_callchain_streams(struct evlist *evlist,
 struct evlist_streams *evlist__create_streams(struct evlist *evlist,
 					      int nr_streams_max)
 {
-	int nr_evsel = evlist->core.nr_entries, ret = -1;
+	int nr_evsel = evlist__nr_entries(evlist), ret = -1;
 	struct evlist_streams *els = evlist_streams__new(nr_evsel,
 							 nr_streams_max);
 
diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c
index 5307d707711d8..b75f9dcf4dbfe 100644
--- a/tools/perf/util/synthetic-events.c
+++ b/tools/perf/util/synthetic-events.c
@@ -2247,7 +2247,7 @@ int perf_event__synthesize_tracing_data(const struct perf_tool *tool, int fd, st
 	 * - write the tracing data from the temp file
 	 *   to the pipe
 	 */
-	tdata = tracing_data_get(&evlist->core.entries, fd, true);
+	tdata = tracing_data_get(&evlist__core(evlist)->entries, fd, true);
 	if (!tdata)
 		return -1;
 
@@ -2404,13 +2404,16 @@ int perf_event__synthesize_stat_events(struct perf_stat_config *config, const st
 	}
 
 	err = perf_event__synthesize_extra_attr(tool, evlist, process, attrs);
-	err = perf_event__synthesize_thread_map2(tool, evlist->core.threads, process, NULL);
+	err = perf_event__synthesize_thread_map2(tool, evlist__core(evlist)->threads,
+						process, /*machine=*/NULL);
 	if (err < 0) {
 		pr_err("Couldn't synthesize thread map.\n");
 		return err;
 	}
 
-	err = perf_event__synthesize_cpu_map(tool, evlist->core.user_requested_cpus, process, NULL);
+	err = perf_event__synthesize_cpu_map(tool,
+					     evlist__core(evlist)->user_requested_cpus,
+					     process, /*machine=*/NULL);
 	if (err < 0) {
 		pr_err("Couldn't synthesize thread map.\n");
 		return err;
@@ -2518,7 +2521,7 @@ int perf_event__synthesize_for_pipe(const struct perf_tool *tool,
 	ret += err;
 
 #ifdef HAVE_LIBTRACEEVENT
-	if (have_tracepoints(&evlist->core.entries)) {
+	if (have_tracepoints(&evlist__core(evlist)->entries)) {
 		int fd = perf_data__fd(data);
 
 		/*
diff --git a/tools/perf/util/time-utils.c b/tools/perf/util/time-utils.c
index d43c4577d7ebc..5558a5a0fea4a 100644
--- a/tools/perf/util/time-utils.c
+++ b/tools/perf/util/time-utils.c
@@ -473,8 +473,8 @@ int perf_time__parse_for_ranges_reltime(const char *time_str,
 		return -ENOMEM;
 
 	if (has_percent || reltime) {
-		if (session->evlist->first_sample_time == 0 &&
-		    session->evlist->last_sample_time == 0) {
+		if (evlist__first_sample_time(session->evlist) == 0 &&
+		    evlist__last_sample_time(session->evlist) == 0) {
 			pr_err("HINT: no first/last sample time found in perf data.\n"
 			       "Please use latest perf binary to execute 'perf record'\n"
 			       "(if '--buildid-all' is enabled, please set '--timestamp-boundary').\n");
@@ -486,8 +486,8 @@ int perf_time__parse_for_ranges_reltime(const char *time_str,
 		num = perf_time__percent_parse_str(
 				ptime_range, size,
 				time_str,
-				session->evlist->first_sample_time,
-				session->evlist->last_sample_time);
+				evlist__first_sample_time(session->evlist),
+				evlist__last_sample_time(session->evlist));
 	} else {
 		num = perf_time__parse_strs(ptime_range, time_str, size);
 	}
@@ -499,8 +499,8 @@ int perf_time__parse_for_ranges_reltime(const char *time_str,
 		int i;
 
 		for (i = 0; i < num; i++) {
-			ptime_range[i].start += session->evlist->first_sample_time;
-			ptime_range[i].end += session->evlist->first_sample_time;
+			ptime_range[i].start += evlist__first_sample_time(session->evlist);
+			ptime_range[i].end += evlist__first_sample_time(session->evlist);
 		}
 	}
 
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c
index b06e10a116bb3..851a26be69315 100644
--- a/tools/perf/util/top.c
+++ b/tools/perf/util/top.c
@@ -71,7 +71,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
 			       esamples_percent);
 	}
 
-	if (top->evlist->core.nr_entries == 1) {
+	if (evlist__nr_entries(top->evlist) == 1) {
 		struct evsel *first = evlist__first(top->evlist);
 		ret += SNPRINTF(bf + ret, size - ret, "%" PRIu64 "%s ",
 				(uint64_t)first->core.attr.sample_period,
@@ -94,7 +94,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
 	else
 		ret += SNPRINTF(bf + ret, size - ret, " (all");
 
-	nr_cpus = perf_cpu_map__nr(top->evlist->core.user_requested_cpus);
+	nr_cpus = perf_cpu_map__nr(evlist__core(top->evlist)->user_requested_cpus);
 	if (target->cpu_list)
 		ret += SNPRINTF(bf + ret, size - ret, ", CPU%s: %s)",
 				nr_cpus > 1 ? "s" : "",
-- 
2.53.0




  parent reply	other threads:[~2026-09-12  7:14 UTC|newest]

Thread overview: 1837+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-12  6:29 [PATCH 7.2 0000/1815] 7.2.6-rc1 review Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0001/1815] drm/amd/display: Scale custom brightness curve from full range Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0002/1815] batman-adv: dat: atomically update mac addresses Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0003/1815] batman-adv: bla: avoid CRC corruption due to parallel claim add Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0004/1815] mm/damon/core: skip aging from repeated aggressive merging Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0005/1815] i3c: master: Fix device_register() error path Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0006/1815] i3c: master: Fix recursive locking during device registration Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0007/1815] dm-pcache: validate seg_id fields from persistent memory Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0008/1815] i3c: master: Fix use-after-free of master->this Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0009/1815] i3c: master: Do not treat master device as a duplicate target Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0010/1815] dm-pcache: validate the persisted dirty_tail chain at load Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0011/1815] udf: Move udf_map_block() up Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0012/1815] udf: Fix data loss when converting inline inodes to out of line Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0013/1815] staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit() Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0014/1815] tracing/probes: ignore id update from btf_type_skip_modifiers Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0015/1815] tracing/probes: Fix BTF kflag check for anonymous struct member access Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0016/1815] btrfs: abort transaction before releasing tree_log_mutex on commit failure Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0017/1815] ksmbd: fix maximum allowed access checks Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0018/1815] smb/server: fix tree connection leak in smb2_tree_connect() Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0019/1815] ksmbd: fix tree connection use-after-free " Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0020/1815] memcg: move LRU size accounting on reparenting instead of copying it Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0021/1815] nvdimm: preserve flush callback -ENOMEM Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0022/1815] nvdimm: pmem: keep PREFLUSH before data writes Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0023/1815] nvdimm: virtio_pmem: stop allocating child flush bio Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0024/1815] nvdimm: virtio_pmem: always wake -ENOSPC waiters Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0025/1815] nvdimm: virtio_pmem: use READ_ONCE()/WRITE_ONCE() for wait flags Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0026/1815] nvdimm: virtio_pmem: refcount requests for token lifetime Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0027/1815] mm/mremap: reset unfaulted VMA page offset for MREMAP_DONTUNMAP Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0028/1815] clk: qcom: Fix test_ctl_hi field for DEFAULT_EVO PLLs Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0029/1815] KVM: x86: Extract REGS and SREGS runtime sync code to helpers Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0030/1815] KVM: x86: Move get_segment_base() to regs.h, as kvm_get_segment_base() Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0031/1815] KVM: x86: Rename __{g,s}et_sregs2() => kvm_vcpu_ioctl_x86_{g,s}et_sregs2() Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0032/1815] KVM: x86: Move the bulk of register specific code from x86.c to regs.c Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0033/1815] KVM: x86: Check EFER validity on KVM_SET_SREGS* Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0034/1815] Smack: Fix error in capability bypass Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0035/1815] drm: Remove unused header in drm_dumb_buffers.c Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0036/1815] drm/atomic: Drop drm_private_obj.state assignment from create_state Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0037/1815] drm/tegra: dsi: Re-add clear enable register if DSI was powered by bootloader Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0038/1815] drm: lcdif: Wait for vblank before disabling DMA Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0039/1815] drm/bridge: synopsys: dw-dp: Support unregistering the AUX channel Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0040/1815] drm/rockchip: dw_dp: Add missing newline in dev_err_probe() message Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0041/1815] drm/rockchip: dw_dp: Release core resources Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0042/1815] drm/rockchip: vop2: Fix wrong wait target in layer cfg done check Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0043/1815] drm/rockchip: vop2: Wait for layer cfg done before switching LAYERSEL_REGDONE_SEL Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0044/1815] drm/rockchip: analogix_dp: Enable hclk for RK3588 Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0045/1815] drm/rockchip: analogix_dp: Fix OF node reference leak via auto cleanup Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0046/1815] drm/bridge: display-connector: dont autoenable HPD IRQ Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0047/1815] drm/bridge: display-connector: trigger initial HPD event for DP Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0048/1815] gpu: nova-core: gsp: tu102: keep unloading if FWSEC-SB fails Greg Kroah-Hartman
2026-09-12  6:29 ` [PATCH 7.2 0049/1815] drm/v3d: Clear queue->active_job when v3d_fence_create() fails Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0050/1815] drm/display: hdmi-state-helper: Try subsampling in mode_valid Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0051/1815] drm/rockchip: vop2: Add RK3576 to the RG swap special case Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0052/1815] drm/rockchip: vop2: Recognise 10-bit YUV422 as YUV format Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0053/1815] rust: drm: gpuvm: update DriverGpuVm for DeviceContext Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0054/1815] drm/bridge: cdns-dsi: Return an error pointer on allocation failure Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0055/1815] drm/bridge: cdns-mhdp8546: " Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0056/1815] smack: fix incorrect task context in smack_msg_queue_msgrcv Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0057/1815] smack: simplify write handlers of sysfs entries Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0058/1815] smack: deduplicate smackfs/{direct,mapped} file_operations Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0059/1815] smack: restrict smackfs/{direct,mapped} values to 0-255 Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0060/1815] cgroup/cpuset: Avoid unnecessary cpus & mems update in cpuset_hotplug_update_tasks() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0061/1815] sched_ext/scx_flatcg: Fix cvtime_delta race and add hweight scaling to bypass charging Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0062/1815] drm/bridge: of-display-mode-bridge: Fix missing static const for the bridge funcs Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0063/1815] x86/cfi: Use symmetric SYM_START and SYM_END in __CFI_TYPE() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0064/1815] platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0065/1815] selftests: proc: include fcntl.h in proc-pidns Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0066/1815] HID: core: quiesce input in hid_hw_stop() to prevent use-after-free Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0067/1815] HID: nintendo: Fix imu_timestamp_us double increment per report Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0068/1815] HID: roccat: bound device-supplied profile index Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0069/1815] soc: samsung: exynos-pmu: fix of_node refcount leak in exynos_get_pmu_regmap() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0070/1815] media: cec-pin: Fix event FIFO ordering Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0071/1815] mtd: rawnand: pl353: Fix debug prints Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0072/1815] ASoC: SOF: ipc4-topology: Return error for invalid number of formats Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0073/1815] cxl/mbox: Clamp mailbox output allocation to the payload size Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0074/1815] arm64: dts: imx94: Correct PCIe outbound address space configuration Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0075/1815] arm64: dts: imx943: " Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0076/1815] cxl/pci: Remove incorrect mbox.valid check in cxl_pci_type3_init_mailbox() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0077/1815] ARM: imx: avic: Fix OF node reference leaks Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0078/1815] clk: versaclock7: Fix APLL clock leak on probe failure Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0079/1815] clk: canaan: Clear rate fields before reprogramming dividers Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0080/1815] clk: eswin: Add CLK_IGNORE_UNUSED to NoC clock Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0081/1815] clk: moxart: remove unused variables, fix refcount leak Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0082/1815] clk: nuvoton: ma35d1: fix ignored div_u64 return values in PLL freq calculation Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0083/1815] clk: nuvoton: ma35d1: fix PLL_CTL1_FRAC bit field width and fractional calc Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0084/1815] clk: nuvoton: ma35d1: fix ma35d1_clk_pll_determine_rate logic Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0085/1815] clk: stm32: add missing bitfield.h header Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0086/1815] ASoC: rt700-sdw: always drain jack work on remove Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0087/1815] ASoC: fsl_audmix: rework runtime PM handling in probe Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0088/1815] arm64: dts: imx8mp-frdm: Add missing HDMI DDC pinctrl Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0089/1815] clk: hisilicon: reset: Use devm_kzalloc to initialize hisi_reset_controller Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0090/1815] ARM: imx: fix device_node refcount leak in imx_src_init() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0091/1815] ARM: imx: fix device_node refcount leaks in imx7_src_init() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0092/1815] ARM: OMAP2+: Fix OF node reference leaks in omap_hwmod Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0093/1815] firmware: imx: sm-misc: Add NULL check for kmalloc in syslog_show Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0094/1815] arm64: dts: imx93-kontron: set memory node to 0x80000000/1GiB Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0095/1815] arm64: dts: freescale: imx95-toradex-smarc: add alias for lpuart5 Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0096/1815] arm64: dts: imx8mp-ab2: Enable MU2 for DSP communication Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0097/1815] clk: imx: scu: drop redundant init.ops variable assignment Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0098/1815] drm/lima: call drm_mm_init() with a valid allocation range Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0099/1815] mm/mm_init: fix incorrect node_spanned_pages Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0100/1815] sched/core: Fix inter-class wakeup_preempt() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0101/1815] sched/fair: Fix overflow in update_tg_cfs_runnable() Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0102/1815] perf/x86/intel/uncore: Keep PCI PMUs working when MMIO/MSR setup fails Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0103/1815] perf/x86/intel/uncore: Fix PCI PMU cleanup on setup failure Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0104/1815] perf/x86/intel/uncore: Fix refcnt and other cleanups Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0105/1815] perf/x86/intel/uncore: Let init_box() callback report failures Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0106/1815] perf/x86/intel/uncore: Factor out box setup code Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0107/1815] perf/x86/intel/uncore: Introduce PMU flags and broken state Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0108/1815] perf/x86/intel/uncore: Fix uncore_box ref/unref ordering Greg Kroah-Hartman
2026-09-12  6:30 ` [PATCH 7.2 0109/1815] pinctrl: imx1: fix device_node leak in dt_is_flat_functions() Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0110/1815] perf/x86/intel: Keep cap_user_rdpmc in sync with RDPMC user-disable state Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0111/1815] pinctrl: bcm2835: Dont remove an unregistered GPIO chip Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0112/1815] drm/panthor: Pass vm_bind_op to vm_prepare_map_op_ctx Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0113/1815] drm/panthor: Support sparse mappings Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0114/1815] drm/panthor: Fix NPD issue on partial unmap of an evicted BO Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0115/1815] riscv: kexec_file: Fix crashk_low_res not exclude bug Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0116/1815] workqueue: only show running workers in stall diagnostics Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0117/1815] perf test: Skip failing perf test aslr test case Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0118/1815] cxl/test: Add test for module parameters Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0119/1815] cxl/test: Refactor platform device enumerations Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0120/1815] cxl/test: Add hierarchy enumeration support for type2 device Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0121/1815] cxl/test: Propagate -ENOMEM on platform_device_alloc() failures Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0122/1815] media: keymaps: Remove obsolete RC_MAP_RC5_TV keymap define Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0123/1815] media: keymaps: Remove obsolete RC_MAP_HAUPPAUGE_NEW " Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0124/1815] wifi: ath12k: fix TLV32 length mask Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0125/1815] wifi: ath12k: correct monitor destination ring size Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0126/1815] perf pmu: Recognize default_core as a core PMU in more places Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0127/1815] perf util: Sort includes and add missed explicit dependencies Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0128/1815] perf evlist: Add reference count Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0129/1815] perf evsel: " Greg Kroah-Hartman
2026-09-12  6:31 ` Greg Kroah-Hartman [this message]
2026-09-12  6:31 ` [PATCH 7.2 0131/1815] perf parse-events: Restrict core PMU bypass to --cputype option Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0132/1815] perf test: Truncate test description to fit terminal width Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0133/1815] perf tests: Skip metrics validation if system-wide recording lacks permission Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0134/1815] perf tests: Fix Python JIT dump profiling test failure Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0135/1815] perf tests: Add robust record retry helper and use subsecond workloads Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0136/1815] perf tests: Fix flakiness in trace record and replay test Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0137/1815] perf tests: Fix flakiness in BPF counters test on hybrid systems Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0138/1815] perf tests: Fix flakiness in branch stack sampling tests Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0139/1815] PCI: imx6: Fix building against PCI_HOST_COMMON Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0140/1815] PCI: imx6: Fix building against PCI_PWRCTRL_GENERIC Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0141/1815] regulator: tps6594: Fix device node reference leaks in multiphase loop Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0142/1815] drm/amd/powerplay: fix VoltageObjectInfo zero-stride loop and OOB read Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0143/1815] drm/amdgpu/pm/powerplay: bounds-check voltage index in SMU7 lookup Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0144/1815] drm/amdgpu/pm/powerplay: bounds-check voltage index in Vega10 lookup Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0145/1815] ASoC: samsung: i2s: Avoid mixing goto with guard() Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0146/1815] ASoC: ti: j721e-evm: " Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0147/1815] drm/amd/display: Fix dangling pointer in plane reset function Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0148/1815] drm/amd/display: Fix dangling pointer in CRTC " Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0149/1815] bpftool: Strip all -Wformat* flags from bootstrap libbpf build Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0150/1815] tools/bpf/bpftool: Reset vmlinux BTF after map commands Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0151/1815] tools/bpf/bpftool: Reset vmlinux BTF after struct_ops commands Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0152/1815] bpf: Copy per-CPU map value padding in copy_map_value_long() Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0153/1815] selftests/bpf: Mask socket type flags in mptcpify prog Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0154/1815] bpf,lsm: Drop bpf_prog_free from sleepable_lsm_hooks Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0155/1815] mm/mm_init: handle alloc_percpu failure in free_area_init_core_hotplug Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0156/1815] leds: lp5860: Fix a potential double-unlock Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0157/1815] leds: lp5860-spi: Fix an error handling path Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0158/1815] dmaengine: mediatek: mtk-uart-apdma: Return -ENOMEM on memory allocation failure Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0159/1815] dmaengine: xilinx_dma: Fix channel idle state management in AXIDMA and MCDMA interrupt handlers Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0160/1815] dmaengine: zynqmp_dma: fix race between runtime PM and device removal Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0161/1815] dmaengine: hisilicon: Return -ENOMEM on dynamic memory allocation in probe Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0162/1815] dmaengine: xilinx_dma: Fix CPU stall in xilinx_dma_poll_timeout Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0163/1815] soundwire: qcom: Fix port exhaustion check in stream_alloc_ports Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0164/1815] iio: orientation: hid-sensor-rotation: Avoid race between callback setup and device exposure Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0165/1815] csky: Fix a4/a5 restoration in syscall trace path Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0166/1815] selftests/rseq: Replace glibc-specific __GNUC_PREREQ with portable check Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0167/1815] wifi: rtw89: debug: fix off by on in rtw89_ppdu_str() Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0168/1815] wifi: rtw89: fw: correct preload field of w2 in rtw89_fw_h2c_default_cmac_tbl_be() Greg Kroah-Hartman
2026-09-12  6:31 ` [PATCH 7.2 0169/1815] platform/chrome: sensorhub: Fix memory overread in ring handler Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0170/1815] wifi: rtw89: fw: fix link ID filling for LPS MLO common info Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0171/1815] wifi: rtw89: check return values in rtw89_ops_start_ap() Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0172/1815] wifi: rtw89: fix HE extended capability length check Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0173/1815] uprobes/x86: Remove struct uprobe_trampoline object Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0174/1815] uprobes/x86: Do not leak trampoline vma mapping on optimization failure Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0175/1815] uprobes/x86: Allow to copy uprobe trampolines on fork Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0176/1815] uprobes/x86: Move optimized uprobe from nop5 to nop10 Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0177/1815] fanotify: initialize permission event watchdog state Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0178/1815] tools/nolibc: mark arg1 operand in __nolibc_syscall0() as write-only Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0179/1815] perf cs-etm: Fix thread leaks on trace queue init failure Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0180/1815] perf cs-etm: Filter synthesized branch samples Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0181/1815] libbpf: Change has_nop_combo to work on top of nop10 Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0182/1815] libbpf: Detect uprobe syscall with new error Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0183/1815] perf/x86/amd/uncore: Add group validation Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0184/1815] perf test amd ibs: avoid using executable heap Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0185/1815] perf vendor events amd: Update Zen 5 core events Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0186/1815] perf vendor events amd: Update Zen 6 " Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0187/1815] hwrng: core - fix rng list on registration error Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0188/1815] crypto: qat - cancel work on re-enable SR-IOV timeout Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0189/1815] crypto: qat - clear AES key schedule from stack Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0190/1815] crypto: atmel-ecc - reject hardware ECDH without a public key Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0191/1815] crypto: atmel-sha204a - fix heap info leak on I2C transfer failure Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0192/1815] crypto: sa2ul - stop probe if context pool creation fails Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0193/1815] hwrng: xilinx-trng - propagate timeout before any data is read Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0194/1815] hwrng: omap - Fix probe error path cleanup Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0195/1815] crypto: rk3288 - fail ahash requests on HASH idle timeout Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0196/1815] crypto: keembay - Fix AEAD unregister count in error path Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0197/1815] RDMA/irdma: Deduplicate the irdma_del_memlist logic Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0198/1815] RDMA/irdma: Add a refcount to track user ring MR associations Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0199/1815] RDMA/irdma: Add irdma_cq fields to track pbl allocations Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0200/1815] RDMA/irdma: Add refcounting to user ring MRs Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0201/1815] arm64: dts: qcom: sm8750: wire UFS to ice instance Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0202/1815] arm64: dts: qcom: talos: Fix GMU unit address Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0203/1815] RDMA/bng_re: return a timeout when firmware responses stall Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0204/1815] fuse: move "epoch" from dentry.d_time to fuse_dentry.epoch Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0205/1815] nvme-apple: Use acquire/release for queue enabled state Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0206/1815] nvmet-rdma: factor out response resource cleanup Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0207/1815] nvmet-rdma: fix response resource leak on queue teardown Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0208/1815] bus: ti-sysc: Fix /chosen node reference leak Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0209/1815] PM: sleep: Fix off-by-one in wakelocks number limit check Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0210/1815] cgroup/cpuset: Make nr_deadline_tasks an atomic_t Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0211/1815] clk: qcom: gdsc: Add custom disable callback for GX GDSC Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0212/1815] clk: qcom: gxclkctl: Use custom disable callback for gx_gdsc Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0213/1815] arm64: dts: qcom: monaco: fix wrong connection for the replicator Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0214/1815] arm64: dts: qcom: sc8280xp-blackrock: switch to uefi rtc offset Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0215/1815] arm64: dts: qcom: sm7225-fairphone-fp4: Fix address in fb node name Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0216/1815] arm64: dts: qcom: sm6125: Use 64 bit addressing Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0217/1815] arm64: dts: qcom: hamoa: Fix clocks for HSPHYs Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0218/1815] arm64: dts: qcom: glymur: Fix unit-address mismatch for spmi_bus2 Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0219/1815] arm64: dts: qcom: glymur: Fix gcc clock specifier for usb_mp_qmpphy nodes Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0220/1815] arm64: dts: qcom: glymur-crd: Add Embedded controller node Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0221/1815] arm64: dts: qcom: glymur-crd: Move common board nodes to shared DTSI Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0222/1815] arm64: dts: glymur-crd: Add reset GPIO to touchscreen node Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0223/1815] clk: qcom: gcc-glymur: Move EVA clocks to critical clock list Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0224/1815] arm64: dts: qcom: sc8280xp: sort reserved memory regions Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0225/1815] bus: qcom-ebi2: Fix clock leak on probe failure Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0226/1815] PCI: qcom: Skip PERST# GPIOs provided by downstream PCIe devices Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0227/1815] wifi: mac80211_hwsim: avoid NULL skb in stop queue drain Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0228/1815] staging: greybus: audio: correct sscanf() return value check Greg Kroah-Hartman
2026-09-12  6:32 ` [PATCH 7.2 0229/1815] staging: sm750fb: gate dualview dataflow using g_dualview Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0230/1815] staging: sm750fb: Add missing Kconfig dependency Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0231/1815] greybus: audio: bound the topology section sizes against the fetched size Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0232/1815] staging: fbtft: Use sysfs_emit_at() to print to sysfs file Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0233/1815] staging: octeon: add missing tasklet_kill in cvm_oct_tx_shutdown Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0234/1815] staging: octeon: add missing napi_disable in cvm_oct_rx_shutdown Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0235/1815] staging: rtl8723bs: fix mismatched free of HalData in rtw_sdio_if1_init() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0236/1815] kbuild: unset sub_make_done before calling kselftest build system Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0237/1815] ALSA: via82xx: Remove unreachable branch in snd_via686_pcm_pointer() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0238/1815] selftests/bpf: libarena: Clean up allocation state before buddy tests Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0239/1815] selftests/bpf: Fix memory leak in msg_alloc_iov error path Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0240/1815] bpf: Reject MEM_ALLOC BTF accesses past object bounds Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0241/1815] s390/bpf: Replace ly instruction with llgf Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0242/1815] selftests/bpf: Fix memory leak in msg_alloc_iov Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0243/1815] selftests/lsm: Fix memory leak in attr_lsm_count Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0244/1815] irqchip/gic-v3-its: Fix memleak in its_probe_one() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0245/1815] irqchip/gic-v3-its: Fix its node leak in gic_acpi_parse_madt_its() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0246/1815] selftests: timers: leap-a-day: Fix -w option and update usage comment Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0247/1815] clocksource: Unregister subsystem on device registration failure Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0248/1815] timekeeping: Unwind aux clock sysfs children on failure Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0249/1815] timers/migration: Fix memory leak in tmigr_setup_groups() error path Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0250/1815] time/namespace: Validate nanosecond field in proc_timens_set_offset() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0251/1815] y2038: uapi: Use 64-bit __kernel_old_timespec::tv_nsec on x32 Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0252/1815] timekeeping: Account for monotonicity adjustment in ntp_error Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0253/1815] arm64: dts: qcom: Add #{address,size}-cells to Chromium-based /firmware Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0254/1815] clk: qcom: gdsc: propagate gdsc_check_status() errors from gdsc_poll_status Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0255/1815] clk: qcom: gdsc: propagate gdsc_enable() failure for ALWAYS_ON domains Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0256/1815] clk: qcom: gdsc: tear down per-domain genpds in gdsc_unregister() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0257/1815] arm64: dts: qcom: sc8280xp-arcata: Fix top USB-C DP alt mode Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0258/1815] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Fixup panel compatible Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0259/1815] arm64: dts: qcom: sdm670-google: add lpi reserved gpios Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0260/1815] arm64: dts: qcom: sc8180x-primus: Rename regulator nodes Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0261/1815] arm64: dts: qcom: sc8180x-primus: Describe the display power net Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0262/1815] arm64: dts: qcom: sc8180x-lenovo-flex-5g: Rename regulator nodes Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0263/1815] arm64: dts: qcom: sc8180x-lenovo-flex-5g: Describe the display power net Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0264/1815] clk: qcom: gcc-qcs8300: Use retention for PCIe power domains Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0265/1815] clk: qcom: gcc-qcs8300: Use retention for USB " Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0266/1815] perf record: fix poll storm when monitored threads exit Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0267/1815] perf data convert json: Fix trace_seq memory leak in process_sample_event() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0268/1815] bpf: Reject writes through untrusted BTF pointers Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0269/1815] staging: media: ipu7: fix pm_runtime refcount leak in ipu7_init_fw_code_region_by_sys() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0270/1815] staging: media: ipu7: fix pm_runtime refcount leak in ipu7_resume() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0271/1815] thermal/drivers/rcar: Fix error checking in probe() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0272/1815] usb: typec: ucsi: unregister debugfs entries on teardown Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0273/1815] usb: gadget: r8a66597: avoid double free of ep0_req in probe error path Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0274/1815] udf: Mark LVID buffer as uptodate before marking it dirty Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0275/1815] bpftool: Check EVP_Digest when computing excl_prog_hash Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0276/1815] drm/amdgpu/mes: Fix hung_queue_db_array loop limit for multi-XCC Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0277/1815] perf vendor events amd: Reintroduce deprecated Zen 5 core events Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0278/1815] perf dso: Fix kallsyms DSO detection with fallback logic Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0279/1815] bpf: Fix vmlinux BTF prep race in bpf_get_btf_vmlinux Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0280/1815] efi: fix stale reference to efi_recover_from_page_fault() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0281/1815] bpf: Fix use-after-free on mm_struct in bpf_find_vma() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0282/1815] bus: mhi: ep: Fix device refcount leak in the error path of MHI device creation Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0283/1815] bpf: Introduce jit_required flag and remove bpf_prog_has_kfunc_call() Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0284/1815] bpf: Reject programs with inlined helpers if JIT is not available Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0285/1815] iommu/mediatek-v1: Fix off-by-one in MT2701_LARB_NR_MAX Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0286/1815] bpf: Fix security_bpf_map_create error handling Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0287/1815] iommu/msm: Return -ENOMEM on memory allocation failure in probe Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0288/1815] iommu/amd: Prevent SB IOAPIC from overriding IVRS validation errors Greg Kroah-Hartman
2026-09-12  6:33 ` [PATCH 7.2 0289/1815] iommu/amd: Fix false positive in SB IOAPIC IVRS validation Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0290/1815] arm64: dts: mediatek: tungsten-smarc: Remove unnecessary cells Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0291/1815] leds: pca9532: Fix inverted GPIO output polarity Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0292/1815] leds: st1202: Stop pattern sequence before reprogramming Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0293/1815] leds: st1202: Fix pattern duration prescaler and pattern_clear skip marker Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0294/1815] leds: st1202: Fix spurious pattern sequence start in setup Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0295/1815] leds: st1202: Set all pattern PWM slots to full after clearing pattern Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0296/1815] leds: st1202: Fix brightness having no effect while pattern mode is active Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0297/1815] leds: st1202: Disable channel when brightness is set to zero Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0298/1815] leds: st1202: Validate LED reg property against channel count Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0299/1815] printk: Fix possible console use-after-free Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0300/1815] ACPI: RISC-V: Fix riscv_acpi_irq_get_dep() loop termination Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0301/1815] ACPI: RISC-V: Check acpi_get_handle() status in riscv_acpi_add_prt_dep() Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0302/1815] ACPI: RISC-V: Fix riscv_acpi_add_prt_dep() loop handling Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0303/1815] platform/x86: dell-privacy: Fix race condition Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0304/1815] platform/x86: dell-wmi-base: Fix resource leak on module load failure Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0305/1815] platform/x86: dell-wmi-base: Fix handling of ultra performance key Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0306/1815] platform/x86: lg-laptop: Fix LED resource handling Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0307/1815] bpf: Drop scalar id on sign-extending narrowing stack fills Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0308/1815] remoteproc: qcom_q6v5_adsp: Fix reference leak for device node Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0309/1815] remoteproc: qcom_wcnss: Fix handling the lack of PD regulators in v3 Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0310/1815] bpf: Reject rdonly/rdwr_buf_size kfunc arguments that exceed u32 max Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0311/1815] hwspinlock: propagate errno when registering single lock Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0312/1815] selftests/sched_ext: Fix bpf_link leak on early return in prog_run Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0313/1815] perf capstone: Fix kernel map reference count leak Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0314/1815] platform/x86: asus-wireless: Fail probe when there is no ACPI match Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0315/1815] spi: qcom-geni: Fix missing error check on pm_runtime_get_sync() Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0316/1815] media: platform: amd: use refcount_t instead of atomic_t Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0317/1815] serial: 8250: Clear CON_PRINTBUFFER on port re-registration Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0318/1815] serial: ma35d1: Fix OF node reference leaks in console init Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0319/1815] serial: qcom-geni: do not advance stale DMA completions Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0320/1815] usb: gadget: uac: validate rate list length before storing Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0321/1815] usb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0322/1815] usb: gadget: configfs: fix out-of-bounds read of qw_sign Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0323/1815] usb: typec: tcpm: fix EPR AVS APDO maximum voltage decoding Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0324/1815] usb: ljca: bound bank_num in ljca_enumerate_gpio() Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0325/1815] usb: gadget: aspeed_udc: check endpoint DMA allocation Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0326/1815] usb: fix UAF when probe runs concurrent to dyn ID removal Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0327/1815] platform/x86: asus-wmi: fix resource leaks on probe failure Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0328/1815] platform/mellanox: mlxbf-pmc: Check ACPI_COMPANION() against NULL Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0329/1815] platform/surface: acpi-notify: Check ACPI companion before use Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0330/1815] usb: mtu3: allow system suspend during active gadget connection Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0331/1815] usb: renesas_usbhs: Fix power-off ordering on unbind Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0332/1815] usb: typec: ucsi: gaokun: unwind notifier on UCSI register failure Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0333/1815] usb: chipidea: imx: fix missing ret assignment for dev_err_probe Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0334/1815] drm/panel: samsung-s6d16d0: Power off on prepare failure Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0335/1815] perf record: Fix teardown hang on system-wide multi-threaded sessions Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0336/1815] clk: spacemit: k3: fix parent clock of UFS aclk Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0337/1815] perf metricgroup: Fix metric expression copy leaks Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0338/1815] soc: qcom: rpmh-rsc: manage PM notifiers with devres Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0339/1815] bus: qcom-ebi2: use managed resources for clocks and children Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0340/1815] clk: qcom: camcc-sc8280xp: unregister CAMCC_GDSC_CLK Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0341/1815] bpf: Require a BPF cpumask for bpf_cpumask_populate() Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0342/1815] bpf: Mark tracing_multi trampolines as ftrace managed Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0343/1815] wifi: rtw89: 8852a: fix RSSI report when average beacon RSSI is not ready Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0344/1815] iio: accel: dmard09: Implement IIO_CHAN_INFO_SCALE Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0345/1815] RDMA/core: Wait for RCU callbacks before unloading ib_core Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0346/1815] RDMA/mlx5: Drain RCU callbacks during module teardown Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0347/1815] RDMA/ipoib: " Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0348/1815] RDMA/rxe: Avoid reprocessing the current packet after the QP enters the error state Greg Kroah-Hartman
2026-09-12  6:34 ` [PATCH 7.2 0349/1815] drm/msm/dp: add missing drm_edid_connector_update() before add_modes on cached EDID Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0350/1815] Revert "drm/msm: dsi: fix PLL init in bonded mode" Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0351/1815] crypto: ccp - Fix possible deadlock in SEV init failure path Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0352/1815] crypto: ccp - Fix memory leak in SEV INIT_EX path Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0353/1815] hwrng: ks-sa - Fix runtime PM cleanup on registration failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0354/1815] crash_dump: release keyring reference at the correct time Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0355/1815] xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0356/1815] esp: do not unref managed frag pages in esp_ssg_unref() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0357/1815] ALSA: hpi: Check transport errors during HPI6000 adapter initialization Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0358/1815] pmdomain: bcm: bcm2835: handle genpd provider registration errors Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0359/1815] misc: rtsx_usb: avoid USB I/O in runtime autosuspend Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0360/1815] RDMA/rvt: Return NULL after port allocation failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0361/1815] RDMA/hfi1: Preserve unit 0 on " Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0362/1815] RDMA/hfi1: Free RX data on late probe failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0363/1815] RDMA/hfi1: Stop flushing the global IB workqueue Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0364/1815] RDMA/hfi1: Initialize debugfs after probe completes Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0365/1815] ASoC: apple: mca: increase SERDES reset delay Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0366/1815] isofs: fix out-of-bounds page array access on empty zisofs block Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0367/1815] iommufd/selftest: Avoid selftest dirty bitmap size wrap Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0368/1815] iommufd/selftest: Fix dmabuf leak in iommufd_test_dmabuf_get() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0369/1815] rust: drm: gpuvm: require Send + Sync for the drivers associated data Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0370/1815] media: v4l2-async: Unregister sub-device if asc_list is empty Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0371/1815] tools/sched_ext: scx_flatcg: Fix uninitialized stats on allocation failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0372/1815] fs/resctrl: Prevent use-after-free in rdtgroup_kn_put() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0373/1815] perf record: Return the written size from process_comp_header() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0374/1815] perf record: Fix multiple PERF_RECORD_COMPRESSED2 records per push Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0375/1815] fs/resctrl: Fix UAF from worker threads when domains are removed Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0376/1815] rpmsg: glink: fix deadlock in endpoint destroy during driver detach Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0377/1815] arm64: dts: renesas: rzt2h-n2h-evk: Remove unused MII/GMII pins Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0378/1815] arm64: dts: renesas: r9a09g056: Fix PCIe dma-ranges memory space code Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0379/1815] arm64: dts: renesas: r9a09g047: " Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0380/1815] iommufd: Simplify iommufd_device_remove_vdev() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0381/1815] cxl/test: Rework cxl_type2_mem_init() to use cxl_mock_platform_device_add() Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0382/1815] cxl/memdev: Fix firmware upload exact-fit handling Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0383/1815] cxl/mbox: Break poison list loop on an empty payload Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0384/1815] cxl/pci: Honor -EPROBE_DEFER from component register setup Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0385/1815] cxl/features: Serialize multi-part Get/Set Feature transfers Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0386/1815] cxl/port: Restart port enumeration when a sibling adds the dport first Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0387/1815] hfsplus: validate thread record before delete key rebuild Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0388/1815] wifi: ath12k: fix dp_link_peer dangling references on AP vdev rollback Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0389/1815] wifi: ath12k: fix MLO peer delete race Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0390/1815] wifi: ath12k: fix rx_mpdu_start layout for QCC2072 Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0391/1815] wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0392/1815] x86/entry/fred: Encode frame pointer on entry Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0393/1815] firmware: arm_scmi: Publish channel state before callbacks Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0394/1815] firmware: arm_scmi: Unregister device notifier before IDR teardown Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0395/1815] firmware: arm_scmi: Quiesce notifications before teardown Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0396/1815] firmware: arm_scmi: Clean up channels on setup failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0397/1815] firmware: arm_scmi: Free transport channel on IDR failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0398/1815] firmware: arm_scmi: Avoid IDR updates while cleaning channels Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0399/1815] firmware: arm_scmi: Reject out of range DT protocol IDs Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0400/1815] firmware: arm_scmi: Use channel ID for transport teardown Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0401/1815] firmware: arm_scmi: Protect device request lookup with RCU Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0402/1815] firmware: arm_scmi: Drop handle on protocol bind failures Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0403/1815] firmware: arm_scmi: Clear SystemPower flag on create failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0404/1815] firmware: arm_scmi: Fix OF node reference handling Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0405/1815] firmware: arm_scmi: Unwind TX receiver mailbox setup failure Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0406/1815] firmware: arm_scmi: Unwind P2A " Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0407/1815] firmware: arm_scmi: Fix SCMI device destroy lifetimes Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0408/1815] firmware: arm_scmi: Fix transport device teardown lookup Greg Kroah-Hartman
2026-09-12  6:35 ` [PATCH 7.2 0409/1815] cxl/features: Reject Get Feature count larger than the output buffer Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0410/1815] cxl/features: Reject Set Features output buffer smaller than the header Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0411/1815] cxl/features: Clamp Get Feature output size to the remaining buffer Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0412/1815] regulator: adp5055: Fix error code in adp5055_of_parse_cb() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0413/1815] tools/sched_ext: scx_qmap: Fix stale API name in comment Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0414/1815] libnvdimm/labels: Bound the on-media label size before the shift Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0415/1815] dax: fix misleading comment about share/index union in dax_folio_reset_order() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0416/1815] dax/fsdev: fix multi-range offset in memory_failure handler Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0417/1815] dax/fsdev: clear vmemmap_shift when binding static pgmap Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0418/1815] dax/fsdev: dont leave a dangling dev_dax->pgmap on probe failure Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0419/1815] dax/fsdev: clear pgmap ops and owner on unbind Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0420/1815] dax/fsdev: use __va(phys) for kaddr in direct_access Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0421/1815] dax/fsdev: fail probe on invalid pgmap offset Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0422/1815] dax: read holder_ops once in dax_holder_notify_failure() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0423/1815] dax: fix holder_ops race in fs_put_dax() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0424/1815] cpufreq: spear: Fix an IS_ERR() vs NULL bug in spear1340_set_cpu_rate() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0425/1815] PCI: xgene: Drop unnecessary OF node reference Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0426/1815] PCI: keystone: Fix OF node reference leak in init Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0427/1815] irqchip/renesas-irqc: Fix generic interrupt chip leak on remove Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0428/1815] media: ti: vpe: Select V4L2_FWNODE for VIP Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0429/1815] media: i2c: rdacm21: Fix missing media_entity_cleanup() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0430/1815] media: platform: amd: fix unmet dependency for VIDEO_V4L2_SUBDEV_API Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0431/1815] media: bcm2835-unicam: Fix asc leaked in error/remove path Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0432/1815] media: ipu6: Do not free aux device pdata after init Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0433/1815] OPP: Fix cleanup ordering Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0434/1815] drm/amd/display: Fix DM I2C teardown race Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0435/1815] drm/amd/display: Remove unused-but-set variable hubp from Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0436/1815] drm/amd/display: fix wrong register field in dccg35_set_hdmistreamclk_src_new Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0437/1815] drm/amd/display: remove duplicate link_dp_panel_replay.h include Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0438/1815] cpufreq: intel_pstate: Fix setting minimum P-state at init time Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0439/1815] cpufreq: schedutil: Fix self-contradictory comment in sugov_iowait_apply() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0440/1815] remoteproc: qcom_q6v5_mss: Make ssctl_id configurable per platform Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0441/1815] remoteproc: qcom_q6v5_mss: Fix MDM9607 subsystem control instance ID Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0442/1815] remoteproc: qcom: Fix glink->node reference leak in qcom_add_glink_subdev Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0443/1815] perf: evsel: Fix error handling in tp_format lookup Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0444/1815] drm/bridge: tc358767: clamp the reported AUX read size to the request Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0445/1815] x86/mm/pat: Take cpa_lock around large-page collapse Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0446/1815] arm64: dts: qcom: msm8996-xiaomi-gemini: Fix up ti,drv2604 enable GPIO Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0447/1815] arm64: dts: qcom: sc8280xp-x13s: Fix the drive-strength of mclk pin Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0448/1815] arm64: dts: qcom: eliza: Enable first QUPv3 wrapper by default Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0449/1815] arm64: dts: qcom: glymur-crd: merge duplicate &pmh0101_gpios node extensions Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0450/1815] arm64: dts: qcom: ipq5018: Correct CMN PLL reference clock rate Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0451/1815] arm64: qcom: ipq5018: Add GEPHY RX and TX clocks Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0452/1815] arm64: dts: qcom: sm8250: sort out Iris power domains Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0453/1815] arm64: dts: qcom: sm8250: correct frequencies in the Iris OPP table Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0454/1815] arm64: dts: qcom: milos: Add reset for sdhc_2 Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0455/1815] perf sched: Add missing perf_session__delete() Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0456/1815] perf sched: Fix memory leaks in perf sched stats report Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0457/1815] perf sched: Free subcommand string after perf sched stats Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0458/1815] perf jevents: Add more components to the metric sorting order Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0459/1815] clk: qcom: gcc-glymur: Enable runtime PM Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0460/1815] soc: renesas: r8a78000: Drop duplicate "default ARCH_RENESAS" Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0461/1815] drm/solomon: remove unneeded variables in blit functions Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0462/1815] spi: geni-qcom: Fix sticky ret causing wrong return value on invalid proto Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0463/1815] perf stat: Fix duplicate output with --for-each-cgroup Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0464/1815] wifi: iwlwifi: fix counter type in iwl_fwrt_dump_error_logs Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0465/1815] wifi: iwlwifi: mvm: fix off-by-one in TXF key sanitiser Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0466/1815] wifi: iwlwifi: mei: check SAP message length before reading it Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0467/1815] wifi: iwlwifi: guard against division by zero in iwl_dbg_tlv_alloc_fragments Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0468/1815] wifi: iwlwifi: mei: pass correct argument to function Greg Kroah-Hartman
2026-09-12  6:36 ` [PATCH 7.2 0469/1815] gpu: host1x: Avoid double device_add when clients already present Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0470/1815] gpu: host1x: Fix offset calculation in trace_write_gather Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0471/1815] gpu: host1x: Avoid stack over-read in debug output helpers Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0472/1815] drm/msm/adreno: fix use after free on error path in a6xx_gpu_init() Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0473/1815] drm/msm/a6xx: Fix stale rpmh votes after suspend Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0474/1815] drm/msm: Recover HW before retire hung submit Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0475/1815] drm/msm/a6xx: Fix A663 GPUCC register list for state capture Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0476/1815] drm/msm/a6xx: Fix A621 " Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0477/1815] drm/msm/a6xx: Fix IRQ storm during msm_recovery test Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0478/1815] drm/msm: Fix task_struct reference leak in recover_worker Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0479/1815] drm/msm: Only fini scheduler after successful init Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0480/1815] bpf: Sync tail_call_reachable with callee state on entry Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0481/1815] scsi: ufs: core: Avoid possible memory reclaim deadlock in TX EQTR context Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0482/1815] wifi: rtw89: fw: use MAC source for IO offload delay command Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0483/1815] crypto: sl3516 - drop invalid sg_dma_len checks before DMA mapping Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0484/1815] crypto: aspeed - Propagate platform_get_irq() errors Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0485/1815] ACPI: processor: idle: Expand _LPI package sanity checks Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0486/1815] usb: gadget: f_uac1_legacy: remove broken string configfs attributes Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0487/1815] tty: hvc: restrict HVC_DCC to ARMv6+ and ARM64 Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0488/1815] UDF symlink pathComponent header OOB read Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0489/1815] staging: rtl8723bs: fix xmit_frame/xmit_buf leaks on mgnt-frame error paths Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0490/1815] tlclk: if sscanf() fails, fall back to 0, not random value Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0491/1815] gpib: Move stuck SRQ update under lock Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0492/1815] gpib: use static inline instead of extern inline Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0493/1815] uio: Fix stale info pointer in failed registration path Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0494/1815] accessibility: speakup: Fix incorrect string length computation in report_char_chartab_status() Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0495/1815] speakup: keyhelp: guard letter_offsets possible out-of-range indexing Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0496/1815] mei: lb: fix incorrect type in assignment Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0497/1815] misc: pch_phub: Complete enum usage for device identification Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0498/1815] misc: bcm-vk: Use acquire/release for msgq_inited Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0499/1815] misc: rtsx: add missing write register handling Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0500/1815] misc: ad525x_dpot: use driver core groups for sysfs files Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0501/1815] misc: lan966x_pci: depopulate children on populate failure Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0502/1815] cacheinfo: dont propagate DT/ACPI error when arch supplies info (arm64) Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0503/1815] ppdev: prevent overflow when setting port timeout Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0504/1815] ipack: ipoctal: fix UAF, null-ptr-deref, and use-after-free in cleanup on remove Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0505/1815] char: xilinx_hwicap: unregister class on init errors Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0506/1815] vfio: selftests: Avoid VLAs Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0507/1815] vfio/pci: clear vdev->msi_perm after freeing it on init failure Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0508/1815] soc: ti: knav_qmss: Remove debugfs file on teardown Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0509/1815] mtd: intel-dg: Fix runtime PM error path in probe Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0510/1815] mtd: mtdswap: Avoid freeing registered blktrans device twice Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0511/1815] mtd: part: reject MTDPART_OFS_RETAIN in mtd_add_partition() Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0512/1815] perf ui hists: Fix uninitialized stack memory free on pstack allocation failure Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0513/1815] perf build: Fix compiler errors with old capstone Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0514/1815] drm/v3d: Drop unused drm_encoder.h include from v3d_drv.h Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0515/1815] drm/v3d: Extract v3d_job_add_syncobjs() helper Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0516/1815] drm/v3d: Migrate BO reservation locking to DRM exec Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0517/1815] drm/v3d: Introduce struct v3d_submit and convert CL/TFU/CSD ioctls Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0518/1815] drm/v3d: Make v3d_get_cpu_indirect_csd_params() a pure parser Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0519/1815] drm/v3d: Convert submit helpers to operate on struct v3d_submit Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0520/1815] drm/v3d: Associate BOs with every job that accesses them Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0521/1815] drivers: base: Remove statistics group if encryption group not created Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0522/1815] software node: Fix software_node_get_reference_args() with index -1 Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0523/1815] driver core: soc: Unregister bus on early device registration failure Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0524/1815] drm/msm/a6xx: Fix RBBM_CLOCK_CNTL3_TP0 value in a730_hwcg Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0525/1815] arm64: dts: qcom: glymur: Add CX power domain to GCC Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0526/1815] bpf: Reject arena frees below the arena base Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0527/1815] bpf: Disallow interpreter fallback for arena-related insns Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0528/1815] bpf: Disallow interpreter fallback for gotox insn Greg Kroah-Hartman
2026-09-12  6:37 ` [PATCH 7.2 0529/1815] bpf: Disallow interpreter fallback for BPF_ADDR_PERCPU insn Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0530/1815] dmaengine: dw-edma: Terminate all descriptors without callbacks Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0531/1815] dmaengine: dw-edma: Serialize abort state updates Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0532/1815] dmaengine: dw-edma: Serialize channel state checks Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0533/1815] dmaengine: dw-edma: Clear stale requests on termination Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0534/1815] ASoC: meson: Keep link pointers valid on realloc failure Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0535/1815] iio: dac: ad5686: missing NULL check on match data Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0536/1815] phy: starfive: Fix runtime PM cleanup in JH7110 DPHY TX probe Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0537/1815] phy: starfive: Fix runtime PM cleanup in JH7110 DPHY RX probe Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0538/1815] arm64: dts: amlogic: meson-axg: Add missing nand_rb0 pin to nand_all_pins Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0539/1815] arm64: dts: amlogic: meson-axg-s400: enable mipi_pcie_analog_dphy for PCIe Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0540/1815] RDMA/hfi1: Propagate sdma_txinit_ahg() errors Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0541/1815] RDMA/rxe: Validate num_sge/cur_sge before indexing wqe->dma.sge[] Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0542/1815] RDMA/core: Add ib_no_udata_io() helper Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0543/1815] RDMA/bnxt_re: Validate udata before executing commands Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0544/1815] RDMA/srpt: Fix srpt_alloc_rw_ctxs() unwind counters Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0545/1815] kcsan: avoid unintended access checking in NMIs Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0546/1815] arm64: dts: imx8-ss-audio: Fix LPCG clock indices for ASRC0 Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0547/1815] x86/bugs: Dont use cpu-type matching in cpu_vuln_blacklist Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0548/1815] selftests/bpf: Check malloc result with ASSERT_NEQ in test_loader Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0549/1815] selftests/bpf: Check malloc result with ASSERT_NEQ in test_sha256 Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0550/1815] selftests/bpf: Silence array bounds warning in global_map_resize Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0551/1815] selftests/bpf: Silence maybe-uninitialized compiler warning in libarena Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0552/1815] rust: device: make lifetime on `Core` and `CoreInternal` invariant Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0553/1815] samples: rust: debugfs: fix excessive stack use Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0554/1815] irqchip/gic-v3-its: Prevent leak in its_vpe_irq_domain_alloc() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0555/1815] RDMA/nldev: validate dynamic counter attribute length Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0556/1815] ACPI: EC: Avoid _REG disconnect on GPIO IRQ defer Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0557/1815] ACPI: processor: validate MADT IOAPIC entry bounds Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0558/1815] ACPI: PCI: Clear driver_data on all paths that free the acpi_pci_root Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0559/1815] ext4: fix circular lock dependency in ext4_ext_migrate Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0560/1815] ext4: fix out-of-bounds read in ext4_read_inline_dir() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0561/1815] ext4: skip extra isize expansion during mount to prevent deadlock Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0562/1815] platform/x86: acer-wmi: reject missing gaming WMI results Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0563/1815] bpf: Zero queue and stack outputs on lock failure Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0564/1815] selftests/bpf: Fix make install target Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0565/1815] selftests/bpf: Fix lsm_bdev dev_t encoding mismatch Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0566/1815] libbpf: Search /lib64 and /lib in resolve_full_path() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0567/1815] riscv, bpf: Fix memory leak in bpf_jit_free Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0568/1815] riscv, bpf: Fix kernel stack corruption in tailcall with CFI Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0569/1815] bpf, riscv: Fix extable handling for arena load_acquire Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0570/1815] ACPI: battery: Adjust charging status validation check Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0571/1815] virt: arm-cca-guest: use migrate_disable() for attestation token requests Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0572/1815] bpf: Fix offset warn check for bpf_res_spin_lock Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0573/1815] bpf: Preserve unique-field state across nested structs Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0574/1815] bpf: Mark bpf_refcount field as unique Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0575/1815] RDMA/srpt: Pass the mapped task attribute to target_init_cmd() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0576/1815] PCI: j721e: Fix incorrect max_lanes for J7200 Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0577/1815] RDMA/erdma: Fix CEQ tasklet use-after-free on removal Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0578/1815] RDMA/mana_ib: drain QP references after partial table insertion Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0579/1815] RDMA/core: Add rdma_restrack_begin/abort/commit_del() operations Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0580/1815] RDMA/core: Fix use after free in ib_query_qp() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0581/1815] RDMA/core: Fix potential use after free in ib_destroy_cq_user() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0582/1815] RDMA/core: Fix potential use after free in ib_destroy_srq_user() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0583/1815] RDMA/core: Fix potential use after free in counter_release() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0584/1815] RDMA/core: Fix potential use after free in ib_free_cq() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0585/1815] RDMA/core: Fix potential use after free in uverbs_free_dmah() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0586/1815] RDMA/core: Fix potential use after free in ib_dealloc_pd_user() Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0587/1815] firmware: arm_scmi: Fix requested device removal race Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0588/1815] iommu/amd: Fix undefined behavior in devid_write debugfs function Greg Kroah-Hartman
2026-09-12  6:38 ` [PATCH 7.2 0589/1815] iommu/qcom: Remove sysfs device on probe failure path Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0590/1815] iommu/qcom: Fix inverted fault report check in qcom_iommu_fault() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0591/1815] iommu/arm-smmu-v3: Declare eats_s1chk and eats_trans as host-endian u64 Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0592/1815] thermal: intel: int3400: clean up ODVP on probe failures Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0593/1815] ext4: fix ABBA deadlock in ext4_xattr_inode_cache_find() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0594/1815] ext4: clear stale xarray tags on folios skipped during writeback Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0595/1815] ext4: drain in-flight DIO before buffered write fallback Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0596/1815] ext4: use fsdata to track inline data write state and fix race Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0597/1815] ext4: validate readdir offset before accessing dirent Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0598/1815] wifi: ath12k: Advertise multicast Ethernet encapsulation offload support Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0599/1815] wifi: ath12k: Set IEEE80211_OFFLOAD_ENCAP_4ADDR after tx_encap_type vdev param Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0600/1815] wifi: ath12k: advertise ieee_link_id in vdev start MLO params Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0601/1815] wifi: ath12k: fix ML-STA authentication timeout on QCC2072 Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0602/1815] wifi: ath6kl: avoid buffer overreads in WMI event handlers Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0603/1815] wifi: ath12k: switch to name-based reserved memory lookup Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0604/1815] wifi: ath12k: refactor QMI memory assignment Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0605/1815] wifi: ath12k: allocate HOST_DDR and BDF regions after Q6 RO region Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0606/1815] wifi: ath12k: Correctly copy the hint BSSID in WMI scan request Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0607/1815] wifi: ath11k: " Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0608/1815] wifi: ath12k: fix survey indexing across bands Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0609/1815] wifi: ath12k: Avoid buffer overread in ath12k_wmi_op_rx() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0610/1815] wifi: ath11k: Avoid buffer overread in ath11k_wmi_tlv_op_rx() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0611/1815] RDMA/bnxt_re: Clear VM_MAYWRITE on DBR/toggle page mmap Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0612/1815] ext4: fix buffer_head leak in ext4_init_orphan_info Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0613/1815] ext4: check dir entry fits before reading the hash trailer in ext4_search_dir() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0614/1815] ext4: skip tail block zeroing for inline data files Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0615/1815] ARM: dts: allwinner: a10: Fix PMU interrupt Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0616/1815] cpufreq: amd-pstate-ut: Skip tests when amd-pstate driver is not active Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0617/1815] cpufreq/amd-pstate: Fix EPP return type and handle errors during initialization Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0618/1815] cpufreq/amd-pstate: Toggle auto_sel in active mode on shared memory systems Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0619/1815] cpufreq/amd-pstate: handle missing policy in dynamic EPP callbacks Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0620/1815] firmware: arm_scmi: Roll back partial protocol table registration Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0621/1815] firmware: arm_scmi: Unrequest devices if driver registration fails Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0622/1815] bitmap: Properly initialise destination bitmap for scatter & gather test Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0623/1815] riscv: dts: spacemit: set console baud rate on K3 Pico-ITX board Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0624/1815] riscv: dts: spacemit: k1: Split gmac_clk_ref into independent pinctrl groups Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0625/1815] riscv: dts: thead: th1520: remove pclk for I2C1 Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0626/1815] gpu: nova-core: correct RISC-V HALTED field Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0627/1815] perf cs-etm: Flush thread stacks after decoder reset Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0628/1815] perf cs-etm: Avoid truncating AUX buffer sizes to int Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0629/1815] xfrm: Fix skb double-free in xfrm_dev_direct_output() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0630/1815] RDMA/erdma: complete object teardown when the destroy command fails Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0631/1815] PM: hibernate: Fix memory leak in snapshot_write_next() error path Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0632/1815] leds: pca9532: Fix phantom device registration on missing hardware Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0633/1815] clk: sunxi-ng: mux: fix determine helper rate propagation Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0634/1815] ASoC: spacemit: rename clock inputs to match binding Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0635/1815] perf cap: Remove used_root parameter and simplify capability checks Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0636/1815] perf trace: Correct default cpumask formatting to hexadecimal Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0637/1815] drm/tve200: add OF module alias for autoloading Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0638/1815] netfilter: nf_nat_sip: rewind offset when NAT shrinks the packet Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0639/1815] fs/ntfs3: fix out-of-bounds read of INDEX_ROOT in reparse/objid init Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0640/1815] drm/panthor: return PTR_ERR() from devm_drm_dev_alloc() Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0641/1815] exfat: fix valid_size extension over a shared writable mapping Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0642/1815] arm64: dts: rockchip: Add missing hclk for RK3588 eDP0 Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0643/1815] arm64: dts: rockchip: Add missing hclk for RK3588 eDP1 Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0644/1815] arm64: dts: rockchip: Fix Gru WLAN sideband interrupt Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0645/1815] arm64: dts: rockchip: Fix rk3566-bigtreetech-cb2 touchscreen property Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0646/1815] bpf: Fix CFI mismatch in task work callback Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0647/1815] ARM: lpc32xx: only run SoC init on LPC32xx hardware Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0648/1815] bpf: Fix WARNING in bpf_tracing_link_release Greg Kroah-Hartman
2026-09-12  6:39 ` [PATCH 7.2 0649/1815] selftests/bpf: Fix incorrect error checking for pthread_create Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0650/1815] selftests/bpf: Fix missing allocation null checks in test_progs.c Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0651/1815] selftests/bpf: Fix memory leak on subtest_states reallocation Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0652/1815] pinctrl: fix unmet dependencies from missing GPIOLIB Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0653/1815] cxl/region: Fix use-after-free in find_pos_and_ways() error path Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0654/1815] power: reset: reboot-mode: Remove devres based allocations Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0655/1815] riscv: dts: spacemit: improve RTL8211F PHY configuration on K3 Pico-ITX board Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0656/1815] riscv: dts: spacemit: Add enough deassert time for the PHY on PICO ITX Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0657/1815] riscv: dts: spacemit: Add enough deassert time for the PHY on com260 board Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0658/1815] liveupdate: reject nonzero reserved value for SESSION_FINISH Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0659/1815] liveupdate: Reference count outgoing FLB data Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0660/1815] liveupdate: Remember FLB retrieve() status Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0661/1815] pinctrl: mediatek: use devm_gpiochip_add_data() for GPIO chip Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0662/1815] pinctrl: mediatek: free EINT resources on unbind Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0663/1815] tools/build: Allow versioning of all LLVM tools defined in Makefile.include Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0664/1815] riscv: dts: spacemit: Fix phy id check for the phy on pico-itx board Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0665/1815] riscv: dts: spacemit: Fix phy id check for the phy on com260 board Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0666/1815] arm64: RSI: fix field-spanning write warning in attestation token init Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0667/1815] power: supply: sbs-battery: Use a per-device serial number buffer Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0668/1815] scsi: ufs: core: Validate string descriptors Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0669/1815] scsi: ufs: Avoid NULL CQE dereference when reporting invalid tags Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0670/1815] scsi: ufs: core: Validate connected lane counts Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0671/1815] scsi: ufs: rpmb: Validate request frame length before parsing Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0672/1815] scsi: ufs: debugfs: Reserve space for a string terminator Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0673/1815] crypto: keembay - Initialize completion before requesting IRQ Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0674/1815] crypto: keembay - publish OF module alias for OCS AES/SM4 Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0675/1815] RDMA/mlx5: Fix integer overflow of user QP buffer size Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0676/1815] ACPI: bus: Avoid confusing complaints regarding missing _OSC features Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0677/1815] thermal/drivers/airoha: Fix copy paste error on clamp_t low temp Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0678/1815] thermal/drivers/airoha: Fix copy paste error for sen internal Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0679/1815] thermal/drivers/qcom-spmi-adc-tm5: Drop IIO_VAL_INT check in adc_tm5_get_temp Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0680/1815] powercap: intel_rapl_tpmi: Handle PMU registration failure during probe Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0681/1815] isofs: release zisofs block pointer buffer head Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0682/1815] PCI/pwrctrl: tc9563: Fix parsing the integrated Ethernet MAC Endpoint node Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0683/1815] PCI/pwrctrl: tc9563: Power off only the external ports in tc9563_pwrctrl_disable_port() Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0684/1815] clk: mediatek: mt6735: Unregister PLLs on probe failure Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0685/1815] spi: oc-tiny: switch to managed controller allocation Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0686/1815] w1: ds2482: Fix signedness bug in ds2482_w1_triplet() Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0687/1815] sched_ext: Fix exit_cpu accuracy for lockup paths Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0688/1815] sched_ext: Abort directly from the hardlockup handler Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0689/1815] gpu: nova-core: build SetRegistry entries dynamically Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0690/1815] gpu: nova-core: fix packed registry table size Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0691/1815] perf ui hists: In report UI ensure thread is set with reference counting Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0692/1815] perf annotate: Be robust to annotating without a thread Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0693/1815] cpufreq/amd-pstate: Set min_limit_freq based on bios_min_perf Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0694/1815] remoteproc: Allow shutdown of crashed processors Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0695/1815] remoteproc: core: Attach rproc asynchronously in rproc_add() path via schedule_work() Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0696/1815] remoteproc: Prevent crash handling to race with rproc_del() Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0697/1815] remoteproc: qcom: pas: Add late attach support for subsystems Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0698/1815] remoteproc: qcom: q6v5: Request shutdown if crash is triggered host-side Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0699/1815] arm64: dts: qcom: glymur: fix SoCCP memory mappings Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0700/1815] staging: rtl8723bs: use kfree_sensitive() for key material Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0701/1815] fs/ntfs3: reject restart table growth beyond U16_MAX entries Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0702/1815] iommu/tegra241-cmdqv: Publish an LVCMDQ only after it is fully initialized Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0703/1815] iommu/tegra241-cmdqv: Synchronize the error ISR against VINTF (de)init Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0704/1815] iommu/tegra241-cmdqv: Dont run the error ISR before probe sets up vintfs Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0705/1815] iommu/tegra241-cmdqv: Dont fall back to a freed smmu after devm_krealloc() Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0706/1815] iommu/tegra241-cmdqv: Free the error IRQ before tearing down VINTFs Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0707/1815] iommu/tegra241-cmdqv: Require exactly one Stream ID for a vSID Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0708/1815] iommu/tegra241-cmdqv: Fix VINTF0 leak on the init-failure path Greg Kroah-Hartman
2026-09-12  6:40 ` [PATCH 7.2 0709/1815] RDMA/rxe: Fix UAF in ODP init error-handling path Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0710/1815] RDMA/efa: Fix PBL chunk length computation Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0711/1815] media: stm32: dcmi: fix error handling on MDMA pool alloc failure Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0712/1815] wifi: mac80211: fix per-STA profile length in cross-link CSA parsing Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0713/1815] arm64: dts: allwinner: sun50i-a64-pinephone: Fix mpu6050 mount matrix Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0714/1815] clk: tegra: tegra124-emc: put EMC node on register failure Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0715/1815] clk: mediatek: pllfh: Fix IO remapping leak in register_pllfhs error path Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0716/1815] clk: eswin: Zero-initialize stack-allocated clk_init_data Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0717/1815] clk: palmas: Manage external-control prepare with devm Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0718/1815] clk/x86: pmc_atom: add kasprintf return value check Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0719/1815] clk: mediatek: mt8135: Fix inverted gate control for devapc_ck Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0720/1815] PCI: Make pci_match_one_device() match on ID instead of device Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0721/1815] PCI: Fix dyn_id add TOCTOU Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0722/1815] PCI: Fix UAF when probe runs concurrent to dyn ID removal Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0723/1815] clk: rockchip: Fix the fractional part denominator on RK3588/RK3576 PLLs Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0724/1815] clk: rockchip: Fractional PLL coefficient on RK3588/RK3576 is twos complement Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0725/1815] nilfs2: fix infinite loop in nilfs_clean_segments() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0726/1815] nilfs2: prevent out-of-bounds read in super root block parsing Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0727/1815] nilfs2: fix BUG in nilfs_copy_dirty_pages() on dirty state mismatch Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0728/1815] scsi: smartpqi: Fix AIO retry marker cleared by SCSI core between dispatches Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0729/1815] clk: spacemit: k3: fix missing /2 factor in i2s sysclk dividers Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0730/1815] riscv: dts: spacemit: Make dtschema recognize the etherent PHY correctly on K3 pico-itx board Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0731/1815] riscv: dts: spacemit: Make dtschema recognize the etherent PHY correctly on K3 com260 board Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0732/1815] RDMA/cxgb4: Fix dereg_skb leak and double free in write_tpt_entry() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0733/1815] RDMA/mlx5: Fix stack out-of-bounds read in cc_params debugfs Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0734/1815] RDMA/mlx5: Send cong param changes to the resolved port mdev Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0735/1815] RDMA/cxgb4: free STAG index when TPT entry write fails Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0736/1815] media: staging/ipu7: fix async notifier leak on init error Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0737/1815] IB/isert: reject PDUs declaring more data than was received Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0738/1815] IB/isert: reject login " Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0739/1815] nvmet: fix return status of RMI log page on allocation failure Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0740/1815] nvme-fc: unmap cmd_iu DMA on rsp_iu mapping failure in init_request Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0741/1815] nvme-pci: return error when parsing a quirk string fails Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0742/1815] nvmet: reject out-of-range mdts values in configfs store Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0743/1815] spi: davinci: switch to managed controller allocation Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0744/1815] drm/panthor: Add vm_bind region with kbo range overlap check Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0745/1815] wifi: ath12k: fix overreads in ath12k_wmi_process_csa_switch_count_event() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0746/1815] wifi: ath11k: fix overreads in ath11k_wmi_process_csa_switch_count_event() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0747/1815] wifi: ath12k: validate TLV length in process_tpc_stats() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0748/1815] PCI: starfive: Fix Runtime PM handling and teardown ordering Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0749/1815] PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0750/1815] drm/msm: remove objects from evit list after pinning them Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0751/1815] media: qcom: iris: Fix bitmask test in iris_allow_cmd() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0752/1815] media: qcom: iris: Remove duplicate HFI_PROP_OPB_ENABLE entry Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0753/1815] media: qcom: iris: handle runtime PM resume failure in core deinit Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0754/1815] media: stm32: dcmi: fix some error handling bugs in probe() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0755/1815] s390/vdso: Pass --eh-frame-hdr to the linker Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0756/1815] regulator: tps65185: handle gpiod_get_value_cansleep() error returns Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0757/1815] platform/chrome: cros_ec_debugfs: Clean up console log on probe failure Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0758/1815] platform/chrome: cros_ec_debugfs: Unregister panic notifier Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0759/1815] wifi: rtlwifi: pci: fix error path in rtl_pci_probe() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0760/1815] bus: mhi: host: Flush the posted write after writing to MHI_SOC_RESET_REQ_OFFSET Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0761/1815] bus: mhi: host: Fix controller cleanup on EDL sysfs failure Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0762/1815] md/raid5: protect bitmap batch counters aka seq_flush/seq_write consistency Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0763/1815] md/raid5-ppl: fix use-after-free in ppl_do_flush() Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0764/1815] md/raid5: fix lockless max_nr_stripes reads Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0765/1815] net: airoha: fix ETS QoS stats counter underflow and cross-channel corruption Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0766/1815] md/raid5: protect lockless recovery_offset accesses during reshape Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0767/1815] fanotify: stop permission watchdog when timeout is zero Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0768/1815] tools/nolibc/powerpc: mark ctr and xer as clobbered by system call Greg Kroah-Hartman
2026-09-12  6:41 ` [PATCH 7.2 0769/1815] md: remove REQ_NOWAIT support from raid1/10/456 Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0770/1815] md: recheck spare changes before starting sync Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0771/1815] selftests/zram: fix kernel_gte() for POSIX sh Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0772/1815] Revert "serial: 8250: Clear CON_PRINTBUFFER on port re-registration" Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0773/1815] wifi: ath12k: fix stride mismatch in mac_phy_caps_parse() Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0774/1815] wifi: ath11k: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0775/1815] md/raid1: restrict atomic write limits and handle runtime constraints Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0776/1815] md/raid10: consistently fail atomic writes that require splitting Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0777/1815] PCI: dwc: ep: Clear MSI iATU mapping in dw_pcie_ep_cleanup() Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0778/1815] rcu: Mark accesses to ->rcu_urgent_qs and ->rcu_need_heavy_qs Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0779/1815] arm64: dts: qcom: msm8998: Dont pull-up I2C pins by default in sleep Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0780/1815] arm64: dts: qcom: msm8976-longcheer-l9360: Fix accidental node override Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0781/1815] arm64: dts: qcom: sdm632-motorola-ocean: Fix LED default trigger property Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0782/1815] arm64: dts: qcom: qcs404: Fix DTBS Check errors in usb controller nodes Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0783/1815] clk: qcom: gcc-qcm2290: dont park QUP RCGs upon registration Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0784/1815] soc: qcom: pmic_glink_altmode: Define the TBT extradata properly Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0785/1815] arm64: dts: qcom: glymur-crd: Add FocalTech ft3d81 touchscreen support Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0786/1815] arm64: dts: qcom: sc8280xp-crd: Fix the pin index for misc_3p3_reg_en Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0787/1815] firmware: qcom: scm: add trace events for the SMC call interface Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0788/1815] firmware: qcom: scm: instrument SMC call path with tracepoints Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0789/1815] firmware: qcom: scm: Fix NULL dereference in IRQ handler before __scm is published Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0790/1815] firmware: qcom: scm: Fix reserved memory cleanup on probe failure Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0791/1815] firmware: qcom: scm: Fix tzmem state on probe retry Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0792/1815] block: fix dio leak on metadata mapping error Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0793/1815] arm64: dts: qcom: glymur: Fix PDC IRQ mapping Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0794/1815] arm64: dts: qcom: talos: Fix cpu6 1094.4MHz OPP frequency typo Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0795/1815] arm64: dts: qcom: sm8250-xiaomi-elish: correct the board ID Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0796/1815] arm64: dts: qcom: kaanapali: Fix the PCIe iommu-map entries Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0797/1815] arm64: dts: qcom: kodiak: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0798/1815] arm64: dts: qcom: sar2130p: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0799/1815] arm64: dts: qcom: sc8180x: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0800/1815] arm64: dts: qcom: sdm845: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0801/1815] arm64: dts: qcom: sm8150: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0802/1815] arm64: dts: qcom: sm8250: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0803/1815] arm64: dts: qcom: sm8350: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0804/1815] arm64: dts: qcom: sm8450: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0805/1815] arm64: dts: qcom: sm8550: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0806/1815] arm64: dts: qcom: sm8650: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0807/1815] arm64: dts: qcom: sm8750: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0808/1815] arm64: dts: qcom: talos: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0809/1815] arm64: dts: qcom: lemans: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0810/1815] arm64: dts: qcom: monaco: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0811/1815] arm64: dts: qcom: monaco-monza-som: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0812/1815] arm64: dts: qcom: monaco-evk-ifp-mezzanine: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0813/1815] arm64: dts: qcom: lemans-evk-ifp-mezzanine: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0814/1815] arm64: dts: qcom: qcs6490-radxa-dragon-q6a: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0815/1815] arm64: dts: qcom: qcs6490-thundercomm-minipc-g1iot: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0816/1815] arm64: dts: qcom: qcs6490-rb3gen2: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0817/1815] arm64: dts: qcom: qcs6490-rb3gen2-industrial-mezzanine: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0818/1815] power: supply: isp1704_charger: cancel work on remove Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0819/1815] power: supply: sc2731_charger: " Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0820/1815] bpf: Fix potential UAF in bpf_netns_link_update_prog Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0821/1815] bpf: Fix potential UAF when reading bpf link info Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0822/1815] platform/chrome: lightbar: Limit payload to max packet size Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0823/1815] lib/test_hmm: fail dmirror_fault() when the mirrored mm is gone Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0824/1815] arm64: dts: qcom: eliza: Add fallback compatible for ADSP remoteproc Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0825/1815] clk: qcom: nord: use BRANCH_HALT_SKIP for PHY pipe clocks Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0826/1815] clk: qcom: negcc-nord: use clk_regmap_phy_mux for USB3 pipe clock srcs Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0827/1815] clk: qcom: gcc-nord: mark PCIe link clocks as critical Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0828/1815] clk: qcom: negcc-nord: keep GPU2 CFG clock enabled via critical CBCR Greg Kroah-Hartman
2026-09-12  6:42 ` [PATCH 7.2 0829/1815] clk: qcom: dispcc-qcm2290: Move to the latest common qcom_cc_probe() model Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0830/1815] clk: qcom: dispcc-qcm2290: Enable runtime PM support Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0831/1815] clk: qcom: qcm2290: Set POLL_CFG_GDSCR flag for DISPCC and GPUCC GDSCs Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0832/1815] clk: qcom: qcm2290: Add RETAIN_FF_ENABLE " Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0833/1815] clk: qcom: qcm2290: Update DISPCC and GPUCC GDSC *wait_val values Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0834/1815] clk: qcom: gpucc-qcm2290: Drop pm_clk handling Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0835/1815] clk: qcom: gpucc-qcm2290: Move to the latest common qcom_cc_probe() model Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0836/1815] clk: qcom: gpucc-qcm2290: Keep the critical clocks always-on from probe Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0837/1815] clk: qcom: gpucc-qcm2290: Park RCGs clk source at XO during disable Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0838/1815] clk: qcom: Return expected ENOMEM error on dynamic allocation failure Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0839/1815] md/bitmap: resume array on backlog_store() error path Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0840/1815] md: scope memalloc_noio to allocation critical sections Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0841/1815] iommu/dma: Check atomic pool allocation result directly Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0842/1815] swiotlb: Preserve allocation virtual address for dynamic pools Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0843/1815] i3c: dw: avoid shift-out-of-bounds when DAA assigns no devices Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0844/1815] i3c: master: adi: add OF module alias for autoloading Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0845/1815] fs: annotate inode timestamp accessors Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0846/1815] md/raid1: create serial pool adding rdev to array with serialize_policy=1 Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0847/1815] pinctrl: qcom: shikra: Fix intr_target_width for summary interrupt routing Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0848/1815] locking/lockdep: Fix NULL pointer dereference in __lock_set_class() Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0849/1815] dcache: keep shrink_dcache_for_umount() making progress on busy roots Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0850/1815] iomap: release the folio batch on iomap callback failures Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0851/1815] dma-resv: Fix undefined symbol when CONFIG_DMA_SHARED_BUFFER is disabled Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0852/1815] powerpc: implement get_direction() in cpm2 Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0853/1815] powerpc/44x: Set GPIO chip parent Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0854/1815] powerpc/crash: Fix possible memory leak in update_crash_elfcorehdr() Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0855/1815] misc: vmc_vmci: Fix potential memory leak in vmci_event_subscribe() Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0856/1815] misc: sgi-gru: remove interrupt-context page-table walks Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0857/1815] fanotify: report full event length for FIONREAD Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0858/1815] wifi: mt76: connac: add MT7991A (0x7991) to is_mt7996() Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0859/1815] wifi: mt76: mt76x02: do not WARN on invalid rx descriptor length Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0860/1815] wifi: mt76: fix handling channel context with different bands in mt76_switch_vif_chanctx() Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0861/1815] wifi: mt76: mt792x: stop USB register access after bus hang Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0862/1815] wifi: mt76: mt7921: validate CLC firmware records Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0863/1815] wifi: mt76: mt7915: fix net_fill_forward_path for non-DBDC mt7986 Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0864/1815] wifi: mt76: connac: add NAN connection type Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0865/1815] wifi: mt76: mt7925: add NAN MCU helpers Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0866/1815] wifi: mt76: add init_wiphy callback Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0867/1815] wifi: mt76: mt792x: fix use-after-free in mt76_rx_poll_complete Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0868/1815] wifi: mt76: mt7921: Add PCIe AER handler support to prevent system crash Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0869/1815] wifi: mt76: mt7927: set band index for sniffer mode Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0870/1815] wifi: mt76: mt7925: update clc before setting sar power table Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0871/1815] wifi: mt76: mt7925: fix msg len mismatch between driver and firmware Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0872/1815] wifi: mt76: mt792x: Fix memory leak in SDIO TX path Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0873/1815] wifi: mt76: mt7996: fix EAPOL source BSS for non-MLD stations Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0874/1815] wifi: mt76: mt7996: fix non-MLD station num_sta leak Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0875/1815] wifi: mt76: mt7996: fix capability of EHT-MCS 15 in MRU Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0876/1815] wifi: mt76: fix RX data queuing of RRO 3.0 Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0877/1815] wifi: mt76: mt7996: fix MLD ID in MAC TXD and HIF TXP Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0878/1815] wifi: mt76: fix non-AQL packet accounting for MLO stations Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0879/1815] wifi: mt76: assign link_id when sending probe request during scan Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0880/1815] wifi: mt76: mt7996: validate RX band_idx before dereferencing phys[] Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0881/1815] wifi: mt76: mt7996: set MT76_MCU_RESET before waking MCU waiters on full reset Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0882/1815] wifi: mt76: mt7915: clear wcid mask under mutex after RCU pointer clear Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0883/1815] wifi: mt76: mt7915: avoid nss underflow in mt7915_mcu_get_sta_nss Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0884/1815] wifi: mt76: mt7996: dont report a zero TX bitrate Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0885/1815] wifi: mt76: mt7915: write RX header translation bit to the correct register Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0886/1815] wifi: mt76: fix 4th chain ACK RSSI bitmask in sta_poll Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0887/1815] wifi: mt76: fix stranded frames in mt76_txq_schedule_pending Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0888/1815] wifi: mt76: fix uninitialised RXDMAD_C descriptor info Greg Kroah-Hartman
2026-09-12  6:43 ` [PATCH 7.2 0889/1815] wifi: mt76: fix RXDMAD_C buffer recycling race Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0890/1815] wifi: mt76: mt7915: poll the correct SLP CTRL register for the second adie Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0891/1815] wifi: mt76: check txfree done event on the WED hw path Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0892/1815] wifi: mt76: fix HE DCM max-RU capability encoding Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0893/1815] wifi: mt76: mt7996: bound TLV walk in mt7996_mcu_get_chip_config Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0894/1815] wifi: mt76: fix out-of-bounds access in mmio copy helpers Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0895/1815] wifi: mt76: mt7915: unwind state on add_interface failure Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0896/1815] wifi: mt76: mt7996: hold dev->mt76.mutex while disabling tx worker in SER Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0897/1815] wifi: mt76: decode the full VHT Rx STBC capability field Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0898/1815] wifi: mt76: fix ER-SU 106-tone RU check in RX rate decode Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0899/1815] wifi: mt76: mt7996: reserve space for the CSA-abort countdown TLV Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0900/1815] wifi: mt76: mt7996: dont leak MLD group index on remap alloc failure Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0901/1815] wifi: mt76: cancel reset and rc work on device unregister Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0902/1815] wifi: mt76: report data NSS for STBC frames in RX rate decode Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0903/1815] wifi: mt76: mt7915: use little-endian for bss_info_ra wire fields Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0904/1815] wifi: mt76: mt7996: add missing rdd_idx check when enabling background radar Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0905/1815] wifi: mt76: only consume the WO drop bit on WED v2 devices Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0906/1815] ACPI: processor: Unregister cpufreq notifier on init failure Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0907/1815] drm/msm/dpu: Fix DMA SSPP REC block offsets on DPU v13 Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0908/1815] drm/msm: dont tear down KMS twice when KMS init fails Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0909/1815] drm/msm/dp: reject YUV420-only modes without VSC SDP support Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0910/1815] drm/msm/dp: do not reject wide-bus modes while a YUV420 mode is active Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0911/1815] perf: arm_spe: Make wakeup range check overflow safe Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0912/1815] drm/msm/dpu: Drop sneaky dev_pm_opp_set_rate(0) Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0913/1815] drm/msm/dp: Drop dev_pm_opp_set_rate(0) Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0914/1815] drm/msm/dsi: " Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0915/1815] wifi: ath11k: fix leak in ath11k_service_ready_ext_event() Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0916/1815] ASoC: codecs: tas2783-sdw: Propagate regcache_sync() errors Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0917/1815] ASoC: tas2783-sdw: drop stale regcache on uninitialized re-attach Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0918/1815] ARM: tegra: Fix OF node reference leaks in IRQ init Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0919/1815] arm64: tegra: Fix CMDQV interrupt type on Tegra264 Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0920/1815] regulator: core: use system_freezable_wq for init complete work Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0921/1815] ASoC: SDCA: Add missing stub for sdca_fdl_free_state() Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0922/1815] perf unwind-libdw: Fix unwinding of multi-threaded processes Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0923/1815] perf libdw: Fix outer-frame name resolution and spurious "(inlined)" tag Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0924/1815] perf machine: Fix fd leak on bounds check in maps__set_modules_path_dir() Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0925/1815] perf machine: Fix NULL parent dereference in fork event processing Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0926/1815] perf machine: Guard against NULL strlist in machines__findnew() Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0927/1815] perf machine: Check snprintf truncation " Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0928/1815] perf machine: Dont abort guest map creation on first inaccessible dir Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0929/1815] perf machine: Reset errno before strtol in guest kernel map creation Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0930/1815] perf machine: Free scandir entries " Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0931/1815] perf machine: Check snprintf truncation for guest kallsyms path Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0932/1815] bpf: Reject >8 byte return values on return-reading trampoline paths Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0933/1815] bpf, x86: Fix trampoline stack size for 128-bit arguments Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0934/1815] wifi: mt76: mt7915: unlink TWT flow if the MCU rejects the agreement Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0935/1815] wifi: mt76: mt7996: skip key upload when adding an offchannel link Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0936/1815] wifi: mt76: mt7996: wake MCU waiters before aborting scan in L1 SER Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0937/1815] wifi: mt76: mt7996: free vif links after clearing wcid entries on full reset Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0938/1815] wifi: mt76: mt7996: clear stale link state " Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0939/1815] wifi: mt76: set MT76_SCANNING when starting a hw scan Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0940/1815] wifi: mt76: mt7996: fix MIB TX aggregation counter registers for mt7990 Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0941/1815] wifi: mt76: mt7915: fix double hif2 init on the non-WED path Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0942/1815] wifi: mt76: mt7915: fix ext PHY use-after-free on register error path Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0943/1815] wifi: mt76: mt7915: release hif2 reference on probe IRQ failure Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0944/1815] wifi: mt76: mt7996: fix reg addr remap when addr is 0 Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0945/1815] wifi: mt76: mt7996: do not attach hif2 WED when the main WED attach failed Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0946/1815] wifi: mt76: mt7996: do not leave state behind after a failed WED attach Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0947/1815] wifi: mt76: mt7915: fix chainmask handling for non-dbdc phys on band 1 Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0948/1815] wifi: mt76: mt7915: report RX chain signal for all RX paths Greg Kroah-Hartman
2026-09-12  6:44 ` [PATCH 7.2 0949/1815] wifi: mt76: fix queue assignment for disassoc packets Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0950/1815] wifi: mt76: mt7925: Fix EHT Beamformee SS subfields to meet 802.11be minimum Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0951/1815] wifi: mt76: reject out-of-range link ids in mt76_vif_link() Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0952/1815] wifi: mt76: mt7996: fix out-of-bounds link array access in mt7996_tx() Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0953/1815] wifi: ath12k: fix encrypted EAPOL TX in encap offload mode Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0954/1815] wifi: ath10k: snoc: use memcpy_fromio() for MSA ramdump Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0955/1815] wifi: mt76: mt7996: remove beacon_int_min_gcd from ADHOC interface combinations Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0956/1815] arm64: smp: Fix IPI teardown for GICv5 flow Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0957/1815] arm_mpam: Apply T241-MPAM-6 to 63-bit counters Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0958/1815] arm64/fpsimd: ptrace: Fix inactive SVE and SSVE regsets Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0959/1815] kselftest/arm64: fp-ptrace: Fix checks for " Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0960/1815] arm64: ptrace: Keep orig_x0 in-sync with x0 on syscall entry Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0961/1815] kselftest/arm64: Dont write to P0 in irritator on SME only systems Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0962/1815] iommu/arm-smmu-v3: Convert to use atomic poll timeout Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0963/1815] perf/cxlpmu: Fix 64-bit write to 32-bit HDM filter register Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0964/1815] wifi: mac80211: send TWT teardown to peer after setup TX failure Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0965/1815] wifi: nl80211: clean up color-change beacon data on errors Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0966/1815] wifi: zd1211rw: reject secondary interfaces to prevent conflicts Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0967/1815] wifi: mac80211: skip unused probe response countdown offsets Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0968/1815] perf build: Fix a build error on 32-bit x86 Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0969/1815] wifi: brcmfmac: fix P2P action frame handling without device vif Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0970/1815] wifi: mac80211: disconnect on CSA to channel 0 Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0971/1815] wifi: cfg80211: stop PMSR before P2P and NAN teardown Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0972/1815] bpf: Fix mmap_lock deadlock on arena lock failure Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0973/1815] firmware: coreboot: Validate table bounds Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0974/1815] objtool/klp: Fix module name normalization for paths with dots Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0975/1815] objtool/klp: Normalize Module.symvers paths to module names Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0976/1815] objtool/klp: Fix false module dependencies caused by dead relocs Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0977/1815] objtool/klp: Add .klp.symid for sympos disambiguation Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0978/1815] objtool/klp: Fix symbol resolution for duplicate data symbols Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0979/1815] pinctrl: eswin: Fix Handling of PIN_CONFIG_PERSIST_STATE Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0980/1815] pinctrl: generic: free maps on pinctrl_generic_to_map() failure Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0981/1815] pinctrl: spacemit: validate pins in pinconf callbacks Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0982/1815] powerpc/xive: make xive IPI allocation NULL-safe Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0983/1815] powerpc/xive: add error return value to xive_smp_probe() Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0984/1815] powerpc/xive: propagate IPI init errors to prevent use-after-free Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0985/1815] powerpc/smp: add NULL guard for cause_ipi in smp_muxed_ipi_message_pass Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0986/1815] powerpc/syscall: Fix syscall skip handling for seccomp and ptrace Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0987/1815] powerpc64/bpf: Fix build break in bpf_jit_emit_func_call_rel() Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0988/1815] powerpc64/bpf: Fix build break for arch_bpf_timed_may_goto Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0989/1815] powerpc/irq: Fix missing r2 clobber in PCREL inline assembly Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0990/1815] soc: fsl: qe: properly scan GPIO nodes at startup Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0991/1815] soc: fsl: qe: implement get_direction() Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0992/1815] MIPS: ptrace: Fix syscall skipping via PTRACE_SYSCALL Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0993/1815] serial: amba-pl011: unprepare console clock on unregister Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0994/1815] serial: amba-pl011: keep console clock enabled for atomic writes Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0995/1815] serial: core: do fallible allocations before the console can be registered Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0996/1815] serial: core: clear freed pointers on uart_register_driver() failure Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0997/1815] tty: skip cdev_del() when no cdev is registered Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0998/1815] tty: clear cdev pointer after cdev_add() failure Greg Kroah-Hartman
2026-09-12  6:45 ` [PATCH 7.2 0999/1815] dm-integrity: replace forgeable discard filler with a keyed sector marker Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260912065652.069942258@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=alice.mei.rogers@gmail.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=leo.yan@linux.dev \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=peterz@infradead.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tmricht@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.