From: Philip Guenther Subject: Re: Kill uvm_km_alloc(9) & co To: tech@openbsd.org Date: Fri, 23 Aug 2024 23:44:24 -0700 Can we slap an #ifdef __i386 around the uvm_km_zalloc() declaration and definition, so they don't come back elsewhere? ok guenther@ regardless On Fri, Aug 23, 2024 at 8:13 AM Martin Pieuchot wrote: > > Remove definitions for uvm_km_alloc(9) and uvm_km_alloc1(9). Leave > uvm_km_zalloc(9) around for now. It is only used by i386's pmap. > > Remove documentation for no longer existing or mostly unused allocators. > > ok? > > Index: sys/uvm/uvm_extern.h > =================================================================== > RCS file: /cvs/src/sys/uvm/uvm_extern.h,v > diff -u -p -r1.175 uvm_extern.h > --- sys/uvm/uvm_extern.h 24 Jul 2024 12:17:31 -0000 1.175 > +++ sys/uvm/uvm_extern.h 21 Aug 2024 09:46:19 -0000 > @@ -256,10 +256,6 @@ extern struct vm_map *phys_map; > /* base of kernel virtual memory */ > extern vaddr_t vm_min_kernel_address; > > -/* zalloc zeros memory, alloc does not */ > -#define uvm_km_zalloc(MAP,SIZE) uvm_km_alloc1(MAP,SIZE,0,TRUE) > -#define uvm_km_alloc(MAP,SIZE) uvm_km_alloc1(MAP,SIZE,0,FALSE) > - > #define vm_resident_count(vm) (pmap_resident_count((vm)->vm_map.pmap)) > > struct plimit; > @@ -291,7 +287,7 @@ int uvm_io(vm_map_t, struct uio *, int > > #define UVM_IO_FIXPROT 0x01 > > -vaddr_t uvm_km_alloc1(vm_map_t, vsize_t, vsize_t, boolean_t); > +vaddr_t uvm_km_zalloc(vm_map_t, vsize_t, vsize_t); > void uvm_km_free(vm_map_t, vaddr_t, vsize_t); > vaddr_t uvm_km_kmemalloc_pla(struct vm_map *, > struct uvm_object *, vsize_t, vsize_t, int, > Index: sys/uvm/uvm_km.c > =================================================================== > RCS file: /cvs/src/sys/uvm/uvm_km.c,v > diff -u -p -r1.152 uvm_km.c > --- sys/uvm/uvm_km.c 27 Mar 2024 15:41:40 -0000 1.152 > +++ sys/uvm/uvm_km.c 21 Aug 2024 09:53:48 -0000 > @@ -117,10 +117,10 @@ > * address minus the vm_map_min(kernel_map). > * example: > * suppose kernel_map starts at 0xf8000000 and the kernel does a > - * uvm_km_alloc(kernel_map, PAGE_SIZE) [allocate 1 wired down page in the > - * kernel map]. if uvm_km_alloc returns virtual address 0xf8235000, > - * then that means that the page at offset 0x235000 in kernel_object is > - * mapped at 0xf8235000. > + * km_alloc(PAGE_SIZE, &kv_any, &kp_none, &kd_waitok)) [allocate 1 wired > + * down page in the kernel map]. if km_alloc() returns virtual address > + * 0xf8235000, then that means that the page at offset 0x235000 in > + * kernel_object is mapped at 0xf8235000. > * > * kernel objects have one other special property: when the kernel virtual > * memory mapping them is unmapped, the backing memory in the object is > @@ -434,12 +434,12 @@ uvm_km_free(struct vm_map *map, vaddr_t > } > > /* > - * uvm_km_alloc1: allocate wired down memory in the kernel map. > + * uvm_km_zalloc: allocate wired down memory in the kernel map. > * > * => we can sleep if needed > */ > vaddr_t > -uvm_km_alloc1(struct vm_map *map, vsize_t size, vsize_t align, boolean_t zeroit) > +uvm_km_zalloc(struct vm_map *map, vsize_t size, vsize_t align) > { > vaddr_t kva, loopva; > voff_t offset; > @@ -483,7 +483,7 @@ uvm_km_alloc1(struct vm_map *map, vsize_ > uvm_unmap(map, kva, loopva - kva); > return (0); > } else { > - uvm_wait("km_alloc1w"); /* wait for memory */ > + uvm_wait("km_zallocw"); /* wait for memory */ > continue; > } > } > @@ -501,13 +501,12 @@ uvm_km_alloc1(struct vm_map *map, vsize_ > size -= PAGE_SIZE; > } > pmap_update(map->pmap); > - > + > /* > * zero on request (note that "size" is now zero due to the above loop > * so we need to subtract kva from loopva to reconstruct the size). > */ > - if (zeroit) > - memset((caddr_t)kva, 0, loopva - kva); > + memset((caddr_t)kva, 0, loopva - kva); > > return kva; > } > Index: share/man/man9/uvm_km_alloc.9 > =================================================================== > RCS file: /cvs/src/share/man/man9/uvm_km_alloc.9,v > diff -u -p -r1.2 uvm_km_alloc.9 > --- share/man/man9/uvm_km_alloc.9 5 Dec 2019 15:58:27 -0000 1.2 > +++ share/man/man9/uvm_km_alloc.9 23 Aug 2024 15:05:51 -0000 > @@ -26,103 +26,20 @@ > .\" SUCH DAMAGE. > .\" > .Dd $Mdocdate: December 5 2019 $ > -.Dt UVM_KM_ALLOC 9 > +.Dt UVM_KM_SUBALLOC 9 > .Os > .Sh NAME > -.Nm uvm_km_alloc , > -.Nm uvm_km_zalloc , > -.Nm uvm_km_alloc1 , > -.Nm uvm_km_kmemalloc , > -.Nm uvm_km_valloc , > -.Nm uvm_km_valloc_wait , > .Nm uvm_km_suballoc , > -.Nm uvm_km_free , > -.Nm uvm_km_free_wakeup > +.Nm uvm_km_free > .Nd raw kernel memory or address space allocator > .Sh SYNOPSIS > .In sys/param.h > .In uvm/uvm.h > -.Ft vaddr_t > -.Fn uvm_km_alloc "vm_map_t map" "vsize_t size" > -.Ft vaddr_t > -.Fn uvm_km_zalloc "vm_map_t map" "vsize_t size" > -.Ft vaddr_t > -.Fn uvm_km_alloc1 "vm_map_t map" "vsize_t size" "vsize_t align" "boolean_t zeroit" > -.Ft vaddr_t > -.Fn uvm_km_kmemalloc "vm_map_t map" "struct uvm_object *obj" "vsize_t size" "int flags" > -.Ft vaddr_t > -.Fn uvm_km_valloc "vm_map_t map" "vsize_t size" > -.Ft vaddr_t > -.Fn uvm_km_valloc_wait "vm_map_t map" "vsize_t size" > -.Ft struct vm_map * > .Fn uvm_km_suballoc "vm_map_t map" "vaddr_t *min" "vaddr_t *max " "vsize_t size" "int flags" "boolean_t fixed" "vm_map_t submap" > .Ft void > .Fn uvm_km_free "vm_map_t map" "vaddr_t addr" "vsize_t size" > -.Ft void > -.Fn uvm_km_free_wakeup "vm_map_t map" "vaddr_t addr" "vsize_t size" > .Sh DESCRIPTION > The > -.Fn uvm_km_alloc > -and > -.Fn uvm_km_zalloc > -functions allocate > -.Fa size > -bytes of wired kernel memory in map > -.Fa map . > -In addition to allocation, > -.Fn uvm_km_zalloc > -zeros the memory. > -Both of these functions are defined as macros in terms of > -.Fn uvm_km_alloc1 , > -and should almost always be used in preference to > -.Fn uvm_km_alloc1 . > -.Pp > -The > -.Fn uvm_km_alloc1 > -function allocates and returns > -.Fa size > -bytes of wired memory in the kernel map aligned to the > -.Fa align > -boundary, zeroing the memory if the > -.Fa zeroit > -argument is non-zero. > -.Pp > -The > -.Fn uvm_km_kmemalloc > -function allocates and returns > -.Fa size > -bytes of wired kernel memory into > -.Fa obj . > -The flags can be any of: > -.Bd -literal > -#define UVM_KMF_NOWAIT 0x1 /* matches M_NOWAIT */ > -#define UVM_KMF_VALLOC 0x2 /* allocate VA only */ > -#define UVM_KMF_TRYLOCK UVM_FLAG_TRYLOCK /* try locking only */ > -.Ed > -.Pp > -The > -.Dv UVM_KMF_NOWAIT > -flag causes > -.Fn uvm_km_kmemalloc > -to return immediately if no memory is available. > -.Dv UVM_KMF_VALLOC > -causes no pages to be allocated, only a virtual address. > -.Dv UVM_KMF_TRYLOCK > -causes > -.Fn uvm_km_kmemalloc > -to only try and not sleep when locking maps. > -.Pp > -The > -.Fn uvm_km_valloc > -and > -.Fn uvm_km_valloc_wait > -functions return a newly allocated zero-filled address in the kernel map of size > -.Fa size . > -.Fn uvm_km_valloc_wait > -will also wait for kernel memory to become available, if there is a > -memory shortage. > -.Pp > -The > .Fn uvm_km_suballoc > function allocates submap (with the specified > .Fa flags , > @@ -150,15 +67,9 @@ and > .Pp > The > .Fn uvm_km_free > -and > -.Fn uvm_km_free_wakeup > -functions free > +function free > .Fa size > bytes of memory in the kernel map, starting at address > .Fa addr . > -.Fn uvm_km_free_wakeup > -calls > -.Fn wakeup > -on the map before unlocking the map. > .Sh SEE ALSO > .Xr km_alloc 9 > Index: share/man/man9/uvm_pagealloc.9 > =================================================================== > RCS file: /cvs/src/share/man/man9/uvm_pagealloc.9,v > diff -u -p -r1.2 uvm_pagealloc.9 > --- share/man/man9/uvm_pagealloc.9 5 Dec 2019 15:58:27 -0000 1.2 > +++ share/man/man9/uvm_pagealloc.9 21 Aug 2024 09:47:43 -0000 > @@ -164,6 +164,3 @@ and > .Fa end > of the physical addresses of the segment, and the available start and end > addresses of pages not already in use. > -.\" XXX expand on "system boot time"! > -.Sh SEE ALSO > -.Xr uvm_km_alloc 9 >