Module Name:    src
Committed By:   skrll
Date:           Thu May 14 07:59:03 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64: pmap.c
        src/sys/arch/aarch64/include: pmap.h

Log Message:
Use MUTEX_NODEBUG for PV locks as is commonly done.  OK ryo.


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/sys/arch/aarch64/aarch64/pmap.c
cvs rdiff -u -r1.38 -r1.39 src/sys/arch/aarch64/include/pmap.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.72 src/sys/arch/aarch64/aarch64/pmap.c:1.73
--- src/sys/arch/aarch64/aarch64/pmap.c:1.72	Wed May 13 10:13:29 2020
+++ src/sys/arch/aarch64/aarch64/pmap.c	Thu May 14 07:59:03 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.72 2020/05/13 10:13:29 jmcneill Exp $	*/
+/*	$NetBSD: pmap.c,v 1.73 2020/05/14 07:59:03 skrll Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.72 2020/05/13 10:13:29 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.73 2020/05/14 07:59:03 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_ddb.h"
@@ -503,32 +503,12 @@ _pmap_pv_ctor(void *arg, void *v, int fl
 void
 pmap_init(void)
 {
-	struct vm_page *pg;
-	struct vm_page_md *md;
-	uvm_physseg_t i;
-	paddr_t pfn;
 
 	pool_cache_bootstrap(&_pmap_cache, sizeof(struct pmap),
 	    0, 0, 0, "pmappl", NULL, IPL_NONE, _pmap_pmap_ctor, NULL, NULL);
 	pool_cache_bootstrap(&_pmap_pv_pool, sizeof(struct pv_entry),
 	    0, 0, 0, "pvpl", NULL, IPL_VM, _pmap_pv_ctor, NULL, NULL);
 
-	/*
-	 * initialize mutex in vm_page_md at this time.
-	 * When LOCKDEBUG, mutex_init() calls km_alloc,
-	 * but VM_MDPAGE_INIT() is called before initialized kmem_vm_arena.
-	 */
-	for (i = uvm_physseg_get_first();
-	     uvm_physseg_valid_p(i);
-	     i = uvm_physseg_get_next(i)) {
-		for (pfn = uvm_physseg_get_start(i);
-		     pfn < uvm_physseg_get_end(i);
-		     pfn++) {
-			pg = PHYS_TO_VM_PAGE(ptoa(pfn));
-			md = VM_PAGE_TO_MD(pg);
-			PMAP_PAGE_INIT(&md->mdpg_pp);
-		}
-	}
 }
 
 void
@@ -616,6 +596,9 @@ pmap_alloc_pdp(struct pmap *pm, struct v
 
 		VM_PAGE_TO_MD(pg)->mdpg_ptep_parent = NULL;
 
+		struct pmap_page *pp = VM_PAGE_TO_PP(pg);
+		pp->pp_flags = 0;
+
 	} else {
 		/* uvm_pageboot_alloc() returns AARCH64 KSEG address */
 		pg = NULL;
@@ -638,7 +621,9 @@ pmap_free_pdp(struct pmap *pm, struct vm
 	LIST_REMOVE(pg, mdpage.mdpg_vmlist);
 	pg->flags |= PG_BUSY;
 	pg->wire_count = 0;
-	VM_MDPAGE_INIT(pg);
+
+	struct pmap_page *pp = VM_PAGE_TO_PP(pg);
+	KASSERT(LIST_EMPTY(&pp->pp_pvhead));
 
 	uvm_pagefree(pg);
 	PMAP_COUNT(pdp_free);

Index: src/sys/arch/aarch64/include/pmap.h
diff -u src/sys/arch/aarch64/include/pmap.h:1.38 src/sys/arch/aarch64/include/pmap.h:1.39
--- src/sys/arch/aarch64/include/pmap.h:1.38	Wed May 13 06:08:51 2020
+++ src/sys/arch/aarch64/include/pmap.h	Thu May 14 07:59:03 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.38 2020/05/13 06:08:51 ryo Exp $ */
+/* $NetBSD: pmap.h,v 1.39 2020/05/14 07:59:03 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -101,16 +101,17 @@ struct vm_page_md {
 	struct pmap_page mdpg_pp;
 };
 
-/* each mdpg_pp.pp_pvlock will be initialized in pmap_init() */
 #define VM_MDPAGE_INIT(pg)					\
 	do {							\
-		LIST_INIT(&(pg)->mdpage.mdpg_pp.pp_pvhead);	\
-		(pg)->mdpage.mdpg_pp.pp_flags = 0;		\
+		(pg)->mdpage.mdpg_ptep_parent = NULL;		\
+		PMAP_PAGE_INIT(&(pg)->mdpage.mdpg_pp);		\
 	} while (/*CONSTCOND*/ 0)
 
 #define PMAP_PAGE_INIT(pp)						\
 	do {								\
-		mutex_init(&(pp)->pp_pvlock, MUTEX_SPIN, IPL_VM);	\
+		mutex_init(&(pp)->pp_pvlock, MUTEX_NODEBUG, IPL_VM);	\
+		LIST_INIT(&(pp)->pp_pvhead);				\
+		(pp)->pp_flags = 0;					\
 	} while (/*CONSTCOND*/ 0)
 
 /* saved permission bit for referenced/modified emulation */

Reply via email to