Index | Thread | Search

From:
Philip Guenther <guenther@gmail.com>
Subject:
Re: Kill uvm_km_alloc(9) & co
To:
tech@openbsd.org
Date:
Fri, 23 Aug 2024 23:44:24 -0700

Download raw body.

Thread
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 <mpi@openbsd.org> 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
>