> On 8 Nov 2019, at 0:49, Aaron Lewis <aaronlewis@xxxxxxxxxx> wrote: > > Prepare the MSR-store area to be used in a follow up patch. > > Signed-off-by: Aaron Lewis <aaronlewis@xxxxxxxxxx> > --- > arch/x86/kvm/vmx/nested.c | 17 ++++++++++++++++- > arch/x86/kvm/vmx/vmx.h | 4 ++++ > 2 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 7b058d7b9fcc..c249be43fff2 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -982,6 +982,14 @@ static int nested_vmx_store_msr(struct kvm_vcpu *vcpu, u64 gpa, u32 count) > return 0; > } > > +static void prepare_vmx_msr_autostore_list(struct kvm_vcpu *vcpu) > +{ > + struct vcpu_vmx *vmx = to_vmx(vcpu); > + struct vmx_msrs *autostore = &vmx->msr_autostore.guest; > + > + autostore->nr = 0; > +} > + > static bool nested_cr3_valid(struct kvm_vcpu *vcpu, unsigned long val) > { > unsigned long invalid_mask; > @@ -2027,7 +2035,7 @@ static void prepare_vmcs02_constant_state(struct vcpu_vmx *vmx) > * addresses are constant (for vmcs02), the counts can change based > * on L2's behavior, e.g. switching to/from long mode. > */ > - vmcs_write32(VM_EXIT_MSR_STORE_COUNT, 0); > + vmcs_write64(VM_EXIT_MSR_STORE_ADDR, __pa(vmx->msr_autostore.guest.val)); > vmcs_write64(VM_EXIT_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.host.val)); > vmcs_write64(VM_ENTRY_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.guest.val)); > > @@ -2294,6 +2302,13 @@ static void prepare_vmcs02_rare(struct vcpu_vmx *vmx, struct vmcs12 *vmcs12) > vmcs_write64(EOI_EXIT_BITMAP3, vmcs12->eoi_exit_bitmap3); > } > > + /* > + * Make sure the msr_autostore list is up to date before we set the > + * count in the vmcs02. > + */ > + prepare_vmx_msr_autostore_list(&vmx->vcpu, MSR_IA32_TSC); Doesn’t this fail compilation? prepare_vmx_msr_autostore_list() is declared with single parameter while it is called here with two parameters. Also, why do we need this as a separate patch? It made sense if next patch was split between all the framework code and the code specific using it in regards to MSR_IA32_TSC, but current separation is a bit bizarre. It is also OK if this patch and next one will just be merged to one (with no such separation). > + > + vmcs_write32(VM_EXIT_MSR_STORE_COUNT, vmx->msr_autostore.guest.nr); > vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.host.nr); > vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.guest.nr); > > diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h > index 1dad8e5c8f86..2616f639cf50 100644 > --- a/arch/x86/kvm/vmx/vmx.h > +++ b/arch/x86/kvm/vmx/vmx.h > @@ -230,6 +230,10 @@ struct vcpu_vmx { > struct vmx_msrs host; > } msr_autoload; > > + struct msr_autostore { > + struct vmx_msrs guest; > + } msr_autostore; > + > struct { > int vm86_active; > ulong save_rflags; > -- > 2.24.0.432.g9d3f5f5b63-goog >