From f802b371c8f5e0ca89bbea8f197b5bec5763f78f Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Fri, 1 May 2020 02:43:20 +0200 Subject: kmem_alloc_wired: factorize with kmem_valloc * vm/vm_kern.c (kmem_alloc_wired): Factorize with kmem_valloc. --- vm/vm_kern.c | 52 +++------------------------------------------------- 1 file changed, 3 insertions(+), 49 deletions(-) diff --git a/vm/vm_kern.c b/vm/vm_kern.c index a7ec0c06..2e333ee1 100644 --- a/vm/vm_kern.c +++ b/vm/vm_kern.c @@ -501,7 +501,7 @@ retry: vm_map_unlock(map); /* - * Return the memory, not zeroed. + * Return the memory, not mapped. */ *addrp = addr; return KERN_SUCCESS; @@ -523,62 +523,16 @@ kmem_alloc_wired( vm_offset_t *addrp, vm_size_t size) { - vm_map_entry_t entry; vm_offset_t offset; vm_offset_t addr; - unsigned int attempts; kern_return_t kr; - /* - * Use the kernel object for wired-down kernel pages. - * Assume that no region of the kernel object is - * referenced more than once. We want vm_map_find_entry - * to extend an existing entry if possible. - */ - - size = round_page(size); - attempts = 0; - -retry: - vm_map_lock(map); - kr = vm_map_find_entry(map, &addr, size, (vm_offset_t) 0, - kernel_object, &entry); - if (kr != KERN_SUCCESS) { - vm_map_unlock(map); - - if (attempts == 0) { - attempts++; - slab_collect(); - goto retry; - } - - printf_once("no more room for kmem_alloc_wired in %p (%s)\n", - map, map->name); + kr = kmem_valloc(map, &addr, size); + if (kr != KERN_SUCCESS) return kr; - } - - /* - * Since we didn't know where the new region would - * start, we couldn't supply the correct offset into - * the kernel object. We only initialize the entry - * if we aren't extending an existing entry. - */ offset = addr - VM_MIN_KERNEL_ADDRESS; - if (entry->object.vm_object == VM_OBJECT_NULL) { - vm_object_reference(kernel_object); - - entry->object.vm_object = kernel_object; - entry->offset = offset; - } - - /* - * Since we have not given out this address yet, - * it is safe to unlock the map. - */ - vm_map_unlock(map); - /* * Allocate wired-down memory in the kernel_object, * for this entry, and enter it in the kernel pmap. -- cgit v1.2.3