/* 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;
}
{
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;
}