xref: /freebsd/sys/riscv/riscv/uma_machdep.c (revision fdafd315)
128029b68SRuslan Bukin /*-
228029b68SRuslan Bukin  * Copyright (c) 2003 Alan L. Cox <alc@cs.rice.edu>
328029b68SRuslan Bukin  * All rights reserved.
428029b68SRuslan Bukin  *
528029b68SRuslan Bukin  * Redistribution and use in source and binary forms, with or without
628029b68SRuslan Bukin  * modification, are permitted provided that the following conditions
728029b68SRuslan Bukin  * are met:
828029b68SRuslan Bukin  * 1. Redistributions of source code must retain the above copyright
928029b68SRuslan Bukin  *    notice, this list of conditions and the following disclaimer.
1028029b68SRuslan Bukin  * 2. Redistributions in binary form must reproduce the above copyright
1128029b68SRuslan Bukin  *    notice, this list of conditions and the following disclaimer in the
1228029b68SRuslan Bukin  *    documentation and/or other materials provided with the distribution.
1328029b68SRuslan Bukin  *
1428029b68SRuslan Bukin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1528029b68SRuslan Bukin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1628029b68SRuslan Bukin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1728029b68SRuslan Bukin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1828029b68SRuslan Bukin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1928029b68SRuslan Bukin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2028029b68SRuslan Bukin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2128029b68SRuslan Bukin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2228029b68SRuslan Bukin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2328029b68SRuslan Bukin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2428029b68SRuslan Bukin  * SUCH DAMAGE.
2528029b68SRuslan Bukin  */
2628029b68SRuslan Bukin 
2728029b68SRuslan Bukin #include <sys/param.h>
2828029b68SRuslan Bukin #include <sys/malloc.h>
2928029b68SRuslan Bukin #include <vm/vm.h>
306f3b523cSKonstantin Belousov #include <vm/vm_param.h>
3128029b68SRuslan Bukin #include <vm/vm_page.h>
3231991a5aSMitchell Horne #include <vm/vm_phys.h>
336f3b523cSKonstantin Belousov #include <vm/vm_dumpset.h>
3428029b68SRuslan Bukin #include <vm/uma.h>
3528029b68SRuslan Bukin #include <vm/uma_int.h>
3628029b68SRuslan Bukin 
3728029b68SRuslan Bukin void *
uma_small_alloc(uma_zone_t zone,vm_size_t bytes,int domain,u_int8_t * flags,int wait)38ab3185d1SJeff Roberson uma_small_alloc(uma_zone_t zone, vm_size_t bytes, int domain, u_int8_t *flags,
39ab3185d1SJeff Roberson     int wait)
4028029b68SRuslan Bukin {
416371d0bdSRuslan Bukin 	vm_page_t m;
426371d0bdSRuslan Bukin 	vm_paddr_t pa;
436371d0bdSRuslan Bukin 	void *va;
4428029b68SRuslan Bukin 
456371d0bdSRuslan Bukin 	*flags = UMA_SLAB_PRIV;
46a4667e09SMark Johnston 	m = vm_page_alloc_noobj_domain(domain, malloc2vm_flags(wait) |
47a4667e09SMark Johnston 	    VM_ALLOC_WIRED);
486371d0bdSRuslan Bukin 	if (m == NULL)
496371d0bdSRuslan Bukin 		return (NULL);
506371d0bdSRuslan Bukin 	pa = m->phys_addr;
516371d0bdSRuslan Bukin 	if ((wait & M_NODUMP) == 0)
526371d0bdSRuslan Bukin 		dump_add_page(pa);
536371d0bdSRuslan Bukin 	va = (void *)PHYS_TO_DMAP(pa);
546371d0bdSRuslan Bukin 	return (va);
5528029b68SRuslan Bukin }
5628029b68SRuslan Bukin 
5728029b68SRuslan Bukin void
uma_small_free(void * mem,vm_size_t size,u_int8_t flags)5828029b68SRuslan Bukin uma_small_free(void *mem, vm_size_t size, u_int8_t flags)
5928029b68SRuslan Bukin {
606371d0bdSRuslan Bukin 	vm_page_t m;
616371d0bdSRuslan Bukin 	vm_paddr_t pa;
6228029b68SRuslan Bukin 
636371d0bdSRuslan Bukin 	pa = DMAP_TO_PHYS((vm_offset_t)mem);
646371d0bdSRuslan Bukin 	dump_drop_page(pa);
656371d0bdSRuslan Bukin 	m = PHYS_TO_VM_PAGE(pa);
666371d0bdSRuslan Bukin 	vm_page_unwire_noq(m);
676371d0bdSRuslan Bukin 	vm_page_free(m);
6828029b68SRuslan Bukin }
69