From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gianluca Guida Subject: [PATCH] Allow removing writable mappings from splintered page tables. Date: Fri, 12 Sep 2008 17:51:37 +0100 Message-ID: <48CA9E19.2030201@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000303090003010201010809" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" Cc: deshantm@gmail.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------000303090003010201010809 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hello, The moving of the pagetable mapping in the linux kernel exposed the fact that under the linux kernel sh_rm_write_access_from_sl1p was always failing. Linux seems to use big pages to access page tables, so we should instruct the shadow code to be able to remove writable mappings from splintered pagetables as well, avoiding using OS heuristic (which were failing in 2.6.27 before George patch, leading to brute-force search at each resync). Todd: Can you try try the linux-2.6.27 kernbench with the following patch? Also, are you using ioemu stub-domains? That should also give a performance gain. Thanks, Gianluca --------------000303090003010201010809 Content-Type: text/x-patch; name="fix_linux_hvm.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fix_linux_hvm.patch" diff -r dbac9ee4d761 xen/arch/x86/mm/shadow/common.c --- a/xen/arch/x86/mm/shadow/common.c Mon Sep 08 16:02:13 2008 +0100 +++ b/xen/arch/x86/mm/shadow/common.c Fri Sep 12 17:40:31 2008 +0100 @@ -2462,22 +2462,25 @@ int sh_remove_write_access_from_sl1p(str ASSERT(mfn_valid(smfn)); ASSERT(mfn_valid(gmfn)); - if ( sp->type == SH_type_l1_32_shadow ) + if ( sp->type == SH_type_l1_32_shadow + || sp->type == SH_type_fl1_32_shadow ) { return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,2) (v, gmfn, smfn, off); } #if CONFIG_PAGING_LEVELS >= 3 - else if ( sp->type == SH_type_l1_pae_shadow ) + else if ( sp->type == SH_type_l1_pae_shadow + || sp->type == SH_type_fl1_pae_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,3) (v, gmfn, smfn, off); #if CONFIG_PAGING_LEVELS >= 4 - else if ( sp->type == SH_type_l1_64_shadow ) + else if ( sp->type == SH_type_l1_64_shadow + || sp->type == SH_type_fl1_64_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,4) (v, gmfn, smfn, off); #endif #endif - + return 0; } #endif diff -r dbac9ee4d761 xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Mon Sep 08 16:02:13 2008 +0100 +++ b/xen/arch/x86/mm/shadow/multi.c Fri Sep 12 17:40:31 2008 +0100 @@ -4539,7 +4539,8 @@ int sh_rm_write_access_from_sl1p(struct sp = mfn_to_shadow_page(smfn); if ( sp->mbz != 0 - || (sp->type != SH_type_l1_shadow) ) + || (sp->type != SH_type_l1_shadow + && sp->type != SH_type_fl1_shadow) ) goto fail; sl1p = sh_map_domain_page(smfn); --------------000303090003010201010809 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------000303090003010201010809--