summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-05-04 02:07:36 +0000
committeralc <alc@FreeBSD.org>2002-05-04 02:07:36 +0000
commitd44b3a12b358680e53f64b25052911a5ea76bcbc (patch)
treeb598d00ef2346fd48055b9b30c73a01d740eb7ac /sys
parent48ff9098aa9307bb2e8449b4f419c02a51884942 (diff)
downloadFreeBSD-src-d44b3a12b358680e53f64b25052911a5ea76bcbc.zip
FreeBSD-src-d44b3a12b358680e53f64b25052911a5ea76bcbc.tar.gz
o Remove GIANT_REQUIRED from vm_map_lookup_entry() and
vm_map_check_protection(). o Call vm_map_check_protection() without Giant held in munmap().
Diffstat (limited to 'sys')
-rw-r--r--sys/vm/vm_map.c3
-rw-r--r--sys/vm/vm_mmap.c7
2 files changed, 3 insertions, 7 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 982ef3f..8a7eebe 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -590,7 +590,6 @@ vm_map_lookup_entry(
vm_map_entry_t cur;
vm_map_entry_t last;
- GIANT_REQUIRED;
/*
* Start looking either from the head of the list, or from the hint.
*/
@@ -2148,8 +2147,6 @@ vm_map_check_protection(vm_map_t map, vm_offset_t start, vm_offset_t end,
vm_map_entry_t entry;
vm_map_entry_t tmp_entry;
- GIANT_REQUIRED;
-
vm_map_lock_read(map);
if (!vm_map_lookup_entry(map, start, &tmp_entry)) {
vm_map_unlock_read(map);
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 8b8b4f8..5b0edc8 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -607,16 +607,15 @@ munmap(td, uap)
if (VM_MIN_ADDRESS > 0 && addr < VM_MIN_ADDRESS)
return (EINVAL);
#endif
- mtx_lock(&Giant);
map = &td->td_proc->p_vmspace->vm_map;
/*
* Make sure entire range is allocated.
*/
- if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE)) {
- mtx_unlock(&Giant);
+ if (!vm_map_check_protection(map, addr, addr + size, VM_PROT_NONE))
return (EINVAL);
- }
+
/* returns nothing but KERN_SUCCESS anyway */
+ mtx_lock(&Giant);
(void) vm_map_remove(map, addr, addr + size);
mtx_unlock(&Giant);
return (0);
OpenPOWER on IntegriCloud