Page MenuHomeFreeBSD

D22056.id63355.diff
No OneTemporary

D22056.id63355.diff

Index: sys/sparc64/include/pmap.h
===================================================================
--- sys/sparc64/include/pmap.h
+++ sys/sparc64/include/pmap.h
@@ -50,6 +50,7 @@
#include <machine/tte.h>
#define PMAP_CONTEXT_MAX 8192
+#define PMAP_ENTER_QUICK_LOCKED 0x10000000
typedef struct pmap *pmap_t;
Index: sys/sparc64/sparc64/pmap.c
===================================================================
--- sys/sparc64/sparc64/pmap.c
+++ sys/sparc64/sparc64/pmap.c
@@ -1500,8 +1500,12 @@
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_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 @@
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);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 2, 3:46 PM (11 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30712535
Default Alt Text
D22056.id63355.diff (1 KB)

Event Timeline