Module Name:    src
Committed By:   martin
Date:           Tue Jan 21 11:11:00 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64 [netbsd-9]: aarch64_machdep.c locore.S

Log Message:
Pull up following revision(s) (requested by ryo in ticket #617):

        sys/arch/aarch64/aarch64/aarch64_machdep.c: revision 1.37
        sys/arch/aarch64/aarch64/locore.S: revision 1.50

fix panic when modload.

panic: kernel diagnostic assertion "!pmap_extract(pmap_kernel(), loopva, NULL)" 
failed: file "../../../../uvm/uvm_km.c", line 674 loopva=0xffffffc001000000'

The space allocated by bootpage_alloc() is only used as a physical page
for pagetable pages, so there is no need to map it with KVA.
And kernend_extra should not have consumed any KVA space.


To generate a diff of this commit:
cvs rdiff -u -r1.28.4.1 -r1.28.4.2 \
    src/sys/arch/aarch64/aarch64/aarch64_machdep.c
cvs rdiff -u -r1.39.2.4 -r1.39.2.5 src/sys/arch/aarch64/aarch64/locore.S

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/aarch64/aarch64/aarch64_machdep.c
diff -u src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.28.4.1 src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.28.4.2
--- src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.28.4.1	Sun Sep 22 10:36:30 2019
+++ src/sys/arch/aarch64/aarch64/aarch64_machdep.c	Tue Jan 21 11:11:00 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: aarch64_machdep.c,v 1.28.4.1 2019/09/22 10:36:30 martin Exp $ */
+/* $NetBSD: aarch64_machdep.c,v 1.28.4.2 2020/01/21 11:11:00 martin Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.28.4.1 2019/09/22 10:36:30 martin Exp $");
+__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.28.4.2 2020/01/21 11:11:00 martin Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_ddb.h"
@@ -100,7 +100,7 @@ vaddr_t physical_end;
 /* filled in before cleaning bss. keep in .data */
 u_long kern_vtopdiff __attribute__((__section__(".data")));
 
-long kernend_extra;	/* extra memory allocated from round_page(_end[]) */
+long kernend_extra;	/* extra physicalmemory allocated from round_page(_end[]) */
 
 /* dump configuration */
 int	cpu_dump(void);
@@ -221,7 +221,7 @@ cpu_kernel_vm_init(uint64_t memory_start
 	pmapboot_protect(L2_TRUNC_BLOCK(kernstart),
 	    L2_TRUNC_BLOCK(data_start), VM_PROT_WRITE);
 	pmapboot_protect(L2_ROUND_BLOCK(rodata_start),
-	    L2_ROUND_BLOCK(kernend + kernend_extra), VM_PROT_EXECUTE);
+	    L2_ROUND_BLOCK(kernend), VM_PROT_EXECUTE);
 
 	aarch64_tlbi_all();
 
@@ -282,7 +282,7 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	kernstart = trunc_page((vaddr_t)__kernel_text);
 	kernend = round_page((vaddr_t)_end);
 	kernstart_l2 = L2_TRUNC_BLOCK(kernstart);
-	kernend_l2 = L2_ROUND_BLOCK(kernend + kernend_extra);
+	kernend_l2 = L2_ROUND_BLOCK(kernend);
 	kernelvmstart = kernend_l2;
 
 #ifdef MODULAR
@@ -336,14 +336,14 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	    "physical_start        = 0x%016lx\n"
 	    "kernel_start_phys     = 0x%016lx\n"
 	    "kernel_end_phys       = 0x%016lx\n"
+	    "pagetables_start_phys = 0x%016lx\n"
+	    "pagetables_end_phys   = 0x%016lx\n"
 	    "msgbuf                = 0x%016lx\n"
 	    "physical_end          = 0x%016lx\n"
 	    "VM_MIN_KERNEL_ADDRESS = 0x%016lx\n"
 	    "kernel_start_l2       = 0x%016lx\n"
 	    "kernel_start          = 0x%016lx\n"
 	    "kernel_end            = 0x%016lx\n"
-	    "pagetables            = 0x%016lx\n"
-	    "pagetables_end        = 0x%016lx\n"
 	    "kernel_end_l2         = 0x%016lx\n"
 #ifdef MODULAR
 	    "module_start          = 0x%016lx\n"
@@ -357,14 +357,14 @@ initarm_common(vaddr_t kvm_base, vsize_t
 	    physical_start,
 	    kernstart_phys,
 	    kernend_phys,
+	    round_page(kernend_phys),
+	    round_page(kernend_phys) + kernend_extra,
 	    msgbufaddr,
 	    physical_end,
 	    VM_MIN_KERNEL_ADDRESS,
 	    kernstart_l2,
 	    kernstart,
 	    kernend,
-	    round_page(kernend),
-	    round_page(kernend) + kernend_extra,
 	    kernend_l2,
 #ifdef MODULAR
 	    module_start,
@@ -550,7 +550,7 @@ mm_md_kernacc(void *ptr, vm_prot_t prot,
 #define IN_RANGE(addr,sta,end)	(((sta) <= (addr)) && ((addr) < (end)))
 
 	*handled = false;
-	if (IN_RANGE(v, kernstart, kernend + kernend_extra)) {
+	if (IN_RANGE(v, kernstart, kernend)) {
 		*handled = true;
 		if ((v < data_start) && (prot & VM_PROT_WRITE))
 			return EFAULT;

Index: src/sys/arch/aarch64/aarch64/locore.S
diff -u src/sys/arch/aarch64/aarch64/locore.S:1.39.2.4 src/sys/arch/aarch64/aarch64/locore.S:1.39.2.5
--- src/sys/arch/aarch64/aarch64/locore.S:1.39.2.4	Sun Dec 29 09:27:09 2019
+++ src/sys/arch/aarch64/aarch64/locore.S	Tue Jan 21 11:11:00 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.39.2.4 2019/12/29 09:27:09 martin Exp $	*/
+/*	$NetBSD: locore.S,v 1.39.2.5 2020/01/21 11:11:00 martin Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -38,7 +38,7 @@
 #include <aarch64/hypervisor.h>
 #include "assym.h"
 
-RCSID("$NetBSD: locore.S,v 1.39.2.4 2019/12/29 09:27:09 martin Exp $")
+RCSID("$NetBSD: locore.S,v 1.39.2.5 2020/01/21 11:11:00 martin Exp $")
 
 #ifdef AARCH64_DEVICE_MEM_STRONGLY_ORDERED
 #define	MAIR_DEVICE_MEM		MAIR_DEVICE_nGnRnE
@@ -844,7 +844,6 @@ init_mmutable:
 	adr	x1, start			/* pa = start */
 	ADDR	x2, _end
 	sub	x2, x2, x1			/* size = _end - start */
-	add	x2, x2, #BOOTPAGE_ALLOC_MAX	/* for bootpage_alloc() */
 	ldr	x0, =start			/* va */
 	bl	pmapboot_enter
 	cbnz	x0, init_mmutable_error

Reply via email to