KVM: arm64: Only reset vCPU-scoped feature ID regs once
authorOliver Upton <oliver.upton@linux.dev>
Thu, 2 May 2024 23:35:25 +0000 (23:35 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 9 May 2024 17:39:45 +0000 (18:39 +0100)
commite016333745c70c960e02b4a9b123c807669d2b22
treedd3aadccb253022b9c4016c05cb43730ff7b11ad
parent44cbe80b7616702b0a7443853feff2459a599b33
KVM: arm64: Only reset vCPU-scoped feature ID regs once

The general expecation with feature ID registers is that they're 'reset'
exactly once by KVM for the lifetime of a vCPU/VM, such that any
userspace changes to the CPU features / identity are honored after a
vCPU gets reset (e.g. PSCI_ON).

KVM handles what it calls VM-scoped feature ID registers correctly, but
feature ID registers local to a vCPU (CLIDR_EL1, MPIDR_EL1) get wiped
after every reset. What's especially concerning is that a
potentially-changing MPIDR_EL1 breaks MPIDR compression for indexing
mpidr_data, as the mask of useful bits to build the index could change.

This is absolutely no good. Avoid resetting vCPU feature ID registers
more than once.

Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20240502233529.1958459-4-oliver.upton@linux.dev
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/arm.c
arch/arm64/kvm/sys_regs.c