diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2019-10-16 21:07:18 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2019-10-16 21:07:18 +0000 |
commit | 96448820a3dab2b05694e7c42a72231c92ddadfb (patch) | |
tree | 13381b81648bb076e8f6b1cb3d622f36eba4890a /sys/sparc64/sparc64 | |
parent | 1dc85563587263c6b3c7d04dfdcbdc17865b5e8b (diff) | |
download | src-96448820a3dab2b05694e7c42a72231c92ddadfb.tar.gz src-96448820a3dab2b05694e7c42a72231c92ddadfb.zip |
Port r353622 to sparc64 and arm v4.
Noted by: alc
Reviewed by: alc, jeff, markj
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D22056
Notes
Notes:
svn path=/head/; revision=353664
Diffstat (limited to 'sys/sparc64/sparc64')
-rw-r--r-- | sys/sparc64/sparc64/pmap.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c index 5a2511779140..c26f840d366f 100644 --- a/sys/sparc64/sparc64/pmap.c +++ b/sys/sparc64/sparc64/pmap.c @@ -1500,8 +1500,12 @@ pmap_enter_locked(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot, rw_assert(&tte_list_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pm, MA_OWNED); - if ((m->oflags & VPO_UNMANAGED) == 0) - VM_PAGE_OBJECT_BUSY_ASSERT(m); + if ((m->oflags & VPO_UNMANAGED) == 0) { + if ((flags & PMAP_ENTER_QUICK_LOCKED) == 0) + VM_PAGE_OBJECT_BUSY_ASSERT(m); + else + VM_OBJECT_ASSERT_LOCKED(m->object); + } PMAP_STATS_INC(pmap_nenter); pa = VM_PAGE_TO_PHYS(m); wired = (flags & PMAP_ENTER_WIRED) != 0; @@ -1649,7 +1653,8 @@ pmap_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end, PMAP_LOCK(pm); while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { pmap_enter_locked(pm, start + ptoa(diff), m, prot & - (VM_PROT_READ | VM_PROT_EXECUTE), 0, 0); + (VM_PROT_READ | VM_PROT_EXECUTE), + PMAP_ENTER_QUICK_LOCKED, 0); m = TAILQ_NEXT(m, listq); } rw_wunlock(&tte_list_global_lock); @@ -1663,7 +1668,7 @@ pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot) rw_wlock(&tte_list_global_lock); PMAP_LOCK(pm); pmap_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), - 0, 0); + PMAP_ENTER_QUICK_LOCKED, 0); rw_wunlock(&tte_list_global_lock); PMAP_UNLOCK(pm); } |