Commit 82db90bf authored by Bibo Mao's avatar Bibo Mao Committed by Huacai Chen
Browse files

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: default avatarBibo Mao <maobibo@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent de0c5137
Loading
Loading
Loading
Loading
+15 −21
Original line number Diff line number Diff line
@@ -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: