vm_map_t *vm_map_new(void) { vm_map_t *map = kmalloc(M_VMMAP, sizeof(vm_map_t), M_ZERO); vm_map_setup(map); *((pmap_t **)&map->pmap) = pmap_new(); return map; }
void kmem_submap( vm_map_t map, vm_map_t parent, vm_offset_t *min, vm_offset_t *max, vm_size_t size, boolean_t pageable) { vm_offset_t addr; kern_return_t kr; size = round_page(size); /* * Need reference on submap object because it is internal * to the vm_system. vm_object_enter will never be called * on it (usual source of reference for vm_map_enter). */ vm_object_reference(vm_submap_object); addr = vm_map_min(parent); kr = vm_map_enter(parent, &addr, size, (vm_offset_t) 0, TRUE, vm_submap_object, (vm_offset_t) 0, FALSE, VM_PROT_DEFAULT, VM_PROT_ALL, VM_INHERIT_DEFAULT); if (kr != KERN_SUCCESS) panic("kmem_submap"); pmap_reference(vm_map_pmap(parent)); vm_map_setup(map, vm_map_pmap(parent), addr, addr + size, pageable); kr = vm_map_submap(parent, addr, addr + size, map); if (kr != KERN_SUCCESS) panic("kmem_submap"); *min = addr; *max = addr + size; }
/* * kmem_init: * * Initialize the kernel's virtual memory map, taking * into account all memory allocated up to this time. */ void kmem_init( vm_offset_t start, vm_offset_t end) { vm_map_setup(kernel_map, pmap_kernel(), VM_MIN_KERNEL_ADDRESS, end, FALSE); /* * Reserve virtual memory allocated up to this time. */ if (start != VM_MIN_KERNEL_ADDRESS) { kern_return_t rc; vm_offset_t addr = VM_MIN_KERNEL_ADDRESS; rc = vm_map_enter(kernel_map, &addr, start - VM_MIN_KERNEL_ADDRESS, (vm_offset_t) 0, TRUE, VM_OBJECT_NULL, (vm_offset_t) 0, FALSE, VM_PROT_DEFAULT, VM_PROT_ALL, VM_INHERIT_DEFAULT); if (rc) panic("%s:%d: vm_map_enter failed (%d)\n", rc); } }
static void vm_map_init(void) { vm_map_setup(&kspace); *((pmap_t **)(&kspace.pmap)) = get_kernel_pmap(); }