diff options
| -rw-r--r-- | sys/vm/vm_fault.c | 3 | ||||
| -rw-r--r-- | sys/vm/vm_map.c | 7 | ||||
| -rw-r--r-- | sys/vm/vm_mmap.c | 2 |
3 files changed, 5 insertions, 7 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 9cfe1cee4bb6..3e0edeb17417 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -979,12 +979,12 @@ vm_fault_unwire(map, start, end) vm_map_t map; vm_offset_t start, end; { - vm_offset_t va, pa; pmap_t pmap; pmap = vm_map_pmap(map); + mtx_lock(&Giant); /* * Since the pages are wired down, we must be able to get their * mappings from the physical map system. @@ -1003,6 +1003,7 @@ vm_fault_unwire(map, start, end) */ pmap_pageable(pmap, start, end, TRUE); + mtx_unlock(&Giant); } /* diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index a746d46317eb..983b3b1801f9 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -2041,8 +2041,6 @@ vm_map_delete(vm_map_t map, vm_offset_t start, vm_offset_t end) vm_map_entry_t entry; vm_map_entry_t first_entry; - GIANT_REQUIRED; - /* * Find the start of the region, and clip it */ @@ -2091,8 +2089,10 @@ vm_map_delete(vm_map_t map, vm_offset_t start, vm_offset_t end) offidxend = offidxstart + count; if ((object == kernel_object) || (object == kmem_object)) { + GIANT_REQUIRED; vm_object_page_remove(object, offidxstart, offidxend, FALSE); } else { + mtx_lock(&Giant); pmap_remove(map->pmap, s, e); if (object != NULL && object->ref_count != 1 && @@ -2108,6 +2108,7 @@ vm_map_delete(vm_map_t map, vm_offset_t start, vm_offset_t end) object->size = offidxstart; } } + mtx_unlock(&Giant); } /* @@ -2133,8 +2134,6 @@ vm_map_remove(vm_map_t map, vm_offset_t start, vm_offset_t end) { int result, s = 0; - GIANT_REQUIRED; - if (map == kmem_map) s = splvm(); diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 750ab07f7e27..c0033536212a 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -615,9 +615,7 @@ munmap(td, uap) return (EINVAL); /* returns nothing but KERN_SUCCESS anyway */ - mtx_lock(&Giant); (void) vm_map_remove(map, addr, addr + size); - mtx_unlock(&Giant); return (0); } |
