mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
perf arm_spe: Turn event name mappings into an array
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>
This commit is contained in:
parent
8cf4d17ec7
commit
96b4910c3c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user