Re: [PATCH 4/5] perf arm-spe: Implement find_snapshot callback

From: German Gomez
Date: Thu Sep 30 2021 - 08:26:24 EST


Hi Leo,

On 23/09/2021 15:40, Leo Yan wrote:
On Thu, Sep 23, 2021 at 09:50:16PM +0800, Leo Yan wrote:

[...]

@@ -336,6 +480,7 @@ struct auxtrace_record *arm_spe_recording_init(int *err,
sper->itr.pmu = arm_spe_pmu;
sper->itr.snapshot_start = arm_spe_snapshot_start;
sper->itr.snapshot_finish = arm_spe_snapshot_finish;
+ sper->itr.find_snapshot = arm_spe_find_snapshot;
If I understand correctly, this patch copies the code from cs-etm for
snapshot handling. About 2 months ago, we removed the Arm cs-etm's
specific snapshot callback function and directly use perf's function
__auxtrace_mmap__read() to handle 'head' and 'tail' pointers. Please
see the commit for details:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f01c200d4405c4562e45e8bb4de44a5ce37b217

Before I review more details for snapshot enabling in patches 03 and
04, could you confirm if Arm SPE can use the same way with cs-etm for
snapshot handling? From my understanding, this is a better way to
handle AUX buffer's 'head' and 'tail'.
In other words, if we can only apply patch 03 and can pass the testing
in patch 05, then it would be a very neat implementation.

I will try to verify these patches and will get back result.

Thanks,
Leo
The patch is indeed based on that commit. The reason behind it is that the
values for *head are being wrapped in the driver side (see the macro
PERF_IDX2OFF which is used at various points in /drivers/perf/arm_spe_pmu.c).

If this callback is not to be added, I believe the driver needs to be updated
first so that the head pointer monotonically increases like in cs-etm. Do you
think this makes sense for SPE?

(note that the patch will skip the wrap-around detection if this is the case,
in order to handle both cases in the userspace perf tool).

Thanks,
German