Li, Xin B
2007-Apr-11 15:57 UTC
[Xen-devel] Not call paging_update_cr3(v) when guest reads from CR3?
Hi Tim, I think it''s not necessary to call paging_update_cr3(v) when guest reads from CR3, am I right? Thanks -Xin diff -r 38204c93428e xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Wed Apr 11 16:08:35 2007 +0100 +++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Apr 11 22:27:35 2007 +0800 @@ -2103,16 +2103,14 @@ static int mov_to_cr(int gp, int cr, str /* * We make a new one if the shadow does not exist. */ - if (value == v->arch.hvm_vmx.cpu_cr3) { + if ( value == v->arch.hvm_vmx.cpu_cr3 ) { /* * This is simple TLB flush, implying the guest has * removed some translation or changed page attributes. - * We simply invalidate the shadow. */ mfn = get_mfn_from_gpfn(value >> PAGE_SHIFT); if (mfn != pagetable_get_pfn(v->arch.guest_table)) goto bad_cr3; - paging_update_cr3(v); } else { /* * If different, make a shadow. Check if the PDBR is valid _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Tim Deegan
2007-Apr-11 16:05 UTC
Re: [Xen-devel] Not call paging_update_cr3(v) when guest reads from CR3?
At 23:57 +0800 on 11 Apr (1176335861), Li, Xin B wrote:> Hi Tim, > I think it''s not necessary to call paging_update_cr3(v) when guest reads > from CR3, am I right?Reading CR3 is safe, but when the guest writes the same value to CR3 twice in a row (which is the code your patch touches) we do need the call. CR3 writes have side-effects apart from changing the top of the pagetable tree -- e.g., on PAE systems, we must re-read the four top-level entries. Cheers, Tim> Thanks > -Xin > > > diff -r 38204c93428e xen/arch/x86/hvm/vmx/vmx.c > --- a/xen/arch/x86/hvm/vmx/vmx.c Wed Apr 11 16:08:35 2007 +0100 > +++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Apr 11 22:27:35 2007 +0800 > @@ -2103,16 +2103,14 @@ static int mov_to_cr(int gp, int cr, str > /* > * We make a new one if the shadow does not exist. > */ > - if (value == v->arch.hvm_vmx.cpu_cr3) { > + if ( value == v->arch.hvm_vmx.cpu_cr3 ) { > /* > * This is simple TLB flush, implying the guest has > * removed some translation or changed page attributes. > - * We simply invalidate the shadow. > */ > mfn = get_mfn_from_gpfn(value >> PAGE_SHIFT); > if (mfn != pagetable_get_pfn(v->arch.guest_table)) > goto bad_cr3; > - paging_update_cr3(v); > } else { > /* > * If different, make a shadow. Check if the PDBR is valid > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel-- Tim Deegan <Tim.Deegan@xensource.com>, XenSource UK Limited Registered office c/o EC2Y 5EB, UK; company number 05334508 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel