[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20260128030326.3377462-2-maobibo@loongson.cn>
Date: Wed, 28 Jan 2026 11:03:23 +0800
From: Bibo Mao <maobibo@...ngson.cn>
To: Huacai Chen <chenhuacai@...nel.org>,
WANG Xuerui <kernel@...0n.name>,
Tianrui Zhao <zhaotianrui@...ngson.cn>
Cc: loongarch@...ts.linux.dev,
linux-kernel@...r.kernel.org,
kvm@...r.kernel.org
Subject: [PATCH 1/4] LoongArch: KVM: Move feature detection in function kvm_vm_init_features
VM feature detection is sparsed in function kvm_vm_init_features()
and kvm_vm_feature_has_attr(). Here move all the feature detection
in function kvm_vm_init_features(), and there is only feature checking
in function kvm_vm_feature_has_attr().
Signed-off-by: Bibo Mao <maobibo@...ngson.cn>
---
arch/loongarch/kvm/vm.c | 36 +++++++++++++++---------------------
1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/arch/loongarch/kvm/vm.c b/arch/loongarch/kvm/vm.c
index 194ccbcdc3b3..ae79c50db9e1 100644
--- a/arch/loongarch/kvm/vm.c
+++ b/arch/loongarch/kvm/vm.c
@@ -40,6 +40,21 @@ static void kvm_vm_init_features(struct kvm *kvm)
kvm->arch.pv_features |= BIT(KVM_FEATURE_STEAL_TIME);
kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_PV_STEALTIME);
}
+
+ if (cpu_has_lsx)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_LSX);
+ if (cpu_has_lasx)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_LASX);
+ if (cpu_has_lbt_x86)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_X86BT);
+ if (cpu_has_lbt_arm)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_ARMBT);
+ if (cpu_has_lbt_mips)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_MIPSBT);
+ if (cpu_has_ptw)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_PTW);
+ if (cpu_has_msgint)
+ kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_MSGINT);
}
int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
@@ -131,33 +146,12 @@ static int kvm_vm_feature_has_attr(struct kvm *kvm, struct kvm_device_attr *attr
{
switch (attr->attr) {
case KVM_LOONGARCH_VM_FEAT_LSX:
- if (cpu_has_lsx)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_LASX:
- if (cpu_has_lasx)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_X86BT:
- if (cpu_has_lbt_x86)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_ARMBT:
- if (cpu_has_lbt_arm)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_MIPSBT:
- if (cpu_has_lbt_mips)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_PTW:
- if (cpu_has_ptw)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_MSGINT:
- if (cpu_has_msgint)
- return 0;
- return -ENXIO;
case KVM_LOONGARCH_VM_FEAT_PMU:
case KVM_LOONGARCH_VM_FEAT_PV_IPI:
case KVM_LOONGARCH_VM_FEAT_PV_STEALTIME:
--
2.39.3
Powered by blists - more mailing lists