diff options
author | alc <alc@FreeBSD.org> | 2002-06-22 17:47:12 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-06-22 17:47:12 +0000 |
commit | 173c0403c2c177ab0ed44921e355b997ff2fe0e5 (patch) | |
tree | 6ba3f38c51cab8d361a724fdc17e39f1cc5c219b /sys/vm/vm_map.c | |
parent | 2fb4e582b39b7a2597926a2cb6c7f333f8d8d59e (diff) | |
download | FreeBSD-src-173c0403c2c177ab0ed44921e355b997ff2fe0e5.zip FreeBSD-src-173c0403c2c177ab0ed44921e355b997ff2fe0e5.tar.gz |
o In vm_map_insert(), replace GIANT_REQUIRED by the acquisition and
release of Giant around the direct manipulation of the vm_object and
the optional call to pmap_object_init_pt().
o In vm_map_findspace(), remove GIANT_REQUIRED. Instead, acquire and
release Giant around the occasional call to pmap_growkernel().
o In vm_map_find(), remove GIANT_REQUIRED.
Diffstat (limited to 'sys/vm/vm_map.c')
-rw-r--r-- | sys/vm/vm_map.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index da332a4..656858e 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -751,15 +751,16 @@ vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset, protoeflags |= MAP_ENTRY_NOCOREDUMP; if (object) { - GIANT_REQUIRED; /* * When object is non-NULL, it could be shared with another * process. We have to set or clear OBJ_ONEMAPPING * appropriately. */ + mtx_lock(&Giant); if ((object->ref_count > 1) || (object->shadow_count != 0)) { vm_object_clear_flag(object, OBJ_ONEMAPPING); } + mtx_unlock(&Giant); } else if ((prev_entry != &map->header) && (prev_entry->eflags == protoeflags) && @@ -846,10 +847,11 @@ vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset, #endif if (cow & (MAP_PREFAULT|MAP_PREFAULT_PARTIAL)) { - GIANT_REQUIRED; + mtx_lock(&Giant); pmap_object_init_pt(map->pmap, start, object, OFF_TO_IDX(offset), end - start, cow & MAP_PREFAULT_PARTIAL); + mtx_unlock(&Giant); } return (KERN_SUCCESS); @@ -869,7 +871,6 @@ vm_map_findspace( vm_map_entry_t entry, next; vm_offset_t end; - GIANT_REQUIRED; if (start < map->min_offset) start = map->min_offset; if (start > map->max_offset) @@ -913,7 +914,9 @@ vm_map_findspace( if (map == kernel_map) { vm_offset_t ksize; if ((ksize = round_page(start + length)) > kernel_vm_end) { + mtx_lock(&Giant); pmap_growkernel(ksize); + mtx_unlock(&Giant); } } return (0); @@ -937,8 +940,6 @@ vm_map_find(vm_map_t map, vm_object_t object, vm_ooffset_t offset, vm_offset_t start; int result, s = 0; - GIANT_REQUIRED; - start = *addr; if (map == kmem_map) |