mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
LoongArch: KVM: Remove some middle FPU states
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>
This commit is contained in:
parent
f1d9dda01a
commit
22e36941b5
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user