All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Allow removing writable mappings from splintered page tables.
@ 2008-09-12 16:51 Gianluca Guida
  2008-09-12 17:08 ` Todd Deshane
  0 siblings, 1 reply; 10+ messages in thread
From: Gianluca Guida @ 2008-09-12 16:51 UTC (permalink / raw)
  To: xen-devel@lists.xensource.com; +Cc: deshantm

[-- Attachment #1: Type: text/plain, Size: 632 bytes --]

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

[-- Attachment #2: fix_linux_hvm.patch --]
[-- Type: text/x-patch, Size: 1719 bytes --]

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);

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-09-16 13:46 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-12 16:51 [PATCH] Allow removing writable mappings from splintered page tables Gianluca Guida
2008-09-12 17:08 ` Todd Deshane
2008-09-12 17:14   ` Gianluca Guida
2008-09-12 18:28     ` Samuel Thibault
2008-09-12 19:52     ` Todd Deshane
2008-09-12 22:13       ` Todd Deshane
2008-09-15 10:38       ` George Dunlap
2008-09-15 16:30         ` Todd Deshane
2008-09-15 17:03           ` George Dunlap
2008-09-16 13:46             ` George Dunlap

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.