Module Name: src
Committed By: sborrill
Date: Fri Feb 24 17:29:32 UTC 2012
Modified Files:
src/sys/arch/x86/x86 [netbsd-5]: pmap.c
src/sys/arch/xen/x86 [netbsd-5]: x86_xpmap.c
Log Message:
Pull up the following revisions(s) (requested by bouyer in ticket #1729):
sys/arch/x86/x86/pmap.c: revision 1.170 via patch
sys/arch/xen/x86/x86_xpmap.c: revision 1.40 via patch
Fix random kernel panic on domains with large memory.
May fix PR port-xen/38699
To generate a diff of this commit:
cvs rdiff -u -r1.74.4.3 -r1.74.4.4 src/sys/arch/x86/x86/pmap.c
cvs rdiff -u -r1.11 -r1.11.4.1 src/sys/arch/xen/x86/x86_xpmap.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/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.74.4.3 src/sys/arch/x86/x86/pmap.c:1.74.4.4
--- src/sys/arch/x86/x86/pmap.c:1.74.4.3 Thu Apr 22 20:02:48 2010
+++ src/sys/arch/x86/x86/pmap.c Fri Feb 24 17:29:32 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.74.4.3 2010/04/22 20:02:48 snj Exp $ */
+/* $NetBSD: pmap.c,v 1.74.4.4 2012/02/24 17:29:32 sborrill Exp $ */
/*
* Copyright (c) 2007 Manuel Bouyer.
@@ -154,7 +154,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.4.3 2010/04/22 20:02:48 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.4.4 2012/02/24 17:29:32 sborrill Exp $");
#include "opt_user_ldt.h"
#include "opt_lockdebug.h"
@@ -535,7 +535,12 @@ static struct pool_cache pmap_pv_cache;
* special VAs and the PTEs that map them
*/
static pt_entry_t *csrc_pte, *cdst_pte, *zero_pte, *ptp_pte, *early_zero_pte;
-static char *csrcp, *cdstp, *zerop, *ptpp, *early_zerop;
+static char *csrcp, *cdstp, *zerop, *ptpp;
+#ifdef XEN
+char *early_zerop; /* also referenced from xen_pmap_bootstrap() */
+#else
+static char *early_zerop;
+#endif
/*
* pool and cache that PDPs are allocated from
@@ -1340,8 +1345,11 @@ pmap_bootstrap(vaddr_t kva_start)
* when it's called for the first time.
* XXXfvdl fix this for MULTIPROCESSOR later.
*/
-
+#ifdef XEN
+ /* early_zerop initialized in xen_pmap_bootstrap() */
+#else
early_zerop = (void *)(KERNBASE + NKL2_KIMG_ENTRIES * NBPD_L2);
+#endif
early_zero_pte = PTE_BASE + pl1_i((unsigned long)early_zerop);
}
Index: src/sys/arch/xen/x86/x86_xpmap.c
diff -u src/sys/arch/xen/x86/x86_xpmap.c:1.11 src/sys/arch/xen/x86/x86_xpmap.c:1.11.4.1
--- src/sys/arch/xen/x86/x86_xpmap.c:1.11 Fri Oct 24 21:09:24 2008
+++ src/sys/arch/xen/x86/x86_xpmap.c Fri Feb 24 17:29:32 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: x86_xpmap.c,v 1.11 2008/10/24 21:09:24 jym Exp $ */
+/* $NetBSD: x86_xpmap.c,v 1.11.4.1 2012/02/24 17:29:32 sborrill Exp $ */
/*
* Copyright (c) 2006 Mathieu Ropert <[email protected]>
@@ -79,7 +79,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_xpmap.c,v 1.11 2008/10/24 21:09:24 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_xpmap.c,v 1.11.4.1 2012/02/24 17:29:32 sborrill Exp $");
#include "opt_xen.h"
#include "opt_ddb.h"
@@ -545,6 +545,7 @@ xen_pmap_bootstrap(void)
* - UAREA
* - dummy user PGD (x86_64)
* - HYPERVISOR_shared_info
+ * - early_zerop
* - ISA I/O mem (if needed)
*/
mapsize += UPAGES * NBPG;
@@ -552,6 +553,7 @@ xen_pmap_bootstrap(void)
mapsize += NBPG;
#endif
mapsize += NBPG;
+ mapsize += NBPG;
#ifdef DOM0OPS
if (xendomain_is_dom0()) {
@@ -639,6 +641,7 @@ xen_bootstrap_tables (vaddr_t old_pgd, v
vaddr_t page, avail, text_end, map_end;
int i;
extern char __data_start;
+ extern char *early_zerop; /* from pmap.c */
__PRINTK(("xen_bootstrap_tables(0x%lx, 0x%lx, %d, %d)\n",
old_pgd, new_pgd, old_count, new_count));
@@ -652,6 +655,7 @@ xen_bootstrap_tables (vaddr_t old_pgd, v
* UAREA
* dummy user PGD (x86_64 only)/gdt page (i386 only)
* HYPERVISOR_shared_info
+ * early_zerop
* ISA I/O mem (if needed)
*/
map_end = new_pgd + ((new_count + l2_4_count) * NBPG);
@@ -659,6 +663,8 @@ xen_bootstrap_tables (vaddr_t old_pgd, v
map_end += (UPAGES + 1) * NBPG;
HYPERVISOR_shared_info = (shared_info_t *)map_end;
map_end += NBPG;
+ early_zerop = (char *)map_end;
+ map_end += NBPG;
}
/*
* we always set atdevbase, as it's used by init386 to find the first