o Replace GIANT_REQUIRED in vm_object_coalesce() by the acquisition and

release of Giant.
 o Reduce the scope of GIANT_REQUIRED in vm_map_insert().

These changes will enable us to remove the acquisition and release
of Giant from obreak().
This commit is contained in:
Alan Cox 2002-06-19 06:02:03 +00:00
parent a323cdf035
commit 00e1854a1f
2 changed files with 10 additions and 8 deletions

View File

@ -711,8 +711,6 @@ vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset,
vm_map_entry_t temp_entry; vm_map_entry_t temp_entry;
vm_eflags_t protoeflags; vm_eflags_t protoeflags;
GIANT_REQUIRED;
/* /*
* Check that the start and end points are not bogus. * Check that the start and end points are not bogus.
*/ */
@ -753,6 +751,7 @@ vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset,
protoeflags |= MAP_ENTRY_NOCOREDUMP; protoeflags |= MAP_ENTRY_NOCOREDUMP;
if (object) { if (object) {
GIANT_REQUIRED;
/* /*
* When object is non-NULL, it could be shared with another * When object is non-NULL, it could be shared with another
* process. We have to set or clear OBJ_ONEMAPPING * process. We have to set or clear OBJ_ONEMAPPING
@ -847,6 +846,7 @@ vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset,
#endif #endif
if (cow & (MAP_PREFAULT|MAP_PREFAULT_PARTIAL)) { if (cow & (MAP_PREFAULT|MAP_PREFAULT_PARTIAL)) {
GIANT_REQUIRED;
pmap_object_init_pt(map->pmap, start, pmap_object_init_pt(map->pmap, start,
object, OFF_TO_IDX(offset), end - start, object, OFF_TO_IDX(offset), end - start,
cow & MAP_PREFAULT_PARTIAL); cow & MAP_PREFAULT_PARTIAL);

View File

@ -1813,18 +1813,17 @@ again:
* The object must *not* be locked. * The object must *not* be locked.
*/ */
boolean_t boolean_t
vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t prev_size, vm_size_t next_size) vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex,
vm_size_t prev_size, vm_size_t next_size)
{ {
vm_pindex_t next_pindex; vm_pindex_t next_pindex;
GIANT_REQUIRED; if (prev_object == NULL)
if (prev_object == NULL) {
return (TRUE); return (TRUE);
} mtx_lock(&Giant);
if (prev_object->type != OBJT_DEFAULT && if (prev_object->type != OBJT_DEFAULT &&
prev_object->type != OBJT_SWAP) { prev_object->type != OBJT_SWAP) {
mtx_unlock(&Giant);
return (FALSE); return (FALSE);
} }
@ -1839,6 +1838,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
* pages not mapped to prev_entry may be in use anyway) * pages not mapped to prev_entry may be in use anyway)
*/ */
if (prev_object->backing_object != NULL) { if (prev_object->backing_object != NULL) {
mtx_unlock(&Giant);
return (FALSE); return (FALSE);
} }
@ -1848,6 +1848,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
if ((prev_object->ref_count > 1) && if ((prev_object->ref_count > 1) &&
(prev_object->size != next_pindex)) { (prev_object->size != next_pindex)) {
mtx_unlock(&Giant);
return (FALSE); return (FALSE);
} }
@ -1870,6 +1871,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
if (next_pindex + next_size > prev_object->size) if (next_pindex + next_size > prev_object->size)
prev_object->size = next_pindex + next_size; prev_object->size = next_pindex + next_size;
mtx_unlock(&Giant);
return (TRUE); return (TRUE);
} }