From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH] nVMX: Keep arch.pat in sync on L1-L2 switches Date: Mon, 5 Aug 2013 11:40:03 +0300 Message-ID: <20130805084003.GD2258@redhat.com> References: <51FE7087.3060008@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Paolo Bonzini , kvm , =?utf-8?B?IuadjuaYpeWlhyA8QXJ0aHVyIENodW5xaSBMaT4i?= To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:11983 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754809Ab3HEIkQ (ORCPT ); Mon, 5 Aug 2013 04:40:16 -0400 Content-Disposition: inline In-Reply-To: <51FE7087.3060008@web.de> Sender: kvm-owner@vger.kernel.org List-ID: On Sun, Aug 04, 2013 at 05:17:27PM +0200, Jan Kiszka wrote: > From: Jan Kiszka > > When asking vmx to load the PAT MSR for us while switching from L1 to L2 > or vice versa, we have to update arch.pat as well as it may later be > used again to load or read out the MSR content. > > Signed-off-by: Jan Kiszka Reviewed-by: Gleb Natapov > --- > > Arthur, please add your tested-by also officially. > > arch/x86/kvm/vmx.c | 9 ++++++--- > 1 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 45fd70c..396572d 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -7535,9 +7535,10 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) > vmcs_write32(VM_ENTRY_CONTROLS, vmcs12->vm_entry_controls | > (vmcs_config.vmentry_ctrl & ~VM_ENTRY_IA32E_MODE)); > > - if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_PAT) > + if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_PAT) { > vmcs_write64(GUEST_IA32_PAT, vmcs12->guest_ia32_pat); > - else if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) > + vcpu->arch.pat = vmcs12->guest_ia32_pat; > + } else if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) > vmcs_write64(GUEST_IA32_PAT, vmx->vcpu.arch.pat); > > > @@ -8025,8 +8026,10 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu, > vmcs_writel(GUEST_IDTR_BASE, vmcs12->host_idtr_base); > vmcs_writel(GUEST_GDTR_BASE, vmcs12->host_gdtr_base); > > - if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_PAT) > + if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_PAT) { > vmcs_write64(GUEST_IA32_PAT, vmcs12->host_ia32_pat); > + vcpu->arch.pat = vmcs12->host_ia32_pat; > + } > if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL) > vmcs_write64(GUEST_IA32_PERF_GLOBAL_CTRL, > vmcs12->host_ia32_perf_global_ctrl); > -- > 1.7.3.4 -- Gleb.