Module Name: src Committed By: ryo Date: Wed Jan 8 05:41:07 UTC 2020
Modified Files: src/sys/arch/aarch64/aarch64: aarch64_machdep.c locore.S Log Message: 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.36 -r1.37 src/sys/arch/aarch64/aarch64/aarch64_machdep.c cvs rdiff -u -r1.49 -r1.50 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.36 src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.37 --- src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.36 Mon Dec 30 15:54:55 2019 +++ src/sys/arch/aarch64/aarch64/aarch64_machdep.c Wed Jan 8 05:41:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: aarch64_machdep.c,v 1.36 2019/12/30 15:54:55 skrll Exp $ */ +/* $NetBSD: aarch64_machdep.c,v 1.37 2020/01/08 05:41:07 ryo 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.36 2019/12/30 15:54:55 skrll Exp $"); +__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.37 2020/01/08 05:41:07 ryo Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -99,7 +99,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); @@ -227,7 +227,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(); @@ -287,7 +287,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 @@ -341,14 +341,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" @@ -362,14 +362,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, @@ -553,7 +553,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.49 src/sys/arch/aarch64/aarch64/locore.S:1.50 --- src/sys/arch/aarch64/aarch64/locore.S:1.49 Sat Dec 28 17:19:43 2019 +++ src/sys/arch/aarch64/aarch64/locore.S Wed Jan 8 05:41:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.49 2019/12/28 17:19:43 jmcneill Exp $ */ +/* $NetBSD: locore.S,v 1.50 2020/01/08 05:41:07 ryo 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.49 2019/12/28 17:19:43 jmcneill Exp $") +RCSID("$NetBSD: locore.S,v 1.50 2020/01/08 05:41:07 ryo Exp $") #ifdef AARCH64_DEVICE_MEM_STRONGLY_ORDERED #define MAIR_DEVICE_MEM MAIR_DEVICE_nGnRnE @@ -848,7 +848,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