Index | Thread | Search

From:
Jonathan Gray <jsg@jsg.id.au>
Subject:
Re: Kill uvm_km_zalloc()
To:
tech@openbsd.org
Date:
Fri, 1 Nov 2024 23:24:49 +1100

Download raw body.

Thread
  • Martin Pieuchot:

    Kill uvm_km_zalloc()

    • Jonathan Gray:

      Kill uvm_km_zalloc()

On Fri, Nov 01, 2024 at 01:17:48PM +0100, Martin Pieuchot wrote:
> Now unused, ok to remove it?

ok jsg@

> 
> Index: uvm/uvm_extern.h
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_extern.h,v
> diff -u -p -r1.178 uvm_extern.h
> --- uvm/uvm_extern.h	8 Oct 2024 02:29:10 -0000	1.178
> +++ uvm/uvm_extern.h	1 Nov 2024 12:10:39 -0000
> @@ -286,9 +286,6 @@ int			uvm_io(vm_map_t, struct uio *, int
>  
>  #define	UVM_IO_FIXPROT	0x01
>  
> -#ifdef __i386__
> -vaddr_t			uvm_km_zalloc(vm_map_t, vsize_t);
> -#endif
>  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: uvm/uvm_km.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_km.c,v
> diff -u -p -r1.154 uvm_km.c
> --- uvm/uvm_km.c	24 Aug 2024 10:46:43 -0000	1.154
> +++ uvm/uvm_km.c	1 Nov 2024 12:10:45 -0000
> @@ -433,86 +433,6 @@ uvm_km_free(struct vm_map *map, vaddr_t 
>  	uvm_unmap(map, trunc_page(addr), round_page(addr+size));
>  }
>  
> -#ifdef __i386__
> -/*
> - * uvm_km_zalloc: allocate wired down memory in the kernel map.
> - *
> - * => we can sleep if needed
> - */
> -vaddr_t
> -uvm_km_zalloc(struct vm_map *map, vsize_t size)
> -{
> -	vaddr_t kva, loopva;
> -	voff_t offset;
> -	struct vm_page *pg;
> -
> -	KASSERT(vm_map_pmap(map) == pmap_kernel());
> -
> -	size = round_page(size);
> -	kva = vm_map_min(map);		/* hint */
> -
> -	/* allocate some virtual space */
> -	if (__predict_false(uvm_map(map, &kva, size, uvm.kernel_object,
> -	    UVM_UNKNOWN_OFFSET, 0,
> -	    UVM_MAPFLAG(PROT_READ | PROT_WRITE,
> -	    PROT_READ | PROT_WRITE | PROT_EXEC,
> -	    MAP_INHERIT_NONE, MADV_RANDOM, 0)) != 0)) {
> -		return 0;
> -	}
> -
> -	/* recover object offset from virtual address */
> -	offset = kva - vm_map_min(kernel_map);
> -
> -	/* now allocate the memory.  we must be careful about released pages. */
> -	loopva = kva;
> -	while (size) {
> -		rw_enter(uvm.kernel_object->vmobjlock, RW_WRITE);
> -		/* allocate ram */
> -		pg = uvm_pagealloc(uvm.kernel_object, offset, NULL, 0);
> -		if (pg) {
> -			atomic_clearbits_int(&pg->pg_flags, PG_BUSY);
> -			UVM_PAGE_OWN(pg, NULL);
> -		}
> -		rw_exit(uvm.kernel_object->vmobjlock);
> -		if (__predict_false(pg == NULL)) {
> -			if (curproc == uvm.pagedaemon_proc) {
> -				/*
> -				 * It is unfeasible for the page daemon to
> -				 * sleep for memory, so free what we have
> -				 * allocated and fail.
> -				 */
> -				uvm_unmap(map, kva, loopva - kva);
> -				return (0);
> -			} else {
> -				uvm_wait("km_zallocw");	/* wait for memory */
> -				continue;
> -			}
> -		}
> -
> -		/*
> -		 * map it in; note we're never called with an intrsafe
> -		 * object, so we always use regular old pmap_enter().
> -		 */
> -		pmap_enter(map->pmap, loopva, VM_PAGE_TO_PHYS(pg),
> -		    PROT_READ | PROT_WRITE,
> -		    PROT_READ | PROT_WRITE | PMAP_WIRED);
> -
> -		loopva += PAGE_SIZE;
> -		offset += PAGE_SIZE;
> -		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).
> -	 */
> -	memset((caddr_t)kva, 0, loopva - kva);
> -
> -	return kva;
> -}
> -#endif
> -
>  #if defined(__HAVE_PMAP_DIRECT)
>  /*
>   * uvm_km_page allocator, __HAVE_PMAP_DIRECT arch
> 
>