]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
KVM: x86: Refactor kvm_x86_ops.get_msr_feature() to avoid kvm_msr_entry
authorSean Christopherson <seanjc@google.com>
Fri, 2 Aug 2024 18:19:29 +0000 (11:19 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 22 Aug 2024 19:06:30 +0000 (12:06 -0700)
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>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/svm/svm.c
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/vmx/x86_ops.h
arch/x86/kvm/x86.c

index 4a68cb3eba78f81d4187cbdc3f5f6b529b001140..fe61cff1f49d86420e71045312df31b72f7baca5 100644 (file)
@@ -1806,7 +1806,7 @@ struct kvm_x86_ops {
        int (*vm_move_enc_context_from)(struct kvm *kvm, unsigned int source_fd);
        void (*guest_memory_reclaimed)(struct kvm *kvm);
 
-       int (*get_msr_feature)(struct kvm_msr_entry *entry);
+       int (*get_msr_feature)(u32 msr, u64 *data);
 
        int (*check_emulate_instruction)(struct kvm_vcpu *vcpu, int emul_type,
                                         void *insn, int insn_len);
index a265f6e621fcc5c444a938041068a2fd3cae528c..314dd4aacfe97131a2180329086f61e34996ca0c 100644 (file)
@@ -2825,14 +2825,14 @@ static int efer_trap(struct kvm_vcpu *vcpu)
        return kvm_complete_insn_gp(vcpu, ret);
 }
 
-static int svm_get_msr_feature(struct kvm_msr_entry *msr)
+static int svm_get_msr_feature(u32 msr, u64 *data)
 {
-       msr->data = 0;
+       *data = 0;
 
-       switch (msr->index) {
+       switch (msr) {
        case MSR_AMD64_DE_CFG:
                if (cpu_feature_enabled(X86_FEATURE_LFENCE_RDTSC))
-                       msr->data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE;
+                       *data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE;
                break;
        default:
                return KVM_MSR_RET_UNSUPPORTED;
@@ -3179,14 +3179,12 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
                kvm_pr_unimpl_wrmsr(vcpu, ecx, data);
                break;
        case MSR_AMD64_DE_CFG: {
-               struct kvm_msr_entry msr_entry;
+               u64 supported_de_cfg;
 
-               msr_entry.index = msr->index;
-               if (svm_get_msr_feature(&msr_entry))
+               if (svm_get_msr_feature(ecx, &supported_de_cfg))
                        return 1;
 
-               /* Check the supported bits */
-               if (data & ~msr_entry.data)
+               if (data & ~supported_de_cfg)
                        return 1;
 
                /*
index e5b253e4d421577a654401318d694bdd57f7ea38..3d24eb4aeca266703ca07bdb0ce7c0edc33b6a7c 100644 (file)
@@ -1998,13 +1998,13 @@ static inline bool is_vmx_feature_control_msr_valid(struct vcpu_vmx *vmx,
        return !(msr->data & ~valid_bits);
 }
 
-int vmx_get_msr_feature(struct kvm_msr_entry *msr)
+int vmx_get_msr_feature(u32 msr, u64 *data)
 {
-       switch (msr->index) {
+       switch (msr) {
        case KVM_FIRST_EMULATED_VMX_MSR ... KVM_LAST_EMULATED_VMX_MSR:
                if (!nested)
                        return 1;
-               return vmx_get_vmx_msr(&vmcs_config.nested, msr->index, &msr->data);
+               return vmx_get_vmx_msr(&vmcs_config.nested, msrdata);
        default:
                return KVM_MSR_RET_UNSUPPORTED;
        }
index ce3221cd1d01adae79f09238966aad1aba6a911f..9a0304eb847b27cb07405ab5ca2ff96c48819c35 100644 (file)
@@ -56,7 +56,7 @@ bool vmx_has_emulated_msr(struct kvm *kvm, u32 index);
 void vmx_msr_filter_changed(struct kvm_vcpu *vcpu);
 void vmx_prepare_switch_to_guest(struct kvm_vcpu *vcpu);
 void vmx_update_exception_bitmap(struct kvm_vcpu *vcpu);
-int vmx_get_msr_feature(struct kvm_msr_entry *msr);
+int vmx_get_msr_feature(u32 msr, u64 *data);
 int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
 u64 vmx_get_segment_base(struct kvm_vcpu *vcpu, int seg);
 void vmx_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);
index ea2f3ff93957473d3c8fed7610abd1b266b87dd5..29d1205f62d3909d0a89c4ffdcdf82c584e8eb4e 100644 (file)
@@ -1672,7 +1672,7 @@ static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
                rdmsrl_safe(msr->index, &msr->data);
                break;
        default:
-               return kvm_x86_call(get_msr_feature)(msr);
+               return kvm_x86_call(get_msr_feature)(msr->index, &msr->data);
        }
        return 0;
 }