]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf arm-spe: Set sample flags with supplement info
authorLeo Yan <leo.yan@arm.com>
Tue, 4 Mar 2025 11:12:38 +0000 (11:12 +0000)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 5 Mar 2025 17:13:20 +0000 (09:13 -0800)
Based on the supplement information in the record, this commit sets the
sample flags for conditional branch, function call, return.  It also
sets events in flags, such as mispredict, not taken, and in transaction.

Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Link: https://lore.kernel.org/r/20250304111240.3378214-11-leo.yan@arm.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/arm-spe.c

index 0e8e05c87fd7df69f0fad307629d6be2554f2ad5..daecf9e1017a9e87488869db528d8c4bf43b20bd 100644 (file)
@@ -484,6 +484,26 @@ static void arm_spe__sample_flags(struct arm_spe_queue *speq)
 
                if (record->type & ARM_SPE_BRANCH_MISS)
                        speq->flags |= PERF_IP_FLAG_BRANCH_MISS;
+
+               if (record->type & ARM_SPE_BRANCH_NOT_TAKEN)
+                       speq->flags |= PERF_IP_FLAG_NOT_TAKEN;
+
+               if (record->type & ARM_SPE_IN_TXN)
+                       speq->flags |= PERF_IP_FLAG_IN_TX;
+
+               if (record->op & ARM_SPE_OP_BR_COND)
+                       speq->flags |= PERF_IP_FLAG_CONDITIONAL;
+
+               if (record->op & ARM_SPE_OP_BR_CR_BL)
+                       speq->flags |= PERF_IP_FLAG_CALL;
+               else if (record->op & ARM_SPE_OP_BR_CR_RET)
+                       speq->flags |= PERF_IP_FLAG_RETURN;
+               /*
+                * Indirect branch instruction without link (e.g. BR),
+                * take it as a function return.
+                */
+               else if (record->op & ARM_SPE_OP_BR_INDIRECT)
+                       speq->flags |= PERF_IP_FLAG_RETURN;
        }
 }