Index: sys/arch/aarch64/aarch64/pmap.c =================================================================== RCS file: /cvsroot/src/sys/arch/aarch64/aarch64/pmap.c,v retrieving revision 1.70 diff -u -p -r1.70 pmap.c --- sys/arch/aarch64/aarch64/pmap.c 13 Apr 2020 05:40:25 -0000 1.70 +++ sys/arch/aarch64/aarch64/pmap.c 17 Apr 2020 06:59:44 -0000 @@ -504,32 +504,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 @@ -617,6 +597,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; @@ -639,7 +622,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: sys/arch/aarch64/include/pmap.h =================================================================== RCS file: /cvsroot/src/sys/arch/aarch64/include/pmap.h,v retrieving revision 1.37 diff -u -p -r1.37 pmap.h --- sys/arch/aarch64/include/pmap.h 8 Apr 2020 00:13:40 -0000 1.37 +++ sys/arch/aarch64/include/pmap.h 17 Apr 2020 06:59:44 -0000 @@ -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 */