Module Name:    src
Committed By:   skrll
Date:           Fri Oct 19 09:56:32 UTC 2012

Modified Files:
        src/sys/arch/arm/arm32: arm32_kvminit.c

Log Message:
slop wasn't sloppy enough in the kernel_size calculation. Add in the L2
page tables required as well.

Should fix the dockstar boot problem reported by Andy Ruhl on port-arm.

http://mail-index.netbsd.org/port-arm/2012/09/20/msg001471.html


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/arm32/arm32_kvminit.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/arm/arm32/arm32_kvminit.c
diff -u src/sys/arch/arm/arm32/arm32_kvminit.c:1.10 src/sys/arch/arm/arm32/arm32_kvminit.c:1.11
--- src/sys/arch/arm/arm32/arm32_kvminit.c:1.10	Fri Oct 19 09:50:30 2012
+++ src/sys/arch/arm/arm32/arm32_kvminit.c	Fri Oct 19 09:56:32 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: arm32_kvminit.c,v 1.10 2012/10/19 09:50:30 skrll Exp $	*/
+/*	$NetBSD: arm32_kvminit.c,v 1.11 2012/10/19 09:56:32 skrll Exp $	*/
 
 /*
  * Copyright (c) 2002, 2003, 2005  Genetec Corporation.  All rights reserved.
@@ -122,7 +122,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.10 2012/10/19 09:50:30 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_kvminit.c,v 1.11 2012/10/19 09:56:32 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -368,15 +368,17 @@ arm32_kernel_vm_init(vaddr_t kernel_vm_b
 
 	/*
 	 * Calculate the number of L2 pages needed for mapping the
-	 * kernel + data + stuff
+	 * kernel + data + stuff.  Assume 2 L2 pages for kernel, 1 for vectors,
+	 * and 1 for IO
 	 */
 	size_t kernel_size = bmi->bmi_kernelend;
 	kernel_size -= (bmi->bmi_kernelstart & -L2_S_SEGSIZE);
 	kernel_size += L1_TABLE_SIZE;
-	kernel_size += round_page(MSGBUFSIZE);
+	kernel_size += L2_TABLE_SIZE * (2 + 1 + KERNEL_L2PT_VMDATA_NUM + 1);
 	kernel_size +=
 	    cpu_num * (ABT_STACK_SIZE + FIQ_STACK_SIZE + IRQ_STACK_SIZE
 	    + UND_STACK_SIZE + UPAGES) * PAGE_SIZE;
+	kernel_size += round_page(MSGBUFSIZE);
 	kernel_size += 0x10000;	/* slop */
 	kernel_size += (kernel_size + L2_S_SEGSIZE - 1) / L2_S_SEGSIZE;
 	kernel_size = round_page(kernel_size);

Reply via email to