Module Name:    src
Committed By:   jym
Date:           Sun Jun 24 18:31:53 UTC 2012

Modified Files:
        src/sys/arch/xen/include: xenpmap.h
        src/sys/arch/xen/x86: xen_pmap.c

Log Message:
Enable the map/unmap recursive mapping functions for all Xen ports for
save/restore.

For an unknown reason (to me) Xen refuses to update VM translations
when the entry is pointing back to itself (which is precisely
what our recursive VM model does). So enable the functions that take
care of this, which will avoid all sort of memory corruption upon restore
leading domU to trample upon itself.

Save/restore works again for amd64. The occasional domU frontend corruption is
still present, but is harmless to dom0. Now we have a working shell and
ddb inside domU, that helps debugging a tiny bit.

XXX pull-up to -6.


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/xen/include/xenpmap.h
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/xen/x86/xen_pmap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/xen/include/xenpmap.h
diff -u src/sys/arch/xen/include/xenpmap.h:1.34 src/sys/arch/xen/include/xenpmap.h:1.35
--- src/sys/arch/xen/include/xenpmap.h:1.34	Fri Apr 20 22:23:24 2012
+++ src/sys/arch/xen/include/xenpmap.h	Sun Jun 24 18:31:52 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: xenpmap.h,v 1.34 2012/04/20 22:23:24 rmind Exp $	*/
+/*	$NetBSD: xenpmap.h,v 1.35 2012/06/24 18:31:52 jym Exp $	*/
 
 /*
  *
@@ -58,11 +58,8 @@ void xen_bcast_invlpg(vaddr_t);
 
 void pmap_xen_resume(void);
 void pmap_xen_suspend(void);
-
-#ifdef PAE
-void	pmap_map_recursive_entries(void);
-void	pmap_unmap_recursive_entries(void);
-#endif /* PAE */
+void pmap_map_recursive_entries(void);
+void pmap_unmap_recursive_entries(void);
 
 #if defined(PAE) || defined(__x86_64__)
 void xen_kpm_sync(struct pmap *, int);

Index: src/sys/arch/xen/x86/xen_pmap.c
diff -u src/sys/arch/xen/x86/xen_pmap.c:1.21 src/sys/arch/xen/x86/xen_pmap.c:1.22
--- src/sys/arch/xen/x86/xen_pmap.c:1.21	Fri Apr 20 22:23:25 2012
+++ src/sys/arch/xen/x86/xen_pmap.c	Sun Jun 24 18:31:53 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: xen_pmap.c,v 1.21 2012/04/20 22:23:25 rmind Exp $	*/
+/*	$NetBSD: xen_pmap.c,v 1.22 2012/06/24 18:31:53 jym Exp $	*/
 
 /*
  * Copyright (c) 2007 Manuel Bouyer.
@@ -102,7 +102,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.21 2012/04/20 22:23:25 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.22 2012/06/24 18:31:53 jym Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
@@ -241,9 +241,7 @@ pmap_extract_ma(struct pmap *pmap, vaddr
 void
 pmap_xen_suspend(void)
 {
-#ifdef PAE
 	pmap_unmap_recursive_entries();
-#endif
 
 	xpq_flush_queue();
 }
@@ -251,14 +249,11 @@ pmap_xen_suspend(void)
 void
 pmap_xen_resume(void)
 {
-#ifdef PAE
 	pmap_map_recursive_entries();
-#endif
 
 	xpq_flush_queue();
 }
 
-#ifdef PAE
 /*
  * NetBSD uses L2 shadow pages to support PAE with Xen. However, Xen does not
  * handle them correctly during save/restore, leading to incorrect page
@@ -327,7 +322,6 @@ pmap_unmap_recursive_entries(void)
 		    0);
 	}
 }
-#endif /* PAE */
 
 #if defined(PAE) || defined(__x86_64__)
 

Reply via email to