aboutsummaryrefslogtreecommitdiff
path: root/sys/sparc64/sparc64
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2019-10-16 21:07:18 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2019-10-16 21:07:18 +0000
commit96448820a3dab2b05694e7c42a72231c92ddadfb (patch)
tree13381b81648bb076e8f6b1cb3d622f36eba4890a /sys/sparc64/sparc64
parent1dc85563587263c6b3c7d04dfdcbdc17865b5e8b (diff)
downloadsrc-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.c13
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);
}