Module Name: src
Committed By: tsutsui
Date: Thu Sep 19 12:04:36 UTC 2013
Modified Files:
src/sys/arch/mvme68k/mvme68k: pmap_bootstrap.c
Log Message:
Move physmem calculations before nptpage initialization.
Fixes mvme68k specific part of PR port-m68k/45915
(panic: pmap_enter_ptpage: can't get KPT page).
Reported and confirmed by Andrew Gillham on his MVME177:
http://mail-index.NetBSD.org/port-mvme68k/2013/09/17/msg000082.html
Should be pulled up to all netbsd-6 branches.
To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/mvme68k/mvme68k/pmap_bootstrap.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/mvme68k/mvme68k/pmap_bootstrap.c
diff -u src/sys/arch/mvme68k/mvme68k/pmap_bootstrap.c:1.51 src/sys/arch/mvme68k/mvme68k/pmap_bootstrap.c:1.52
--- src/sys/arch/mvme68k/mvme68k/pmap_bootstrap.c:1.51 Fri Feb 10 06:28:39 2012
+++ src/sys/arch/mvme68k/mvme68k/pmap_bootstrap.c Thu Sep 19 12:04:36 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap_bootstrap.c,v 1.51 2012/02/10 06:28:39 mhitch Exp $ */
+/* $NetBSD: pmap_bootstrap.c,v 1.52 2013/09/19 12:04:36 tsutsui Exp $ */
/*
* Copyright (c) 1991, 1993
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap_bootstrap.c,v 1.51 2012/02/10 06:28:39 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_bootstrap.c,v 1.52 2013/09/19 12:04:36 tsutsui Exp $");
#include "opt_m68k_arch.h"
@@ -100,6 +100,42 @@ pmap_bootstrap(paddr_t nextpa, paddr_t f
#endif
/*
+ * Initialize the mem_clusters[] array for the crash dump
+ * code. While we're at it, compute the total amount of
+ * physical memory in the system.
+ */
+ for (i = 0; i < VM_PHYSSEG_MAX; i++) {
+ if (RELOC(phys_seg_list[i].ps_start, paddr_t) ==
+ RELOC(phys_seg_list[i].ps_end, paddr_t)) {
+ /*
+ * No more memory.
+ */
+ break;
+ }
+
+ /*
+ * Make sure these are properly rounded.
+ */
+ RELOC(phys_seg_list[i].ps_start, paddr_t) =
+ m68k_round_page(RELOC(phys_seg_list[i].ps_start,
+ paddr_t));
+ RELOC(phys_seg_list[i].ps_end, paddr_t) =
+ m68k_trunc_page(RELOC(phys_seg_list[i].ps_end,
+ paddr_t));
+
+ size = RELOC(phys_seg_list[i].ps_end, paddr_t) -
+ RELOC(phys_seg_list[i].ps_start, paddr_t);
+
+ RELOC(mem_clusters[i].start, u_quad_t) =
+ RELOC(phys_seg_list[i].ps_start, paddr_t);
+ RELOC(mem_clusters[i].size, u_quad_t) = size;
+
+ RELOC(physmem, int) += size >> PGSHIFT;
+
+ RELOC(mem_cluster_cnt, int) += 1;
+ }
+
+ /*
* Calculate important physical addresses:
*
* lwp0upa lwp0 u-area UPAGES pages
@@ -409,42 +445,6 @@ pmap_bootstrap(paddr_t nextpa, paddr_t f
RELOC(lwp0uarea, vaddr_t) = lwp0upa - firstpa;
/*
- * Initialize the mem_clusters[] array for the crash dump
- * code. While we're at it, compute the total amount of
- * physical memory in the system.
- */
- for (i = 0; i < VM_PHYSSEG_MAX; i++) {
- if (RELOC(phys_seg_list[i].ps_start, paddr_t) ==
- RELOC(phys_seg_list[i].ps_end, paddr_t)) {
- /*
- * No more memory.
- */
- break;
- }
-
- /*
- * Make sure these are properly rounded.
- */
- RELOC(phys_seg_list[i].ps_start, paddr_t) =
- m68k_round_page(RELOC(phys_seg_list[i].ps_start,
- paddr_t));
- RELOC(phys_seg_list[i].ps_end, paddr_t) =
- m68k_trunc_page(RELOC(phys_seg_list[i].ps_end,
- paddr_t));
-
- size = RELOC(phys_seg_list[i].ps_end, paddr_t) -
- RELOC(phys_seg_list[i].ps_start, paddr_t);
-
- RELOC(mem_clusters[i].start, u_quad_t) =
- RELOC(phys_seg_list[i].ps_start, paddr_t);
- RELOC(mem_clusters[i].size, u_quad_t) = size;
-
- RELOC(physmem, int) += size >> PGSHIFT;
-
- RELOC(mem_cluster_cnt, int) += 1;
- }
-
- /*
* Scoot the start of available on-board RAM forward to
* account for:
*