diff options
author | alc <alc@FreeBSD.org> | 2003-04-22 05:36:14 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-22 05:36:14 +0000 |
commit | 3b5c40ed838f99688036844aab9688b2f355c1c1 (patch) | |
tree | 6fdb11ca214089e3b1cdb4d1bf5d81c036ced927 /sys/vm/vm_page.c | |
parent | d20f3763cbc6290001c6e0495c68f9e1e77c4da3 (diff) | |
download | FreeBSD-src-3b5c40ed838f99688036844aab9688b2f355c1c1.zip FreeBSD-src-3b5c40ed838f99688036844aab9688b2f355c1c1.tar.gz |
Revision 1.52 of vm/uma_core.c has led to UMA's obj_alloc() being
called without Giant; and obj_alloc() in turn calls vm_page_alloc()
without Giant. This causes an assertion failure in vm_page_alloc().
Fortunately, obj_alloc() is now MPSAFE. So, we need only clean up
some assertions.
- Weaken the assertion in vm_page_lookup() to require Giant only
if the vm_object isn't locked.
- Remove an assertion from vm_page_alloc() that duplicates a check
performed in vm_page_lookup().
In collaboration with: gallatin, jake, jeff
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r-- | sys/vm/vm_page.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index a0d7744..8ce52ab 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -652,7 +652,8 @@ vm_page_lookup(vm_object_t object, vm_pindex_t pindex) { vm_page_t m; - mtx_assert(object == kmem_object ? &object->mtx : &Giant, MA_OWNED); + if (!VM_OBJECT_LOCKED(object)) + GIANT_REQUIRED; m = vm_page_splay(pindex, object->root); if ((object->root = m) != NULL && m->pindex != pindex) m = NULL; @@ -770,8 +771,6 @@ vm_page_alloc(vm_object_t object, vm_pindex_t pindex, int req) if ((req & VM_ALLOC_NOOBJ) == 0) { KASSERT(object != NULL, ("vm_page_alloc: NULL object.")); - mtx_assert(object == kmem_object ? &object->mtx : &Giant, - MA_OWNED); KASSERT(!vm_page_lookup(object, pindex), ("vm_page_alloc: page already allocated")); color = pindex + object->pg_color; |