Re: [PATCH 06/11] KVM: arm64: nv: Acceletate EL0 counter accesses from hypervisor context

Marc Zyngier
2024-12-05T11:05:45Z

On Thu, 05 Dec 2024 00:37:34 +0000,
Oliver Upton <oliver.upton@linux.dev> wrote:
>
> typo: accelerate

Huh, thanks!

>
> On Mon, Dec 02, 2024 at 05:21:29PM +0000, Marc Zyngier wrote:

[...]

> > + case SYS_CNTVCT_EL0:
> > + case SYS_CNTVCTSS_EL0:
> > + /* If !ELIsInHost(EL2), the guest's CNTVOFF_EL2 applies */
>
> !ELIsInHost(EL0)

No, and that's the whole point. CNTVOFF_EL2 applies at all times when
HCR_EL2==0 and that we're at EL2. From the pseudocode for CNTVCT_EL0:

<quote>
[...]
elsif PSTATE.EL == EL2 then
if !ELIsInHost(EL2) then
X[t, 64] = PhysicalCountInt() - CNTVOFF_EL2;
else
X[t, 64] = PhysicalCountInt();
[...]
</quote>

Which is why we only check E2H, and not E2H+TGE.

It is CNTPOFF_EL2 that applies when !ELIsInHost(EL0), and this is why
it cannot be reliably emulated as we don't (and cannot) track changes
to HCR_EL2.TGE. Yes, this is nonsense.

M.

--
Without deviation from the norm, progress is not possible.