diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-05-01 02:43:20 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-05-01 02:43:20 +0200 |
commit | f802b371c8f5e0ca89bbea8f197b5bec5763f78f (patch) | |
tree | ec5692ecc2f5a3099193081e2aea0b2d7d31a642 /vm/vm_kern.c | |
parent | ded813a44263103a28e1788489ec0fef7e8d1c7e (diff) | |
download | gnumach-f802b371c8f5e0ca89bbea8f197b5bec5763f78f.tar.gz gnumach-f802b371c8f5e0ca89bbea8f197b5bec5763f78f.tar.bz2 gnumach-f802b371c8f5e0ca89bbea8f197b5bec5763f78f.zip |
kmem_alloc_wired: factorize with kmem_valloc
* vm/vm_kern.c (kmem_alloc_wired): Factorize with kmem_valloc.
Diffstat (limited to 'vm/vm_kern.c')
-rw-r--r-- | vm/vm_kern.c | 52 |
1 files 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. |