From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Egger, Christoph" Subject: Re: [PATCH 1/3] Nested VMX: update nested paging mode when vmswitch is in progress Date: Thu, 12 Dec 2013 12:04:02 +0100 Message-ID: <52A99822.4080802@amazon.de> References: <1386814004-5574-1-git-send-email-yang.z.zhang@intel.com> <1386814004-5574-2-git-send-email-yang.z.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1386814004-5574-2-git-send-email-yang.z.zhang@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Yang Zhang , xen-devel@lists.xen.org Cc: eddie.dong@intel.com, JBeulich@suse.com List-Id: xen-devel@lists.xenproject.org On 12.12.13 03:06, Yang Zhang wrote: > From: Yang Zhang > > virtual vmentry will change paging related stucture, so corrensponding > nested mode need to be updated which is missing currently. > > Signed-off-by: Yang Zhang I weakly remember the "!nestedhvm_vmswitch_in_progress" is needed to avoid a nested pagefault loop on AMD. I do not remember the actual reproduction case. Unfortunately, I do not have a setup to verify. Christoph > --- > xen/arch/x86/hvm/hvm.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > This patch fixed RHEL6 guest installation problem with L1 hyper-v. > > diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c > index 69f7e74..1f62e00 100644 > --- a/xen/arch/x86/hvm/hvm.c > +++ b/xen/arch/x86/hvm/hvm.c > @@ -1925,7 +1925,7 @@ int hvm_set_cr0(unsigned long value) > hvm_update_cr(v, 0, value); > > if ( (value ^ old_value) & X86_CR0_PG ) { > - if ( !nestedhvm_vmswitch_in_progress(v) && nestedhvm_vcpu_in_guestmode(v) ) > + if ( nestedhvm_vcpu_in_guestmode(v) ) > paging_update_nestedmode(v); > else > paging_update_paging_modes(v); > @@ -2014,7 +2014,7 @@ int hvm_set_cr4(unsigned long value) > (X86_CR4_PSE | X86_CR4_PGE | X86_CR4_PAE | X86_CR4_SMEP)) || > (!(value & X86_CR4_PCIDE) && (old_cr & X86_CR4_PCIDE)) ) > { > - if ( !nestedhvm_vmswitch_in_progress(v) && nestedhvm_vcpu_in_guestmode(v) ) > + if ( nestedhvm_vcpu_in_guestmode(v) ) > paging_update_nestedmode(v); > else > paging_update_paging_modes(v); >