summaryrefslogtreecommitdiff
path: root/sys/vm
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_fault.c4
-rw-r--r--sys/vm/vm_glue.c2
-rw-r--r--sys/vm/vm_map.c3
3 files changed, 4 insertions, 5 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index b6e8b521726d..16f8272c0e90 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1026,9 +1026,13 @@ vm_fault_wire(vm_map_t map, vm_offset_t start, vm_offset_t end,
* read-only sections.
*/
for (va = start; va < end; va += PAGE_SIZE) {
+ if (map->system_map)
+ mtx_lock(&Giant);
rv = vm_fault(map, va,
user_wire ? VM_PROT_READ : VM_PROT_READ | VM_PROT_WRITE,
user_wire ? VM_FAULT_USER_WIRE : VM_FAULT_CHANGE_WIRING);
+ if (map->system_map)
+ mtx_unlock(&Giant);
if (rv) {
if (va != start)
vm_fault_unwire(map, start, va, fictitious);
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 7893012f9c90..9d5fa42e1004 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -619,8 +619,6 @@ vm_forkproc(td, p2, td2, flags)
{
struct proc *p1 = td->td_proc;
- GIANT_REQUIRED;
-
if ((flags & RFPROC) == 0) {
/*
* Divorce the memory, if it is shared, essentially
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 2a486e8535d8..3788a4f119f1 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -2482,8 +2482,6 @@ vmspace_fork(struct vmspace *vm1)
vm_map_entry_t new_entry;
vm_object_t object;
- GIANT_REQUIRED;
-
vm_map_lock(old_map);
vm2 = vmspace_alloc(old_map->min_offset, old_map->max_offset);
@@ -2942,7 +2940,6 @@ vmspace_unshare(struct proc *p)
struct vmspace *oldvmspace = p->p_vmspace;
struct vmspace *newvmspace;
- GIANT_REQUIRED;
if (oldvmspace->vm_refcnt == 1)
return;
newvmspace = vmspace_fork(oldvmspace);