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;

Reply via email to