]> www.infradead.org Git - linux.git/commitdiff
KVM: x86: Refactor kvm_get_feature_msr() to avoid struct kvm_msr_entry
authorSean Christopherson <seanjc@google.com>
Fri, 2 Aug 2024 18:19:31 +0000 (11:19 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 22 Aug 2024 19:07:35 +0000 (12:07 -0700)
Refactor kvm_get_feature_msr() to take the components of kvm_msr_entry as
separate parameters, along with a vCPU pointer, i.e. to give it the same
prototype as kvm_{g,s}et_msr_ignored_check().  This will allow using a
common inner helper for handling accesses to "regular" and feature MSRs.

No functional change intended.

Link: https://lore.kernel.org/r/20240802181935.292540-7-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/x86.c

index 3efe086bea4cc5be3f11a7b0c1cc543cd22d2b24..0c2fa6c590a2304371c768e9110bb88a81a71658 100644 (file)
@@ -1659,39 +1659,38 @@ static u64 kvm_get_arch_capabilities(void)
        return data;
 }
 
-static int kvm_get_feature_msr(struct kvm_msr_entry *msr)
+static int kvm_get_feature_msr(struct kvm_vcpu *vcpu, u32 index, u64 *data,
+                              bool host_initiated)
 {
-       switch (msr->index) {
+       WARN_ON_ONCE(!host_initiated);
+
+       switch (index) {
        case MSR_IA32_ARCH_CAPABILITIES:
-               msr->data = kvm_get_arch_capabilities();
+               *data = kvm_get_arch_capabilities();
                break;
        case MSR_IA32_PERF_CAPABILITIES:
-               msr->data = kvm_caps.supported_perf_cap;
+               *data = kvm_caps.supported_perf_cap;
                break;
        case MSR_IA32_UCODE_REV:
-               rdmsrl_safe(msr->index, &msr->data);
+               rdmsrl_safe(index, data);
                break;
        default:
-               return kvm_x86_call(get_feature_msr)(msr->index, &msr->data);
+               return kvm_x86_call(get_feature_msr)(index, data);
        }
        return 0;
 }
 
 static int do_get_feature_msr(struct kvm_vcpu *vcpu, unsigned index, u64 *data)
 {
-       struct kvm_msr_entry msr;
        int r;
 
        /* Unconditionally clear the output for simplicity */
-       msr.data = 0;
-       msr.index = index;
-       r = kvm_get_feature_msr(&msr);
+       *data = 0;
+       r = kvm_get_feature_msr(vcpu, index, data, true);
 
        if (r == KVM_MSR_RET_UNSUPPORTED && kvm_msr_ignored_check(index, 0, false))
                r = 0;
 
-       *data = msr.data;
-
        return r;
 }
 
@@ -7378,11 +7377,9 @@ out:
 
 static void kvm_probe_feature_msr(u32 msr_index)
 {
-       struct kvm_msr_entry msr = {
-               .index = msr_index,
-       };
+       u64 data;
 
-       if (kvm_get_feature_msr(&msr))
+       if (kvm_get_feature_msr(NULL, msr_index, &data, true))
                return;
 
        msr_based_features[num_msr_based_features++] = msr_index;