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