From: wanghaibin <wanghaibin.wang@huawei.com> If we aren't modeling a GIC, there is no need to save/restore the GICv3 state at all. Note that this only matters for nVHE, as VHE already has this code outside of the world switch. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: wanghaibin <wanghaibin.wang@huawei.com> --- arch/arm64/kvm/hyp/nvhe/switch.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c index ff502b5e1480..68f2f7bf5fc1 100644 --- a/arch/arm64/kvm/hyp/nvhe/switch.c +++ b/arch/arm64/kvm/hyp/nvhe/switch.c @@ -115,7 +115,10 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu) /* Save VGICv3 state on non-VHE systems */ static void __hyp_vgic_save_state(struct kvm_vcpu *vcpu) { - if (static_branch_unlikely(&kvm_vgic_global_state.gicv3_cpuif)) { + struct kvm *kvm = kern_hyp_va(vcpu->kvm); + + if (static_branch_unlikely(&kvm_vgic_global_state.gicv3_cpuif) && + (irqchip_is_gic_v2(kvm) || irqchip_is_gic_v3(kvm))) { __vgic_v3_save_state(&vcpu->arch.vgic_cpu.vgic_v3); __vgic_v3_deactivate_traps(&vcpu->arch.vgic_cpu.vgic_v3); } @@ -124,7 +127,10 @@ static void __hyp_vgic_save_state(struct kvm_vcpu *vcpu) /* Restore VGICv3 state on non-VHE systems */ static void __hyp_vgic_restore_state(struct kvm_vcpu *vcpu) { - if (static_branch_unlikely(&kvm_vgic_global_state.gicv3_cpuif)) { + struct kvm *kvm = kern_hyp_va(vcpu->kvm); + + if (static_branch_unlikely(&kvm_vgic_global_state.gicv3_cpuif) && + (irqchip_is_gic_v2(kvm) || irqchip_is_gic_v3(kvm))) { __vgic_v3_activate_traps(&vcpu->arch.vgic_cpu.vgic_v3); __vgic_v3_restore_state(&vcpu->arch.vgic_cpu.vgic_v3); } -- 2.33.0