mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 23:21:31 +00:00
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.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
b848f24bd7
commit
7075f16361
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user