From 23a2531c0e8b8001dca654c2d0f2897e4e265644 Mon Sep 17 00:00:00 2001 From: jym Date: Sun, 24 Jun 2012 18:31:52 +0000 Subject: [PATCH] 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. --- sys/arch/xen/include/xenpmap.h | 9 +++------ sys/arch/xen/x86/xen_pmap.c | 10 ++-------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/sys/arch/xen/include/xenpmap.h b/sys/arch/xen/include/xenpmap.h index 8762a2186f57..dc6af64a2065 100644 --- a/sys/arch/xen/include/xenpmap.h +++ b/sys/arch/xen/include/xenpmap.h @@ -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); diff --git a/sys/arch/xen/x86/xen_pmap.c b/sys/arch/xen/x86/xen_pmap.c index 4d6bb2f21b51..349f773e0491 100644 --- a/sys/arch/xen/x86/xen_pmap.c +++ b/sys/arch/xen/x86/xen_pmap.c @@ -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 -__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_t va, paddr_t *pap) 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__)