CVS commit: [netbsd-10] src/sys/arch/alpha/alpha

2023-12-31 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Sun Dec 31 12:45:18 UTC 2023

Modified Files:
src/sys/arch/alpha/alpha [netbsd-10]: pmap.c

Log Message:
Pull up following revision(s) (requested by thorpej in ticket #530):

sys/arch/alpha/alpha/pmap.c: revision 1.308

pmap_bootstrap(): When initializing the L2 PTEs, don't use l2pte_index(),
as it is designed to wrap from 1023->0 during the normal course of use.

However, when setting up the initial kernel page tables, if we have a
large enough config that we end up with more than L2 PT page, we rely
on being able to index > 1023 into the adjacent PT pages to initialize
those entries.

Fixes a MM fault panic during early boot on larger memory configs
(reported by Dave McGuire with an 8GB ES40 and John Klos with a 12GB
DS25).  I've successfully booted at 16GB config in Qemu with this fix.


To generate a diff of this commit:
cvs rdiff -u -r1.307 -r1.307.4.1 src/sys/arch/alpha/alpha/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/alpha/alpha/pmap.c
diff -u src/sys/arch/alpha/alpha/pmap.c:1.307 src/sys/arch/alpha/alpha/pmap.c:1.307.4.1
--- src/sys/arch/alpha/alpha/pmap.c:1.307	Sat Apr  9 23:38:31 2022
+++ src/sys/arch/alpha/alpha/pmap.c	Sun Dec 31 12:45:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.307 2022/04/09 23:38:31 riastradh Exp $ */
+/* $NetBSD: pmap.c,v 1.307.4.1 2023/12/31 12:45:18 martin Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001, 2007, 2008, 2020
@@ -135,7 +135,7 @@
 
 #include 			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.307 2022/04/09 23:38:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.307.4.1 2023/12/31 12:45:18 martin Exp $");
 
 #include 
 #include 
@@ -1204,13 +1204,15 @@ static bool	vtophys_internal(vaddr_t, pa
 	l1pte_ = pmap_l1pte(kernel_lev1map, va);			\
 	if (pmap_pte_v(l1pte_) == 0) {	\
 		printf("kernel level 1 PTE not valid, va 0x%lx "	\
-		"(line %d)\n", (va), __LINE__);			\
+		"(line %d) pte=%p *pte=0x%016lx\n", (va), __LINE__,	\
+		l1pte_, *l1pte_);	\
 		panic("PMAP_KERNEL_PTE");\
 	}\
 	l2pte_ = pmap_l2pte(kernel_lev1map, va, l1pte_);		\
 	if (pmap_pte_v(l2pte_) == 0) {	\
 		printf("kernel level 2 PTE not valid, va 0x%lx "	\
-		"(line %d)\n", (va), __LINE__);			\
+		"(line %d) pte=%p *pte=0x%016lx\n", (va), __LINE__,	\
+		l2pte_, *l2pte_);	\
 		panic("PMAP_KERNEL_PTE");\
 	}\
 	pmap_l3pte(kernel_lev1map, va, l2pte_);\
@@ -1358,8 +1360,19 @@ pmap_bootstrap(paddr_t ptaddr, u_int max
 		pte = (ALPHA_K0SEG_TO_PHYS(((vaddr_t)lev3map) +
 		(i*PAGE_SIZE)) >> PGSHIFT) << PG_SHIFT;
 		pte |= PG_V | PG_ASM | PG_KRE | PG_KWE | PG_WIRED;
-		lev2map[l2pte_index(VM_MIN_KERNEL_ADDRESS+
-		(i*PAGE_SIZE*NPTEPG))] = pte;
+		/*
+		 * No need to use l2pte_index() here; it's equivalent
+		 * to just indexing with our loop variable i, but will
+		 * fall over if we end up with more than 1 L2 PT page.
+		 *
+		 * In other words:
+		 *
+		 *	l2pte_index(VM_MIN_KERNEL_ADDRESS +
+		 *	(i*PAGE_SIZE*NPTEPG))
+		 *
+		 * ...is the same as 'i' so long as i stays below 1024.
+		 */
+		lev2map[i] = pte;
 	}
 
 	/* Initialize the pmap_growkernel_lock. */



CVS commit: [netbsd-10] src/sys/arch/alpha/alpha

2023-12-31 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Sun Dec 31 12:45:18 UTC 2023

Modified Files:
src/sys/arch/alpha/alpha [netbsd-10]: pmap.c

Log Message:
Pull up following revision(s) (requested by thorpej in ticket #530):

sys/arch/alpha/alpha/pmap.c: revision 1.308

pmap_bootstrap(): When initializing the L2 PTEs, don't use l2pte_index(),
as it is designed to wrap from 1023->0 during the normal course of use.

However, when setting up the initial kernel page tables, if we have a
large enough config that we end up with more than L2 PT page, we rely
on being able to index > 1023 into the adjacent PT pages to initialize
those entries.

Fixes a MM fault panic during early boot on larger memory configs
(reported by Dave McGuire with an 8GB ES40 and John Klos with a 12GB
DS25).  I've successfully booted at 16GB config in Qemu with this fix.


To generate a diff of this commit:
cvs rdiff -u -r1.307 -r1.307.4.1 src/sys/arch/alpha/alpha/pmap.c

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