mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
LoongArch: KVM: Remove KVM_LARCH_LSX and KVM_LARCH_LASX
In kvm_lose_fpu() FPU state is save in vcpu::arch::fpu, its FPU status comes from vcpu->arch.aux_inuse. Instead existing API vm_guest_has_xxx() can be used also, moreover, the bits KVM_LARCH_LSX and KVM_LARCH_LASX in arch.aux_inuse are removed. It makes the logic simpler than ever. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
22e36941b5
commit
848c55a2c9
|
|
@ -158,12 +158,10 @@ enum emulation_result {
|
|||
};
|
||||
|
||||
#define KVM_LARCH_FPU (0x1 << 0)
|
||||
#define KVM_LARCH_LSX (0x1 << 1)
|
||||
#define KVM_LARCH_LASX (0x1 << 2)
|
||||
#define KVM_LARCH_LBT (0x1 << 3)
|
||||
#define KVM_LARCH_PMU (0x1 << 4)
|
||||
#define KVM_LARCH_SWCSR_LATEST (0x1 << 5)
|
||||
#define KVM_LARCH_HWCSR_USABLE (0x1 << 6)
|
||||
#define KVM_LARCH_LBT (0x1 << 1)
|
||||
#define KVM_LARCH_PMU (0x1 << 2)
|
||||
#define KVM_LARCH_SWCSR_LATEST (0x1 << 3)
|
||||
#define KVM_LARCH_HWCSR_USABLE (0x1 << 4)
|
||||
|
||||
#define LOONGARCH_PV_FEAT_UPDATED BIT_ULL(63)
|
||||
#define LOONGARCH_PV_FEAT_MASK (BIT(KVM_FEATURE_IPI) | \
|
||||
|
|
|
|||
|
|
@ -1391,7 +1391,7 @@ int kvm_own_lsx(struct kvm_vcpu *vcpu)
|
|||
set_csr_euen(CSR_EUEN_LSXEN | CSR_EUEN_FPEN);
|
||||
|
||||
kvm_restore_lsx(&vcpu->arch.fpu);
|
||||
vcpu->arch.aux_inuse |= KVM_LARCH_LSX | KVM_LARCH_FPU;
|
||||
vcpu->arch.aux_inuse |= KVM_LARCH_FPU;
|
||||
trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LSX);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1406,7 +1406,7 @@ int kvm_own_lasx(struct kvm_vcpu *vcpu)
|
|||
set_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN);
|
||||
|
||||
kvm_restore_lasx(&vcpu->arch.fpu);
|
||||
vcpu->arch.aux_inuse |= KVM_LARCH_LASX | KVM_LARCH_LSX | KVM_LARCH_FPU;
|
||||
vcpu->arch.aux_inuse |= KVM_LARCH_FPU;
|
||||
trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LASX);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1418,29 +1418,32 @@ void kvm_lose_fpu(struct kvm_vcpu *vcpu)
|
|||
{
|
||||
preempt_disable();
|
||||
|
||||
if (!(vcpu->arch.aux_inuse & KVM_LARCH_FPU))
|
||||
goto done;
|
||||
|
||||
kvm_check_fcsr_alive(vcpu);
|
||||
if (vcpu->arch.aux_inuse & KVM_LARCH_LASX) {
|
||||
if (kvm_guest_has_lasx(&vcpu->arch)) {
|
||||
kvm_save_lasx(&vcpu->arch.fpu);
|
||||
vcpu->arch.aux_inuse &= ~(KVM_LARCH_LSX | KVM_LARCH_FPU | KVM_LARCH_LASX);
|
||||
trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LASX);
|
||||
|
||||
/* Disable LASX & LSX & FPU */
|
||||
clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN);
|
||||
} else if (vcpu->arch.aux_inuse & KVM_LARCH_LSX) {
|
||||
} else if (kvm_guest_has_lsx(&vcpu->arch)) {
|
||||
kvm_save_lsx(&vcpu->arch.fpu);
|
||||
vcpu->arch.aux_inuse &= ~(KVM_LARCH_LSX | KVM_LARCH_FPU);
|
||||
trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LSX);
|
||||
|
||||
/* Disable LSX & FPU */
|
||||
clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN);
|
||||
} else if (vcpu->arch.aux_inuse & KVM_LARCH_FPU) {
|
||||
kvm_save_fpu(&vcpu->arch.fpu);
|
||||
vcpu->arch.aux_inuse &= ~KVM_LARCH_FPU;
|
||||
trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_FPU);
|
||||
|
||||
/* Disable FPU */
|
||||
clear_csr_euen(CSR_EUEN_FPEN);
|
||||
}
|
||||
vcpu->arch.aux_inuse &= ~KVM_LARCH_FPU;
|
||||
|
||||
done:
|
||||
kvm_lose_lbt(vcpu);
|
||||
|
||||
preempt_enable();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user