Module Name: src Committed By: ryo Date: Fri Sep 13 18:07:30 UTC 2019
Modified Files: src/sys/arch/aarch64/aarch64: pmap.c src/sys/arch/aarch64/include: cpufunc.h Log Message: In pmap_devmap_bootstrap(), cpu_earlydevice_va_p() must not return true until *all* devmap tables have been enabled. console mapping may be present in the last table. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/aarch64/aarch64/pmap.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/aarch64/include/cpufunc.h 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/pmap.c diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.44 src/sys/arch/aarch64/aarch64/pmap.c:1.45 --- src/sys/arch/aarch64/aarch64/pmap.c:1.44 Sat Sep 7 09:57:37 2019 +++ src/sys/arch/aarch64/aarch64/pmap.c Fri Sep 13 18:07:30 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.44 2019/09/07 09:57:37 ryo Exp $ */ +/* $NetBSD: pmap.c,v 1.45 2019/09/13 18:07:30 ryo Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.44 2019/09/07 09:57:37 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.45 2019/09/13 18:07:30 ryo Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -214,6 +214,7 @@ static vaddr_t pmap_maxkvaddr; vaddr_t virtual_avail, virtual_end; vaddr_t virtual_devmap_addr; +bool pmap_devmap_bootstrap_done = false; static struct pool_cache _pmap_cache; static struct pool_cache _pmap_pv_pool; @@ -338,6 +339,8 @@ pmap_devmap_bootstrap(vaddr_t l0pt, cons table[i].pd_prot, table[i].pd_flags); } + + pmap_devmap_bootstrap_done = true; } const struct pmap_devmap * Index: src/sys/arch/aarch64/include/cpufunc.h diff -u src/sys/arch/aarch64/include/cpufunc.h:1.6 src/sys/arch/aarch64/include/cpufunc.h:1.7 --- src/sys/arch/aarch64/include/cpufunc.h:1.6 Sat Sep 7 11:10:24 2019 +++ src/sys/arch/aarch64/include/cpufunc.h Fri Sep 13 18:07:30 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.h,v 1.6 2019/09/07 11:10:24 ryo Exp $ */ +/* $NetBSD: cpufunc.h,v 1.7 2019/09/13 18:07:30 ryo Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -148,14 +148,14 @@ cpu_clusterid(void) static inline bool cpu_earlydevice_va_p(void) { - extern vaddr_t virtual_devmap_addr; /* in pmap.c */ + extern bool pmap_devmap_bootstrap_done; /* in pmap.c */ /* This function may be called before enabling MMU, or mapping KVA */ if ((reg_sctlr_el1_read() & SCTLR_M) == 0) return false; /* device mapping will be availabled after pmap_devmap_bootstrap() */ - if (virtual_devmap_addr == 0) + if (!pmap_devmap_bootstrap_done) return false; return true;