[PATCH RESEND v4 4/8] perf arm_spe: Set extended fields in data source
From: Leo Yan <leo.yan@arm.com>
Date: 2026-01-06 12:08:21
Also in:
linux-perf-users, lkml
Subsystem:
performance events subsystem, performance events tooling arm64, the rest · Maintainers:
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Linus Torvalds
Set extended operation type and affiliate info in the data source. Before: perf script -F,dso,sym,data_src sve-test 6516696.714341: 288100144 |OP STORE|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF N/A sve-test 6516696.714341: 288100144 |OP STORE|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF N/A sve-test 6516696.714341: 288100144 |OP STORE|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF N/A sve-test 6516696.714344: 288800142 |OP LOAD|LVL L1 hit|SNP HitM|TLB Walker hit|LCK No|BLK N/A|AFF N/A sve-test 6516696.714344: 288800142 |OP LOAD|LVL L1 hit|SNP HitM|TLB Walker hit|LCK No|BLK N/A|AFF N/A After: perf script -F,dso,sym,data_src sve-test 6516696.714341: 444000288100144 |OP STORE SIMD|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF PRED SG sve-test 6516696.714341: 444000288100144 |OP STORE SIMD|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF PRED SG sve-test 6516696.714341: 444000288100144 |OP STORE SIMD|LVL L1 hit|SNP None|TLB Walker hit|LCK No|BLK N/A|AFF PRED SG sve-test 6516696.714344: 288800142 |OP LOAD|LVL L1 hit|SNP HitM|TLB Walker hit|LCK No|BLK N/A|AFF N/A sve-test 6516696.714344: 288800142 |OP LOAD|LVL L1 hit|SNP HitM|TLB Walker hit|LCK No|BLK N/A|AFF N/A Reviewed-by: James Clark <james.clark@linaro.org> Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Leo Yan <leo.yan@arm.com> --- tools/perf/util/arm-spe.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c
index dc19e72258f30dd6d89dafbb70cc5f7b5c485589..8e9004213e163a46fcacecb4ee32e199a0ec50b2 100644
--- a/tools/perf/util/arm-spe.c
+++ b/tools/perf/util/arm-spe.c@@ -1006,6 +1006,36 @@ arm_spe__synth_data_source(struct arm_spe_queue *speq, else data_src.mem_op = PERF_MEM_OP_NA; + if (record->op & ARM_SPE_OP_MTE_TAG) + data_src.mem_op_ext = PERF_MEM_EXT_OP_MTE_TAG; + else if (record->op & ARM_SPE_OP_NV_SYSREG) + data_src.mem_op_ext = PERF_MEM_EXT_OP_NESTED_VIRT; + else if (record->op & ARM_SPE_OP_MEMCPY) + data_src.mem_op_ext = PERF_MEM_EXT_OP_MEMCPY; + else if (record->op & ARM_SPE_OP_MEMSET) + data_src.mem_op_ext = PERF_MEM_EXT_OP_MEMSET; + else if (record->op & ARM_SPE_OP_GCS) + data_src.mem_op_ext = PERF_MEM_EXT_OP_GCS; + else if (is_simd_op(record->op)) + data_src.mem_op_ext = PERF_MEM_EXT_OP_SIMD; + + if (record->op & ARM_SPE_OP_DP) + data_src.mem_dp = 1; + if (record->op & ARM_SPE_OP_FP) + data_src.mem_fp = 1; + if (record->op & ARM_SPE_OP_PRED) + data_src.mem_pred = 1; + if (record->op & ARM_SPE_OP_ATOMIC) + data_src.mem_atomic = 1; + if (record->op & ARM_SPE_OP_EXCL) + data_src.mem_excl = 1; + if (record->op & ARM_SPE_OP_AR) + data_src.mem_ar = 1; + if (record->op & ARM_SPE_OP_SG) + data_src.mem_sg = 1; + if (record->op & ARM_SPE_OP_COND) + data_src.mem_cond = 1; + arm_spe__synth_ds(speq, record, &data_src); arm_spe__synth_memory_level(speq, record, &data_src);
--
2.34.1