]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
LoongArch: KVM: Remove some middle FPU states
authorBibo Mao <maobibo@loongson.cn>
Thu, 11 Jun 2026 12:46:40 +0000 (20:46 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Thu, 11 Jun 2026 12:46:40 +0000 (20:46 +0800)
With max VM supported FPU type enabled, if VM supports LASX, there is
only NONE --> LASX, no middle FPU state such as NONE --> FPU --> LASX
or NONE --> FPU --> LSX --> LASX. Here remove the middle FPU states in
function kvm_own_lsx() and kvm_own_lasx(). And it becomes simpler than
before.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kvm/vcpu.c

index c65518b4e18eefd189907c80ec439ec722ed428d..e875efb26cb9ca6b4ffb165a87e0495db285d4ea 100644 (file)
@@ -1389,24 +1389,10 @@ int kvm_own_lsx(struct kvm_vcpu *vcpu)
        /* Enable LSX for guest */
        kvm_check_fcsr(vcpu, vcpu->arch.fpu.fcsr);
        set_csr_euen(CSR_EUEN_LSXEN | CSR_EUEN_FPEN);
-       switch (vcpu->arch.aux_inuse & KVM_LARCH_FPU) {
-       case KVM_LARCH_FPU:
-               /*
-                * Guest FPU state already loaded,
-                * only restore upper LSX state
-                */
-               _restore_lsx_upper(&vcpu->arch.fpu);
-               break;
-       default:
-               /* Neither FP or LSX already active,
-                * restore full LSX state
-                */
-               kvm_restore_lsx(&vcpu->arch.fpu);
-               break;
-       }
 
-       trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LSX);
+       kvm_restore_lsx(&vcpu->arch.fpu);
        vcpu->arch.aux_inuse |= KVM_LARCH_LSX | KVM_LARCH_FPU;
+       trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LSX);
 
        return 0;
 }
@@ -1418,25 +1404,10 @@ int kvm_own_lasx(struct kvm_vcpu *vcpu)
 {
        kvm_check_fcsr(vcpu, vcpu->arch.fpu.fcsr);
        set_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN);
-       switch (vcpu->arch.aux_inuse & (KVM_LARCH_FPU | KVM_LARCH_LSX)) {
-       case KVM_LARCH_LSX:
-       case KVM_LARCH_LSX | KVM_LARCH_FPU:
-               /* Guest LSX state already loaded, only restore upper LASX state */
-               _restore_lasx_upper(&vcpu->arch.fpu);
-               break;
-       case KVM_LARCH_FPU:
-               /* Guest FP state already loaded, only restore upper LSX & LASX state */
-               _restore_lsx_upper(&vcpu->arch.fpu);
-               _restore_lasx_upper(&vcpu->arch.fpu);
-               break;
-       default:
-               /* Neither FP or LSX already active, restore full LASX state */
-               kvm_restore_lasx(&vcpu->arch.fpu);
-               break;
-       }
 
-       trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LASX);
+       kvm_restore_lasx(&vcpu->arch.fpu);
        vcpu->arch.aux_inuse |= KVM_LARCH_LASX | KVM_LARCH_LSX | KVM_LARCH_FPU;
+       trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LASX);
 
        return 0;
 }