[PATCH 06/11] KVM: arm64: nv: Acceletate EL0 counter accesses from hypervisor context
Marc Zyngier
maz at kernel.org
Thu Dec 5 03:03:41 PST 2024
On Thu, 05 Dec 2024 00:37:34 +0000,
Oliver Upton <oliver.upton at 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.
More information about the linux-arm-kernel
mailing list