diff options
author | 2009-02-11 11:09:36 +0000 | |
---|---|---|
committer | 2009-02-11 11:09:36 +0000 | |
commit | a5c9056f8bcdd7121dd875e7afd3ee9b0032b832 (patch) | |
tree | 913600c548293ec930ac68b3e641e016921c91ff | |
parent | - add a missing break (diff) | |
download | wireguard-openbsd-a5c9056f8bcdd7121dd875e7afd3ee9b0032b832.tar.xz wireguard-openbsd-a5c9056f8bcdd7121dd875e7afd3ee9b0032b832.zip |
Remove uvm_km_alloc_poolpage1 as it serves no particular purpose
now and valid for __HAVE_PMAP_DIRECT archs only, though implements
both code paths.
Put it's code directly into the uvm_km_getpage for PMAP_DIRECT archs.
No functional change.
ok tedu, art
-rw-r--r-- | sys/uvm/uvm_extern.h | 6 | ||||
-rw-r--r-- | sys/uvm/uvm_km.c | 101 |
2 files changed, 18 insertions, 89 deletions
diff --git a/sys/uvm/uvm_extern.h b/sys/uvm/uvm_extern.h index a8a6d24ac9a..2ec3f3431da 100644 --- a/sys/uvm/uvm_extern.h +++ b/sys/uvm/uvm_extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_extern.h,v 1.72 2008/11/04 21:37:06 deraadt Exp $ */ +/* $OpenBSD: uvm_extern.h,v 1.73 2009/02/11 11:09:36 mikeb Exp $ */ /* $NetBSD: uvm_extern.h,v 1.57 2001/03/09 01:02:12 chs Exp $ */ /* @@ -501,10 +501,6 @@ vaddr_t uvm_km_valloc_align(vm_map_t, vsize_t, vsize_t); vaddr_t uvm_km_valloc_wait(vm_map_t, vsize_t); vaddr_t uvm_km_valloc_prefer_wait(vm_map_t, vsize_t, voff_t); -vaddr_t uvm_km_alloc_poolpage1(vm_map_t, - struct uvm_object *, boolean_t); -void uvm_km_free_poolpage1(vm_map_t, vaddr_t); - void *uvm_km_getpage(boolean_t, int *); void uvm_km_putpage(void *); diff --git a/sys/uvm/uvm_km.c b/sys/uvm/uvm_km.c index c0b99379e1f..e0eb7dbe2e0 100644 --- a/sys/uvm/uvm_km.c +++ b/sys/uvm/uvm_km.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_km.c,v 1.68 2008/10/23 23:54:02 tedu Exp $ */ +/* $OpenBSD: uvm_km.c,v 1.69 2009/02/11 11:09:36 mikeb Exp $ */ /* $NetBSD: uvm_km.c,v 1.42 2001/01/14 02:10:01 thorpej Exp $ */ /* @@ -664,86 +664,6 @@ uvm_km_valloc_wait(struct vm_map *map, vsize_t size) return uvm_km_valloc_prefer_wait(map, size, UVM_UNKNOWN_OFFSET); } -/* - * uvm_km_alloc_poolpage: allocate a page for the pool allocator - * - * => if the pmap specifies an alternate mapping method, we use it. - */ - -/* ARGSUSED */ -vaddr_t -uvm_km_alloc_poolpage1(struct vm_map *map, struct uvm_object *obj, - boolean_t waitok) -{ -#if defined(__HAVE_PMAP_DIRECT) - struct vm_page *pg; - vaddr_t va; - - again: - pg = uvm_pagealloc(NULL, 0, NULL, UVM_PGA_USERESERVE); - if (__predict_false(pg == NULL)) { - if (waitok) { - uvm_wait("plpg"); - goto again; - } else - return (0); - } - va = pmap_map_direct(pg); - if (__predict_false(va == 0)) - uvm_pagefree(pg); - return (va); -#else - vaddr_t va; - int s; - - /* - * NOTE: We may be called with a map that doesn't require splvm - * protection (e.g. kernel_map). However, it does not hurt to - * go to splvm in this case (since unprotected maps will never be - * accessed in interrupt context). - * - * XXX We may want to consider changing the interface to this - * XXX function. - */ - - s = splvm(); - va = uvm_km_kmemalloc(map, obj, PAGE_SIZE, waitok ? 0 : UVM_KMF_NOWAIT); - splx(s); - return (va); -#endif /* __HAVE_PMAP_DIRECT */ -} - -/* - * uvm_km_free_poolpage: free a previously allocated pool page - * - * => if the pmap specifies an alternate unmapping method, we use it. - */ - -/* ARGSUSED */ -void -uvm_km_free_poolpage1(struct vm_map *map, vaddr_t addr) -{ -#if defined(__HAVE_PMAP_DIRECT) - uvm_pagefree(pmap_unmap_direct(addr)); -#else - int s; - - /* - * NOTE: We may be called with a map that doesn't require splvm - * protection (e.g. kernel_map). However, it does not hurt to - * go to splvm in this case (since unprocted maps will never be - * accessed in interrupt context). - * - * XXX We may want to consider changing the interface to this - * XXX function. - */ - - s = splvm(); - uvm_km_free(map, addr, PAGE_SIZE); - splx(s); -#endif /* __HAVE_PMAP_DIRECT */ -} - int uvm_km_pages_free; /* number of pages currently on free list */ #if defined(__HAVE_PMAP_DIRECT) @@ -762,16 +682,29 @@ uvm_km_page_init(void) void * uvm_km_getpage(boolean_t waitok, int *slowdown) { + struct vm_page *pg; + vaddr_t va; *slowdown = 0; - return ((void *)uvm_km_alloc_poolpage1(NULL, NULL, waitok)); + again: + pg = uvm_pagealloc(NULL, 0, NULL, UVM_PGA_USERESERVE); + if (__predict_false(pg == NULL)) { + if (waitok) { + uvm_wait("plpg"); + goto again; + } else + return (NULL); + } + va = pmap_map_direct(pg); + if (__predict_false(va == 0)) + uvm_pagefree(pg); + return ((void *)va); } void uvm_km_putpage(void *v) { - - uvm_km_free_poolpage1(NULL, (vaddr_t)v); + uvm_pagefree(pmap_unmap_direct((vaddr_t)v)); } #else |