• Marc Zyngier's avatar
    KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE · 9a393599
    Marc Zyngier authored
    The per-CPU host context structure contains a __hyp_running_vcpu that
    serves as a replacement for kvm_get_current_vcpu() in contexts where
    we cannot make direct use of it (such as in the nVHE hypervisor).
    Since there is a lot of common code between nVHE and VHE, the latter
    also populates this field even if kvm_get_running_vcpu() always works.
    
    We currently pretty inconsistent when populating __hyp_running_vcpu
    to point to the currently running vcpu:
    
    - on {n,h}VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run
      and clear it on exit.
    
    - on VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run_vhe
      and never clear it, effectively leaving a dangling pointer...
    
    VHE is obviously the odd one here. Although we could make it behave
    just like nVHE, this wouldn't match the behaviour of KVM with VHE,
    where the load phase is where most of the context-switch gets done.
    
    So move all the __hyp_running_vcpu management to the VHE-specific
    load/put phases, giving us a bit more sanity and matching the
    behaviour of kvm_get_running_vcpu().
    Reviewed-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240502154030.3011995-1-maz@kernel.orgSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
    9a393599
switch.c 8.53 KB