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 */