]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf arm_spe: Turn event name mappings into an array
authorJames Clark <james.clark@linaro.org>
Tue, 14 Apr 2026 12:48:02 +0000 (13:48 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 6 May 2026 01:03:27 +0000 (22:03 -0300)
This is so we can have a single function that prints events and can be
used with multiple mappings from different CPUs. Remove any bit that was
printed so that later we can print out the remaining unknown impdef
bits.

No functional changes intended.

Reviewed-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: James Clark <james.clark@linaro.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c

index 718022aecec30bf30a51ba3d2bca9cf6465259a7..67ca356100e53aaf6d47489717537ba27aa2b98e 100644 (file)
@@ -277,6 +277,48 @@ static int arm_spe_pkt_out_string(int *err, char **buf_p, size_t *blen,
        return ret;
 }
 
+struct ev_string {
+       u8 event;
+       const char *desc;
+};
+
+static const struct ev_string common_ev_strings[] = {
+       { .event = EV_EXCEPTION_GEN, .desc = "EXCEPTION-GEN" },
+       { .event = EV_RETIRED, .desc = "RETIRED" },
+       { .event = EV_L1D_ACCESS, .desc = "L1D-ACCESS" },
+       { .event = EV_L1D_REFILL, .desc = "L1D-REFILL" },
+       { .event = EV_TLB_ACCESS, .desc = "TLB-ACCESS" },
+       { .event = EV_TLB_WALK, .desc = "TLB-REFILL" },
+       { .event = EV_NOT_TAKEN, .desc = "NOT-TAKEN" },
+       { .event = EV_MISPRED, .desc = "MISPRED" },
+       { .event = EV_LLC_ACCESS, .desc = "LLC-ACCESS" },
+       { .event = EV_LLC_MISS, .desc = "LLC-REFILL" },
+       { .event = EV_REMOTE_ACCESS, .desc = "REMOTE-ACCESS" },
+       { .event = EV_ALIGNMENT, .desc = "ALIGNMENT" },
+       { .event = EV_TRANSACTIONAL, .desc = "TXN" },
+       { .event = EV_PARTIAL_PREDICATE, .desc = "SVE-PARTIAL-PRED" },
+       { .event = EV_EMPTY_PREDICATE, .desc = "SVE-EMPTY-PRED" },
+       { .event = EV_L2D_ACCESS, .desc = "L2D-ACCESS" },
+       { .event = EV_L2D_MISS, .desc = "L2D-MISS" },
+       { .event = EV_CACHE_DATA_MODIFIED, .desc = "HITM" },
+       { .event = EV_RECENTLY_FETCHED, .desc = "LFB" },
+       { .event = EV_DATA_SNOOPED, .desc = "SNOOPED" },
+       { .event = EV_STREAMING_SVE_MODE, .desc = "STREAMING-SVE" },
+       { .event = EV_SMCU, .desc = "SMCU" },
+       { .event = 0, .desc = NULL },
+};
+
+static u64 print_event_list(int *err, char **buf, size_t *buf_len,
+                           const struct ev_string *ev_strings, u64 payload)
+{
+       for (const struct ev_string *ev = ev_strings; ev->desc != NULL; ev++) {
+               if (payload & BIT_ULL(ev->event))
+                       arm_spe_pkt_out_string(err, buf, buf_len, " %s", ev->desc);
+               payload &= ~BIT_ULL(ev->event);
+       }
+       return payload;
+}
+
 static int arm_spe_pkt_desc_event(const struct arm_spe_pkt *packet,
                                  char *buf, size_t buf_len)
 {
@@ -284,51 +326,7 @@ static int arm_spe_pkt_desc_event(const struct arm_spe_pkt *packet,
        int err = 0;
 
        arm_spe_pkt_out_string(&err, &buf, &buf_len, "EV");
-
-       if (payload & BIT(EV_EXCEPTION_GEN))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " EXCEPTION-GEN");
-       if (payload & BIT(EV_RETIRED))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " RETIRED");
-       if (payload & BIT(EV_L1D_ACCESS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " L1D-ACCESS");
-       if (payload & BIT(EV_L1D_REFILL))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " L1D-REFILL");
-       if (payload & BIT(EV_TLB_ACCESS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " TLB-ACCESS");
-       if (payload & BIT(EV_TLB_WALK))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " TLB-REFILL");
-       if (payload & BIT(EV_NOT_TAKEN))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " NOT-TAKEN");
-       if (payload & BIT(EV_MISPRED))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " MISPRED");
-       if (payload & BIT(EV_LLC_ACCESS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " LLC-ACCESS");
-       if (payload & BIT(EV_LLC_MISS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " LLC-REFILL");
-       if (payload & BIT(EV_REMOTE_ACCESS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " REMOTE-ACCESS");
-       if (payload & BIT(EV_ALIGNMENT))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " ALIGNMENT");
-       if (payload & BIT(EV_TRANSACTIONAL))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " TXN");
-       if (payload & BIT(EV_PARTIAL_PREDICATE))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " SVE-PARTIAL-PRED");
-       if (payload & BIT(EV_EMPTY_PREDICATE))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " SVE-EMPTY-PRED");
-       if (payload & BIT(EV_L2D_ACCESS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " L2D-ACCESS");
-       if (payload & BIT(EV_L2D_MISS))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " L2D-MISS");
-       if (payload & BIT(EV_CACHE_DATA_MODIFIED))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " HITM");
-       if (payload & BIT(EV_RECENTLY_FETCHED))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " LFB");
-       if (payload & BIT(EV_DATA_SNOOPED))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " SNOOPED");
-       if (payload & BIT(EV_STREAMING_SVE_MODE))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " STREAMING-SVE");
-       if (payload & BIT(EV_SMCU))
-               arm_spe_pkt_out_string(&err, &buf, &buf_len, " SMCU");
+       print_event_list(&err, &buf, &buf_len, common_ev_strings, payload);
 
        return err;
 }