Index: sys/arch/arm/arm32/pmap.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/arm32/pmap.c,v retrieving revision 1.357 diff -u -p -r1.357 pmap.c --- sys/arch/arm/arm32/pmap.c 6 Sep 2017 11:51:33 -0000 1.357 +++ sys/arch/arm/arm32/pmap.c 3 Oct 2017 06:19:02 -0000 @@ -1005,7 +1005,6 @@ pmap_enter_pv(struct vm_page_md *md, pad pv->pv_flags = flags; pvp = &SLIST_FIRST(&md->pvh_list); -#ifdef PMAP_CACHE_VIPT /* * Insert unmanaged entries, writeable first, at the head of * the pv list. @@ -1018,7 +1017,7 @@ pmap_enter_pv(struct vm_page_md *md, pad while (*pvp != NULL && PV_IS_WRITE_P((*pvp)->pv_flags)) pvp = &SLIST_NEXT(*pvp, pv_link); } -#endif + SLIST_NEXT(pv, pv_link) = *pvp; /* add to ... */ *pvp = pv; /* ... locked list */ md->pvh_attrs |= flags & (PVF_REF | PVF_MOD); @@ -2852,9 +2851,6 @@ pmap_page_remove(struct vm_page_md *md, /* * Clear alias counts */ -#ifdef PMAP_CACHE_VIVT - md->k_mappings = 0; -#endif md->urw_mappings = md->uro_mappings = 0; #ifdef PMAP_CACHE_VIVT @@ -2869,7 +2865,6 @@ pmap_page_remove(struct vm_page_md *md, #endif if (pm == pmap_kernel()) { -#ifdef PMAP_CACHE_VIPT /* * If this was unmanaged mapping, it must be preserved. * Move it back on the list and advance the end-of-list @@ -2884,7 +2879,6 @@ pmap_page_remove(struct vm_page_md *md, md->krw_mappings--; else md->kro_mappings--; -#endif PMAPCOUNT(kernel_unmappings); } *pvp = SLIST_NEXT(pv, pv_link); /* remove from list */ @@ -6128,15 +6122,19 @@ pmap_bootstrap(vaddr_t vstart, vaddr_t v #ifdef VERBOSE_INIT_ARM printf("locks "); #endif -#if defined(PMAP_CACHE_VIPT) && !defined(ARM_MMU_EXTENDED) + int pmaplock_ipl = IPL_NONE; +#if !defined(ARM_MMU_EXTENDED) +#if defined(PMAP_CACHE_VIPT) if (arm_cache_prefer_mask != 0) { - mutex_init(&pmap_lock, MUTEX_DEFAULT, IPL_VM); - } else { -#endif - mutex_init(&pmap_lock, MUTEX_DEFAULT, IPL_NONE); -#if defined(PMAP_CACHE_VIPT) && !defined(ARM_MMU_EXTENDED) + pmaplock_ipl = IPL_VM; } #endif +#if defined(PMAP_CACHE_VIVT) + pmaplock_ipl = IPL_VM; +#endif +#endif + mutex_init(&pmap_lock, MUTEX_DEFAULT, pmaplock_ipl); + mutex_init(&pm->pm_obj_lock, MUTEX_DEFAULT, IPL_NONE); uvm_obj_init(&pm->pm_obj, NULL, false, 1); uvm_obj_setlock(&pm->pm_obj, &pm->pm_obj_lock);