Skip to content

Commit 74c6c98

Browse files
committed
KVM: x86: Refactor kvm_x86_ops.get_msr_feature() to avoid kvm_msr_entry
Refactor get_msr_feature() to take the index and data pointer as distinct parameters in anticipation of eliminating "struct kvm_msr_entry" usage further up the primary callchain. No functional change intended. Link: https://lore.kernel.org/r/20240802181935.292540-5-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent aaecae7 commit 74c6c98

5 files changed

Lines changed: 13 additions & 15 deletions

File tree

arch/x86/include/asm/kvm_host.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1806,7 +1806,7 @@ struct kvm_x86_ops {
18061806
int (*vm_move_enc_context_from)(struct kvm *kvm, unsigned int source_fd);
18071807
void (*guest_memory_reclaimed)(struct kvm *kvm);
18081808

1809-
int (*get_msr_feature)(struct kvm_msr_entry *entry);
1809+
int (*get_msr_feature)(u32 msr, u64 *data);
18101810

18111811
int (*check_emulate_instruction)(struct kvm_vcpu *vcpu, int emul_type,
18121812
void *insn, int insn_len);

arch/x86/kvm/svm/svm.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2825,14 +2825,14 @@ static int efer_trap(struct kvm_vcpu *vcpu)
28252825
return kvm_complete_insn_gp(vcpu, ret);
28262826
}
28272827

2828-
static int svm_get_msr_feature(struct kvm_msr_entry *msr)
2828+
static int svm_get_msr_feature(u32 msr, u64 *data)
28292829
{
2830-
msr->data = 0;
2830+
*data = 0;
28312831

2832-
switch (msr->index) {
2832+
switch (msr) {
28332833
case MSR_AMD64_DE_CFG:
28342834
if (cpu_feature_enabled(X86_FEATURE_LFENCE_RDTSC))
2835-
msr->data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE;
2835+
*data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE;
28362836
break;
28372837
default:
28382838
return KVM_MSR_RET_UNSUPPORTED;
@@ -3179,14 +3179,12 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
31793179
kvm_pr_unimpl_wrmsr(vcpu, ecx, data);
31803180
break;
31813181
case MSR_AMD64_DE_CFG: {
3182-
struct kvm_msr_entry msr_entry;
3182+
u64 supported_de_cfg;
31833183

3184-
msr_entry.index = msr->index;
3185-
if (svm_get_msr_feature(&msr_entry))
3184+
if (svm_get_msr_feature(ecx, &supported_de_cfg))
31863185
return 1;
31873186

3188-
/* Check the supported bits */
3189-
if (data & ~msr_entry.data)
3187+
if (data & ~supported_de_cfg)
31903188
return 1;
31913189

31923190
/*

arch/x86/kvm/vmx/vmx.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,13 +1998,13 @@ static inline bool is_vmx_feature_control_msr_valid(struct vcpu_vmx *vmx,
19981998
return !(msr->data & ~valid_bits);
19991999
}
20002000

2001-
int vmx_get_msr_feature(struct kvm_msr_entry *msr)
2001+
int vmx_get_msr_feature(u32 msr, u64 *data)
20022002
{
2003-
switch (msr->index) {
2003+
switch (msr) {
20042004
case KVM_FIRST_EMULATED_VMX_MSR ... KVM_LAST_EMULATED_VMX_MSR:
20052005
if (!nested)
20062006
return 1;
2007-
return vmx_get_vmx_msr(&vmcs_config.nested, msr->index, &msr->data);
2007+
return vmx_get_vmx_msr(&vmcs_config.nested, msr, data);
20082008
default:
20092009
return KVM_MSR_RET_UNSUPPORTED;
20102010
}

arch/x86/kvm/vmx/x86_ops.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ bool vmx_has_emulated_msr(struct kvm *kvm, u32 index);
5656
void vmx_msr_filter_changed(struct kvm_vcpu *vcpu);
5757
void vmx_prepare_switch_to_guest(struct kvm_vcpu *vcpu);
5858
void vmx_update_exception_bitmap(struct kvm_vcpu *vcpu);
59-
int vmx_get_msr_feature(struct kvm_msr_entry *msr);
59+
int vmx_get_msr_feature(u32 msr, u64 *data);
6060
int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
6161
u64 vmx_get_segment_base(struct kvm_vcpu *vcpu, int seg);
6262
void vmx_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);

arch/x86/kvm/x86.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,7 @@ static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
16721672
rdmsrl_safe(msr->index, &msr->data);
16731673
break;
16741674
default:
1675-
return kvm_x86_call(get_msr_feature)(msr);
1675+
return kvm_x86_call(get_msr_feature)(msr->index, &msr->data);
16761676
}
16771677
return 0;
16781678
}

0 commit comments

Comments
 (0)