• Oliver Upton's avatar
    KVM: arm64: nv: Keep reference on stage-2 MMU when scheduled out · 6ded46b5
    Oliver Upton authored
    If a vCPU is scheduling out and not in WFI emulation, it is highly
    likely it will get scheduled again soon and reuse the MMU it had before.
    Dropping the MMU at vcpu_put() can have some unfortunate consequences,
    as the MMU could get reclaimed and used in a different context, forcing
    another 'cold start' on an otherwise active MMU.
    
    Avoid that altogether by keeping a reference on the MMU if the vCPU is
    scheduling out, ensuring that another vCPU cannot reclaim it while the
    current vCPU is away. Since there are more MMUs than vCPUs, this does
    not affect the guarantee that an unused MMU is available at any time.
    
    Furthermore, this makes the vcpu->arch.hw_mmu ~stable in preemptible
    code, at least for where it matters in the stage-2 abort path. Yes, the
    MMU can change across WFI emulation, but there isn't even a use case
    where this would matter.
    Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20241007233028.2236133-2-oliver.upton@linux.devSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
    6ded46b5
nested.c 33.3 KB