[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] We need to do sync when mov_to_cr3 to a value already shadowed.



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 73d19afe543c271ec61169a224b007537b4be4cd
# Parent  b6dfdbeb2780d771fda70c353268775aaf1b270e
We need to do sync when mov_to_cr3 to a value already shadowed.
The L2 page and already shadowed L1 page may be out of sync.
This fixes the problems of segmentation faults and strange prints
when booting Redhat FC3 and make kernel in FC3 in VMX domain.

Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>

diff -r b6dfdbeb2780 -r 73d19afe543c xen/arch/x86/shadow.c
--- a/xen/arch/x86/shadow.c     Wed Nov 30 11:13:53 2005
+++ b/xen/arch/x86/shadow.c     Wed Nov 30 11:16:35 2005
@@ -2154,7 +2154,8 @@
 #elif CONFIG_PAGING_LEVELS == 4
         smfn = shadow_l4_table(d, gpfn, gmfn);
 #endif
-    }
+    }else
+        shadow_sync_all(d);
     if ( !get_shadow_ref(smfn) )
         BUG();
     old_smfn = pagetable_get_pfn(v->arch.shadow_table);
diff -r b6dfdbeb2780 -r 73d19afe543c xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c   Wed Nov 30 11:13:53 2005
+++ b/xen/arch/x86/shadow32.c   Wed Nov 30 11:16:35 2005
@@ -2911,6 +2911,8 @@
      */
     if ( unlikely(!(smfn = __shadow_status(d, gpfn, PGT_base_page_table))) )
         smfn = shadow_l2_table(d, gpfn, gmfn);
+    else
+        shadow_sync_all(d);
     if ( !get_shadow_ref(smfn) )
         BUG();
     old_smfn = pagetable_get_pfn(v->arch.shadow_table);

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.