mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
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>
This commit is contained in:
@@ -29,6 +29,21 @@ static void kvm_vm_init_features(struct kvm *kvm)
|
|||||||
{
|
{
|
||||||
unsigned long val;
|
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();
|
val = read_csr_gcfg();
|
||||||
if (val & CSR_GCFG_GPMP)
|
if (val & CSR_GCFG_GPMP)
|
||||||
kvm->arch.kvm_features |= BIT(KVM_LOONGARCH_VM_FEAT_PMU);
|
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) {
|
switch (attr->attr) {
|
||||||
case KVM_LOONGARCH_VM_FEAT_LSX:
|
case KVM_LOONGARCH_VM_FEAT_LSX:
|
||||||
if (cpu_has_lsx)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_LASX:
|
case KVM_LOONGARCH_VM_FEAT_LASX:
|
||||||
if (cpu_has_lasx)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_X86BT:
|
case KVM_LOONGARCH_VM_FEAT_X86BT:
|
||||||
if (cpu_has_lbt_x86)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_ARMBT:
|
case KVM_LOONGARCH_VM_FEAT_ARMBT:
|
||||||
if (cpu_has_lbt_arm)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_MIPSBT:
|
case KVM_LOONGARCH_VM_FEAT_MIPSBT:
|
||||||
if (cpu_has_lbt_mips)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_PTW:
|
case KVM_LOONGARCH_VM_FEAT_PTW:
|
||||||
if (cpu_has_ptw)
|
|
||||||
return 0;
|
|
||||||
return -ENXIO;
|
|
||||||
case KVM_LOONGARCH_VM_FEAT_MSGINT:
|
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_PMU:
|
||||||
case KVM_LOONGARCH_VM_FEAT_PV_IPI:
|
case KVM_LOONGARCH_VM_FEAT_PV_IPI:
|
||||||
case KVM_LOONGARCH_VM_FEAT_PV_STEALTIME:
|
case KVM_LOONGARCH_VM_FEAT_PV_STEALTIME:
|
||||||
|
|||||||
Reference in New Issue
Block a user