KVM: x86: Directly query supported PERF_CAPABILITIES for WRMSR checks
authorSean Christopherson <seanjc@google.com>
Thu, 6 Oct 2022 00:03:14 +0000 (00:03 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 9 Nov 2022 17:31:13 +0000 (12:31 -0500)
Use kvm_caps.supported_perf_cap directly instead of bouncing through
kvm_get_msr_feature() when checking the incoming value for writes to
PERF_CAPABILITIES.

Note, kvm_get_msr_feature() is guaranteed to succeed when getting
PERF_CAPABILITIES, i.e. dropping that check is a nop.

No functional change intended.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20221006000314.73240-9-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/x86.c

index 6f8a370..30a5365 100644 (file)
@@ -3563,20 +3563,15 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
                        return 1;
                vcpu->arch.arch_capabilities = data;
                break;
-       case MSR_IA32_PERF_CAPABILITIES: {
-               struct kvm_msr_entry msr_ent = {.index = msr, .data = 0};
-
+       case MSR_IA32_PERF_CAPABILITIES:
                if (!msr_info->host_initiated)
                        return 1;
-               if (kvm_get_msr_feature(&msr_ent))
-                       return 1;
-               if (data & ~msr_ent.data)
+               if (data & ~kvm_caps.supported_perf_cap)
                        return 1;
 
                vcpu->arch.perf_capabilities = data;
                kvm_pmu_refresh(vcpu);
                return 0;
-       }
        case MSR_EFER:
                return set_efer(vcpu, msr_info);
        case MSR_K7_HWCR: