summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBibo Mao <maobibo@loongson.cn>2026-02-06 04:27:46 +0300
committerHuacai Chen <chenhuacai@loongson.cn>2026-02-06 04:27:46 +0300
commit82db90bf461b0cfbb9457a2e721a781c14512e37 (patch)
tree15b97013bcebe49bc9c4d7f3996bc29066f7c57c
parentde0c51370b7dca71825c5e3e4099ebc353a0df1a (diff)
downloadlinux-82db90bf461b0cfbb9457a2e721a781c14512e37.tar.xz
LoongArch: KVM: Move feature detection in 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 features 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@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r--arch/loongarch/kvm/vm.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/arch/loongarch/kvm/vm.c b/arch/loongarch/kvm/vm.c
index 194ccbcdc3b3..d3ff6d6966f8 100644
--- a/arch/loongarch/kvm/vm.c
+++ b/arch/loongarch/kvm/vm.c
@@ -29,6 +29,21 @@ static void kvm_vm_init_features(struct kvm *kvm)
{
unsigned long val;
+ 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);
+
val = read_csr_gcfg();
if (val & CSR_GCFG_GPMP)
kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_PMU);
@@ -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: