|
94 | 94 |
|
95 | 95 | struct kvm_caps kvm_caps __read_mostly = {
|
96 | 96 | .supported_mce_cap = MCG_CTL_P | MCG_SER_P,
|
| 97 | + .supported_vm_types = BIT(KVM_X86_DEFAULT_VM), |
97 | 98 | };
|
98 | 99 | EXPORT_SYMBOL_GPL(kvm_caps);
|
99 | 100 |
|
@@ -4629,9 +4630,7 @@ static int kvm_ioctl_get_supported_hv_cpuid(struct kvm_vcpu *vcpu,
|
4629 | 4630 |
|
4630 | 4631 | static bool kvm_is_vm_type_supported(unsigned long type)
|
4631 | 4632 | {
|
4632 |
| - return type == KVM_X86_DEFAULT_VM || |
4633 |
| - (type == KVM_X86_SW_PROTECTED_VM && |
4634 |
| - IS_ENABLED(CONFIG_KVM_SW_PROTECTED_VM) && tdp_mmu_enabled); |
| 4633 | + return type < 32 && (kvm_caps.supported_vm_types & BIT(type)); |
4635 | 4634 | }
|
4636 | 4635 |
|
4637 | 4636 | int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
@@ -4832,9 +4831,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
4832 | 4831 | r = kvm_caps.has_notify_vmexit;
|
4833 | 4832 | break;
|
4834 | 4833 | case KVM_CAP_VM_TYPES:
|
4835 |
| - r = BIT(KVM_X86_DEFAULT_VM); |
4836 |
| - if (kvm_is_vm_type_supported(KVM_X86_SW_PROTECTED_VM)) |
4837 |
| - r |= BIT(KVM_X86_SW_PROTECTED_VM); |
| 4834 | + r = kvm_caps.supported_vm_types; |
4838 | 4835 | break;
|
4839 | 4836 | default:
|
4840 | 4837 | break;
|
@@ -9824,6 +9821,9 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
|
9824 | 9821 |
|
9825 | 9822 | kvm_register_perf_callbacks(ops->handle_intel_pt_intr);
|
9826 | 9823 |
|
| 9824 | + if (IS_ENABLED(CONFIG_KVM_SW_PROTECTED_VM) && tdp_mmu_enabled) |
| 9825 | + kvm_caps.supported_vm_types |= BIT(KVM_X86_SW_PROTECTED_VM); |
| 9826 | + |
9827 | 9827 | if (!kvm_cpu_cap_has(X86_FEATURE_XSAVES))
|
9828 | 9828 | kvm_caps.supported_xss = 0;
|
9829 | 9829 |
|
|
0 commit comments