]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf arm-spe: Extract evsel setting up
authorLeo Yan <leo.yan@arm.com>
Thu, 25 Jul 2024 06:46:19 +0000 (07:46 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 1 Aug 2024 15:11:32 +0000 (12:11 -0300)
The evsel for Arm SPE PMU needs to be set up. Extract the setting up
into a function arm_spe_setup_evsel().

Signed-off-by: Leo Yan <leo.yan@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: <coresight@lists.linaro.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: <linux-perf-users@vger.kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/arch/arm64/util/arm-spe.c

index 0b52e67edb3b4778037f3dcc12f23c35b3a984fc..fe7942824113c63b7fe07d453c6140b01a1f4830 100644 (file)
@@ -132,6 +132,45 @@ static __u64 arm_spe_pmu__sample_period(const struct perf_pmu *arm_spe_pmu)
        return sample_period;
 }
 
+static void arm_spe_setup_evsel(struct evsel *evsel, struct perf_cpu_map *cpus)
+{
+       u64 bit;
+
+       evsel->core.attr.freq = 0;
+       evsel->core.attr.sample_period = arm_spe_pmu__sample_period(evsel->pmu);
+       evsel->needs_auxtrace_mmap = true;
+
+       /*
+        * To obtain the auxtrace buffer file descriptor, the auxtrace event
+        * must come first.
+        */
+       evlist__to_front(evsel->evlist, evsel);
+
+       /*
+        * In the case of per-cpu mmaps, sample CPU for AUX event;
+        * also enable the timestamp tracing for samples correlation.
+        */
+       if (!perf_cpu_map__is_any_cpu_or_is_empty(cpus)) {
+               evsel__set_sample_bit(evsel, CPU);
+               evsel__set_config_if_unset(evsel->pmu, evsel, "ts_enable", 1);
+       }
+
+       /*
+        * Set this only so that perf report knows that SPE generates memory info. It has no effect
+        * on the opening of the event or the SPE data produced.
+        */
+       evsel__set_sample_bit(evsel, DATA_SRC);
+
+       /*
+        * The PHYS_ADDR flag does not affect the driver behaviour, it is used to
+        * inform that the resulting output's SPE samples contain physical addresses
+        * where applicable.
+        */
+       bit = perf_pmu__format_bits(evsel->pmu, "pa_enable");
+       if (evsel->core.attr.config & bit)
+               evsel__set_sample_bit(evsel, PHYS_ADDR);
+}
+
 static int arm_spe_recording_options(struct auxtrace_record *itr,
                                     struct evlist *evlist,
                                     struct record_opts *opts)
@@ -144,7 +183,6 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
        bool privileged = perf_event_paranoid_check(-1);
        struct evsel *tracking_evsel;
        int err;
-       u64 bit;
 
        sper->evlist = evlist;
 
@@ -154,9 +192,6 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
                                pr_err("There may be only one " ARM_SPE_PMU_NAME "x event\n");
                                return -EINVAL;
                        }
-                       evsel->core.attr.freq = 0;
-                       evsel->core.attr.sample_period = arm_spe_pmu__sample_period(arm_spe_pmu);
-                       evsel->needs_auxtrace_mmap = true;
                        arm_spe_evsel = evsel;
                        opts->full_auxtrace = true;
                }
@@ -222,36 +257,7 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
                pr_debug2("%sx snapshot size: %zu\n", ARM_SPE_PMU_NAME,
                          opts->auxtrace_snapshot_size);
 
-       /*
-        * To obtain the auxtrace buffer file descriptor, the auxtrace event
-        * must come first.
-        */
-       evlist__to_front(evlist, arm_spe_evsel);
-
-       /*
-        * In the case of per-cpu mmaps, sample CPU for AUX event;
-        * also enable the timestamp tracing for samples correlation.
-        */
-       if (!perf_cpu_map__is_any_cpu_or_is_empty(cpus)) {
-               evsel__set_sample_bit(arm_spe_evsel, CPU);
-               evsel__set_config_if_unset(arm_spe_pmu, arm_spe_evsel,
-                                          "ts_enable", 1);
-       }
-
-       /*
-        * Set this only so that perf report knows that SPE generates memory info. It has no effect
-        * on the opening of the event or the SPE data produced.
-        */
-       evsel__set_sample_bit(arm_spe_evsel, DATA_SRC);
-
-       /*
-        * The PHYS_ADDR flag does not affect the driver behaviour, it is used to
-        * inform that the resulting output's SPE samples contain physical addresses
-        * where applicable.
-        */
-       bit = perf_pmu__format_bits(arm_spe_pmu, "pa_enable");
-       if (arm_spe_evsel->core.attr.config & bit)
-               evsel__set_sample_bit(arm_spe_evsel, PHYS_ADDR);
+       arm_spe_setup_evsel(arm_spe_evsel, cpus);
 
        /* Add dummy event to keep tracking */
        err = parse_event(evlist, "dummy:u");