Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_map.c
Show First 20 Lines • Show All 337 Lines • ▼ Show 20 Lines | vmspace_alloc(vm_offset_t min, vm_offset_t max, pmap_pinit_t pinit) | ||||
vm->vm_shm = NULL; | vm->vm_shm = NULL; | ||||
vm->vm_swrss = 0; | vm->vm_swrss = 0; | ||||
vm->vm_tsize = 0; | vm->vm_tsize = 0; | ||||
vm->vm_dsize = 0; | vm->vm_dsize = 0; | ||||
vm->vm_ssize = 0; | vm->vm_ssize = 0; | ||||
vm->vm_taddr = 0; | vm->vm_taddr = 0; | ||||
vm->vm_daddr = 0; | vm->vm_daddr = 0; | ||||
vm->vm_maxsaddr = 0; | vm->vm_maxsaddr = 0; | ||||
vm->vm_stkgap = 0; | |||||
return (vm); | return (vm); | ||||
} | } | ||||
#ifdef RACCT | #ifdef RACCT | ||||
static void | static void | ||||
vmspace_container_reset(struct proc *p) | vmspace_container_reset(struct proc *p) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 3,904 Lines • ▼ Show 20 Lines | vmspace_fork(struct vmspace *vm1, vm_ooffset_t *fork_charge) | ||||
vm2 = vmspace_alloc(vm_map_min(old_map), vm_map_max(old_map), | vm2 = vmspace_alloc(vm_map_min(old_map), vm_map_max(old_map), | ||||
pmap_pinit); | pmap_pinit); | ||||
if (vm2 == NULL) | if (vm2 == NULL) | ||||
return (NULL); | return (NULL); | ||||
vm2->vm_taddr = vm1->vm_taddr; | vm2->vm_taddr = vm1->vm_taddr; | ||||
vm2->vm_daddr = vm1->vm_daddr; | vm2->vm_daddr = vm1->vm_daddr; | ||||
vm2->vm_maxsaddr = vm1->vm_maxsaddr; | vm2->vm_maxsaddr = vm1->vm_maxsaddr; | ||||
vm2->vm_stkgap = vm1->vm_stkgap; | |||||
vm_map_lock(old_map); | vm_map_lock(old_map); | ||||
if (old_map->busy) | if (old_map->busy) | ||||
vm_map_wait_busy(old_map); | vm_map_wait_busy(old_map); | ||||
new_map = &vm2->vm_map; | new_map = &vm2->vm_map; | ||||
locked = vm_map_trylock(new_map); /* trylock to silence WITNESS */ | locked = vm_map_trylock(new_map); /* trylock to silence WITNESS */ | ||||
KASSERT(locked, ("vmspace_fork: lock failed")); | KASSERT(locked, ("vmspace_fork: lock failed")); | ||||
error = pmap_vmspace_copy(new_map->pmap, old_map->pmap); | error = pmap_vmspace_copy(new_map->pmap, old_map->pmap); | ||||
if (error != 0) { | if (error != 0) { | ||||
sx_xunlock(&old_map->lock); | sx_xunlock(&old_map->lock); | ||||
sx_xunlock(&new_map->lock); | sx_xunlock(&new_map->lock); | ||||
vm_map_process_deferred(); | vm_map_process_deferred(); | ||||
vmspace_free(vm2); | vmspace_free(vm2); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
new_map->anon_loc = old_map->anon_loc; | new_map->anon_loc = old_map->anon_loc; | ||||
new_map->flags |= old_map->flags & (MAP_ASLR | MAP_ASLR_IGNSTART | | new_map->flags |= old_map->flags & (MAP_ASLR | MAP_ASLR_IGNSTART | | ||||
MAP_WXORX); | MAP_ASLR_STACK | MAP_WXORX); | ||||
VM_MAP_ENTRY_FOREACH(old_entry, old_map) { | VM_MAP_ENTRY_FOREACH(old_entry, old_map) { | ||||
if ((old_entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0) | if ((old_entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0) | ||||
panic("vm_map_fork: encountered a submap"); | panic("vm_map_fork: encountered a submap"); | ||||
inh = old_entry->inheritance; | inh = old_entry->inheritance; | ||||
if ((old_entry->eflags & MAP_ENTRY_GUARD) != 0 && | if ((old_entry->eflags & MAP_ENTRY_GUARD) != 0 && | ||||
inh != VM_INHERIT_NONE) | inh != VM_INHERIT_NONE) | ||||
▲ Show 20 Lines • Show All 1,077 Lines • Show Last 20 Lines |