[PATCH] arm64: Implement prctl(PR_{G,S}ET_TSC)

Peter Collingbourne pcc at google.com
Sun Apr 28 11:47:56 PDT 2024


On Sun, Apr 28, 2024 at 3:37 AM Marc Zyngier <maz at kernel.org> wrote:
>
> On Sat, 27 Apr 2024 06:27:51 +0100,
> Peter Collingbourne <pcc at google.com> wrote:
> >
> > On arm64, this prctl controls access to CNTVCT_EL0, CNTVCTSS_EL0 and
> > CNTFRQ_EL0 via CNTKCTL_EL1.EL0VCTEN. Since this bit is also used to
> > implement various erratum workarounds, check whether the CPU needs
> > a workaround whenever we potentially need to change it.
>
> Why would we ever consider preventing access to CNTVTL_EL0?  This
> register is part of the arm64 ABI, together with CNTFRQ_EL0.
> Disabling it also prevents the VDSO from working correctly, making
> something as simple as getttimeofday() unexpectedly fail.
>
> I'm sure you have some rationale behind it, but it is nowhere to be
> found above, and I cannot see why we'd want to mimic whatever x86
> does.

Hi Marc,

This is needed for a correct implementation of non-instrumenting
record-replay debugging on arm64 (i.e. rr; https://rr-project.org/).
rr must trap and record any sources of non-determinism from the
userspace program's perspective so it can be replayed later. This
includes the results of syscalls as well as the results of access to
architected timers exposed directly to the program. rr traps RDTSC on
x86 for the same reason.

I'd be happy to add that to the commit message for v2.

Peter



More information about the linux-arm-kernel mailing list