summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorBibo Mao <maobibo@loongson.cn>2026-06-11 20:46:39 +0800
committerHuacai Chen <chenhuacai@loongson.cn>2026-06-11 20:46:39 +0800
commitdb5d2b8f5249bad43d607b550365f80bc7cad831 (patch)
tree32a7edd3b9b3d410b7fb6138da1592754c9bfac6 /arch
parent4549871118cf616eecdd2d939f78e3b9e1dddc48 (diff)
LoongArch: KVM: Add separate KVM_REQ_LBT_LOAD bit
There are different structures with FPU and LBT register restore, with FPU the structure is vcpu::arch::fpu, with LBT the structure is vcpu:: arch::lbt. Moreover, FPU/LSX/LASX saving and restoring share the common structure vcpu::arch::fpu. New request bit KVM_REQ_LBT_LOAD is used for LBT register restore, and rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD for FPU register restore. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch')
-rw-r--r--arch/loongarch/include/asm/kvm_host.h3
-rw-r--r--arch/loongarch/kvm/exit.c12
-rw-r--r--arch/loongarch/kvm/vcpu.c8
3 files changed, 11 insertions, 12 deletions
diff --git a/arch/loongarch/include/asm/kvm_host.h b/arch/loongarch/include/asm/kvm_host.h
index 776bc487a705..e76a49d4233b 100644
--- a/arch/loongarch/include/asm/kvm_host.h
+++ b/arch/loongarch/include/asm/kvm_host.h
@@ -38,7 +38,8 @@
#define KVM_REQ_TLB_FLUSH_GPA KVM_ARCH_REQ(0)
#define KVM_REQ_STEAL_UPDATE KVM_ARCH_REQ(1)
#define KVM_REQ_PMU KVM_ARCH_REQ(2)
-#define KVM_REQ_AUX_LOAD KVM_ARCH_REQ(3)
+#define KVM_REQ_FPU_LOAD KVM_ARCH_REQ(3)
+#define KVM_REQ_LBT_LOAD KVM_ARCH_REQ(4)
#define KVM_GUESTDBG_SW_BP_MASK \
(KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)
diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c
index 3b95cd0f989b..b839c989d3dc 100644
--- a/arch/loongarch/kvm/exit.c
+++ b/arch/loongarch/kvm/exit.c
@@ -756,7 +756,7 @@ static int kvm_handle_fpu_disabled(struct kvm_vcpu *vcpu, int ecode)
}
vcpu->arch.aux_ldtype = KVM_LARCH_FPU;
- kvm_make_request(KVM_REQ_AUX_LOAD, vcpu);
+ kvm_make_request(KVM_REQ_FPU_LOAD, vcpu);
return RESUME_GUEST;
}
@@ -798,7 +798,7 @@ static int kvm_handle_lsx_disabled(struct kvm_vcpu *vcpu, int ecode)
kvm_queue_exception(vcpu, EXCCODE_INE, 0);
else {
vcpu->arch.aux_ldtype = KVM_LARCH_LSX;
- kvm_make_request(KVM_REQ_AUX_LOAD, vcpu);
+ kvm_make_request(KVM_REQ_FPU_LOAD, vcpu);
}
return RESUME_GUEST;
@@ -818,7 +818,7 @@ static int kvm_handle_lasx_disabled(struct kvm_vcpu *vcpu, int ecode)
kvm_queue_exception(vcpu, EXCCODE_INE, 0);
else {
vcpu->arch.aux_ldtype = KVM_LARCH_LASX;
- kvm_make_request(KVM_REQ_AUX_LOAD, vcpu);
+ kvm_make_request(KVM_REQ_FPU_LOAD, vcpu);
}
return RESUME_GUEST;
@@ -828,10 +828,8 @@ static int kvm_handle_lbt_disabled(struct kvm_vcpu *vcpu, int ecode)
{
if (!kvm_guest_has_lbt(&vcpu->arch))
kvm_queue_exception(vcpu, EXCCODE_INE, 0);
- else {
- vcpu->arch.aux_ldtype = KVM_LARCH_LBT;
- kvm_make_request(KVM_REQ_AUX_LOAD, vcpu);
- }
+ else
+ kvm_make_request(KVM_REQ_LBT_LOAD, vcpu);
return RESUME_GUEST;
}
diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c
index e28084c49e68..c28aa37f37a9 100644
--- a/arch/loongarch/kvm/vcpu.c
+++ b/arch/loongarch/kvm/vcpu.c
@@ -239,7 +239,7 @@ static void kvm_late_check_requests(struct kvm_vcpu *vcpu)
vcpu->arch.flush_gpa = INVALID_GPA;
}
- if (kvm_check_request(KVM_REQ_AUX_LOAD, vcpu)) {
+ if (kvm_check_request(KVM_REQ_FPU_LOAD, vcpu)) {
switch (vcpu->arch.aux_ldtype) {
case KVM_LARCH_FPU:
kvm_own_fpu(vcpu);
@@ -250,15 +250,15 @@ static void kvm_late_check_requests(struct kvm_vcpu *vcpu)
case KVM_LARCH_LASX:
kvm_own_lasx(vcpu);
break;
- case KVM_LARCH_LBT:
- kvm_own_lbt(vcpu);
- break;
default:
break;
}
vcpu->arch.aux_ldtype = 0;
}
+
+ if (kvm_check_request(KVM_REQ_LBT_LOAD, vcpu))
+ kvm_own_lbt(vcpu);
}
/*