Commit 7075f163 authored by Sean Christopherson's avatar Sean Christopherson

KVM: x86: Refactor kvm_get_feature_msr() to avoid struct kvm_msr_entry

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.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
parent b848f24b
...@@ -1659,39 +1659,38 @@ static u64 kvm_get_arch_capabilities(void) ...@@ -1659,39 +1659,38 @@ static u64 kvm_get_arch_capabilities(void)
return data; 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: case MSR_IA32_ARCH_CAPABILITIES:
msr->data = kvm_get_arch_capabilities(); *data = kvm_get_arch_capabilities();
break; break;
case MSR_IA32_PERF_CAPABILITIES: case MSR_IA32_PERF_CAPABILITIES:
msr->data = kvm_caps.supported_perf_cap; *data = kvm_caps.supported_perf_cap;
break; break;
case MSR_IA32_UCODE_REV: case MSR_IA32_UCODE_REV:
rdmsrl_safe(msr->index, &msr->data); rdmsrl_safe(index, data);
break; break;
default: default:
return kvm_x86_call(get_feature_msr)(msr->index, &msr->data); return kvm_x86_call(get_feature_msr)(index, data);
} }
return 0; return 0;
} }
static int do_get_feature_msr(struct kvm_vcpu *vcpu, unsigned index, u64 *data) static int do_get_feature_msr(struct kvm_vcpu *vcpu, unsigned index, u64 *data)
{ {
struct kvm_msr_entry msr;
int r; int r;
/* Unconditionally clear the output for simplicity */ /* Unconditionally clear the output for simplicity */
msr.data = 0; *data = 0;
msr.index = index; r = kvm_get_feature_msr(vcpu, index, data, true);
r = kvm_get_feature_msr(&msr);
if (r == KVM_MSR_RET_UNSUPPORTED && kvm_msr_ignored_check(index, 0, false)) if (r == KVM_MSR_RET_UNSUPPORTED && kvm_msr_ignored_check(index, 0, false))
r = 0; r = 0;
*data = msr.data;
return r; return r;
} }
...@@ -7378,11 +7377,9 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) ...@@ -7378,11 +7377,9 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
static void kvm_probe_feature_msr(u32 msr_index) static void kvm_probe_feature_msr(u32 msr_index)
{ {
struct kvm_msr_entry msr = { u64 data;
.index = msr_index,
};
if (kvm_get_feature_msr(&msr)) if (kvm_get_feature_msr(NULL, msr_index, &data, true))
return; return;
msr_based_features[num_msr_based_features++] = msr_index; msr_based_features[num_msr_based_features++] = msr_index;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment