Page MenuHomeFreeBSD

D16845.id47102.diff
No OneTemporary

D16845.id47102.diff

Index: amd64/amd64/sys_machdep.c
===================================================================
--- amd64/amd64/sys_machdep.c
+++ amd64/amd64/sys_machdep.c
@@ -479,7 +479,7 @@
pldt = mdp->md_ldt;
if (pldt != NULL && !force) {
pmap_pti_remove_kva(sva, sva + sz);
- kmem_free(kernel_arena, sva, sz);
+ kmem_free(sva, sz, 0);
free(new_ldt, M_SUBPROC);
return (pldt);
}
@@ -533,7 +533,7 @@
sva = (vm_offset_t)pldt->ldt_base;
sz = max_ldt_segment * sizeof(struct user_segment_descriptor);
pmap_pti_remove_kva(sva, sva + sz);
- kmem_free(kernel_arena, sva, sz);
+ kmem_free(sva, sz, 0);
free(pldt, M_SUBPROC);
}
}
Index: amd64/amd64/vm_machdep.c
===================================================================
--- amd64/amd64/vm_machdep.c
+++ amd64/amd64/vm_machdep.c
@@ -331,8 +331,7 @@
if (pcb->pcb_tssp != NULL) {
pmap_pti_remove_kva((vm_offset_t)pcb->pcb_tssp,
(vm_offset_t)pcb->pcb_tssp + ctob(IOPAGES + 1));
- kmem_free(kernel_arena, (vm_offset_t)pcb->pcb_tssp,
- ctob(IOPAGES + 1));
+ kmem_free((vm_offset_t)pcb->pcb_tssp, ctob(IOPAGES + 1), 0);
pcb->pcb_tssp = NULL;
}
}
Index: arm/allwinner/a10_fb.c
===================================================================
--- arm/allwinner/a10_fb.c
+++ arm/allwinner/a10_fb.c
@@ -192,7 +192,7 @@
static void
a10fb_freefb(struct a10fb_softc *sc)
{
- kmem_free(kernel_arena, sc->vaddr, sc->fbsize);
+ kmem_free(sc->vaddr, sc->fbsize, 0);
}
static int
Index: arm/arm/busdma_machdep-v4.c
===================================================================
--- arm/arm/busdma_machdep-v4.c
+++ arm/arm/busdma_machdep-v4.c
@@ -792,7 +792,7 @@
!_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr))
uma_zfree(bufzone->umazone, vaddr);
else
- kmem_free(kernel_arena, (vm_offset_t)vaddr, dmat->maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->maxsize, 0);
dmat->map_count--;
if (map->flags & DMAMAP_COHERENT)
Index: arm/arm/busdma_machdep-v6.c
===================================================================
--- arm/arm/busdma_machdep-v6.c
+++ arm/arm/busdma_machdep-v6.c
@@ -858,7 +858,7 @@
!exclusion_bounce(dmat))
uma_zfree(bufzone->umazone, vaddr);
else
- kmem_free(kernel_arena, (vm_offset_t)vaddr, dmat->maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->maxsize, 0);
dmat->map_count--;
if (map->flags & DMAMAP_COHERENT)
Index: arm/arm/pmap-v6.c
===================================================================
--- arm/arm/pmap-v6.c
+++ arm/arm/pmap-v6.c
@@ -2242,8 +2242,7 @@
* UMA_ZONE_NOFREE flag, it's important to leave
* no allocation in pmap if initialization failed.
*/
- kmem_free(kernel_arena, (vm_offset_t)pmap->pm_pt1,
- NB_IN_PT1);
+ kmem_free((vm_offset_t)pmap->pm_pt1, NB_IN_PT1, 0);
pmap->pm_pt1 = NULL;
return (0);
}
Index: arm/freescale/imx/imx6_sdma.c
===================================================================
--- arm/freescale/imx/imx6_sdma.c
+++ arm/freescale/imx/imx6_sdma.c
@@ -196,8 +196,7 @@
channel = &sc->channel[chn];
channel->in_use = 0;
- kmem_free(kernel_arena, (vm_offset_t)channel->bd,
- PAGE_SIZE);
+ kmem_free((vm_offset_t)channel->bd, PAGE_SIZE, 0);
return (0);
}
Index: arm/nvidia/tegra_xhci.c
===================================================================
--- arm/nvidia/tegra_xhci.c
+++ arm/nvidia/tegra_xhci.c
@@ -984,7 +984,7 @@
if (sc->irq_hdl_mbox != NULL)
bus_teardown_intr(dev, sc->irq_res_mbox, sc->irq_hdl_mbox);
if (sc->fw_vaddr != 0)
- kmem_free(kernel_arena, sc->fw_vaddr, sc->fw_size);
+ kmem_free(sc->fw_vaddr, sc->fw_size, 0);
LOCK_DESTROY(sc);
return (0);
}
Index: arm64/arm64/busdma_bounce.c
===================================================================
--- arm64/arm64/busdma_bounce.c
+++ arm64/arm64/busdma_bounce.c
@@ -532,8 +532,7 @@
if ((dmat->bounce_flags & BF_KMEM_ALLOC) == 0)
free(vaddr, M_DEVBUF);
else
- kmem_free(kernel_arena, (vm_offset_t)vaddr,
- dmat->common.maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->common.maxsize, 0);
free(map, M_DEVBUF);
dmat->map_count--;
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat,
Index: arm64/arm64/mp_machdep.c
===================================================================
--- arm64/arm64/mp_machdep.c
+++ arm64/arm64/mp_machdep.c
@@ -502,8 +502,7 @@
("Failed to start CPU %u (%lx)\n", id, target_cpu));
pcpu_destroy(pcpup);
- kmem_free(kernel_arena, (vm_offset_t)dpcpu[cpuid - 1],
- DPCPU_SIZE);
+ kmem_free((vm_offset_t)dpcpu[cpuid - 1], DPCPU_SIZE, 0);
dpcpu[cpuid - 1] = NULL;
mp_ncpus--;
Index: compat/linuxkpi/common/include/linux/dma-mapping.h
===================================================================
--- compat/linuxkpi/common/include/linux/dma-mapping.h
+++ compat/linuxkpi/common/include/linux/dma-mapping.h
@@ -156,7 +156,7 @@
dma_addr_t dma_handle)
{
- kmem_free(kmem_arena, (vm_offset_t)cpu_addr, size);
+ kmem_free((vm_offset_t)cpu_addr, size, 0);
}
/* XXX This only works with no iommu. */
Index: compat/linuxkpi/common/src/linux_page.c
===================================================================
--- compat/linuxkpi/common/src/linux_page.c
+++ compat/linuxkpi/common/src/linux_page.c
@@ -178,7 +178,7 @@
{
size_t size = ((size_t)PAGE_SIZE) << order;
- kmem_free(kmem_arena, addr, size);
+ kmem_free(addr, size, 0);
}
static int
Index: dev/agp/agp.c
===================================================================
--- dev/agp/agp.c
+++ dev/agp/agp.c
@@ -171,8 +171,9 @@
void
agp_free_gatt(struct agp_gatt *gatt)
{
- kmem_free(kernel_arena, (vm_offset_t)gatt->ag_virtual,
- gatt->ag_entries * sizeof(u_int32_t));
+
+ kmem_free((vm_offset_t)gatt->ag_virtual, gatt->ag_entries *
+ sizeof(u_int32_t), 0);
free(gatt, M_AGP);
}
Index: dev/agp/agp_amd.c
===================================================================
--- dev/agp/agp_amd.c
+++ dev/agp/agp_amd.c
@@ -119,8 +119,8 @@
if (bootverbose)
device_printf(dev,
"failed to allocate page directory\n");
- kmem_free(kernel_arena, (vm_offset_t)gatt->ag_virtual,
- entries * sizeof(u_int32_t));
+ kmem_free((vm_offset_t)gatt->ag_virtual, entries *
+ sizeof(u_int32_t), 0);
free(gatt, M_AGP);
return 0;
}
@@ -168,9 +168,9 @@
static void
agp_amd_free_gatt(struct agp_amd_gatt *gatt)
{
- kmem_free(kernel_arena, (vm_offset_t)gatt->ag_vdir, AGP_PAGE_SIZE);
- kmem_free(kernel_arena, (vm_offset_t)gatt->ag_virtual,
- gatt->ag_entries * sizeof(u_int32_t));
+ kmem_free((vm_offset_t)gatt->ag_vdir, AGP_PAGE_SIZE, 0);
+ kmem_free((vm_offset_t)gatt->ag_virtual, gatt->ag_entries *
+ sizeof(u_int32_t), 0);
free(gatt, M_AGP);
}
Index: dev/agp/agp_ati.c
===================================================================
--- dev/agp/agp_ati.c
+++ dev/agp/agp_ati.c
@@ -147,8 +147,8 @@
if (sc->ag_vdir == NULL) {
if (bootverbose)
device_printf(dev, "pagedir allocation failed\n");
- kmem_free(kernel_arena, (vm_offset_t)sc->ag_virtual,
- entries * sizeof(u_int32_t));
+ kmem_free((vm_offset_t)sc->ag_virtual, entries *
+ sizeof(u_int32_t), 0);
return ENOMEM;
}
sc->ag_pdir = vtophys((vm_offset_t)sc->ag_vdir);
@@ -265,9 +265,9 @@
temp = pci_read_config(dev, apsize_reg, 4);
pci_write_config(dev, apsize_reg, temp & ~1, 4);
- kmem_free(kernel_arena, (vm_offset_t)sc->ag_vdir, AGP_PAGE_SIZE);
- kmem_free(kernel_arena, (vm_offset_t)sc->ag_virtual,
- sc->ag_entries * sizeof(u_int32_t));
+ kmem_free((vm_offset_t)sc->ag_vdir, AGP_PAGE_SIZE, 0);
+ kmem_free((vm_offset_t)sc->ag_virtual, sc->ag_entries *
+ sizeof(u_int32_t), 0);
bus_release_resource(dev, SYS_RES_MEMORY, ATI_GART_MMADDR, sc->regs);
agp_free_res(dev);
Index: dev/agp/agp_i810.c
===================================================================
--- dev/agp/agp_i810.c
+++ dev/agp/agp_i810.c
@@ -1329,7 +1329,7 @@
sc = device_get_softc(dev);
bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, 0);
- kmem_free(kernel_arena, (vm_offset_t)sc->gatt->ag_virtual, 64 * 1024);
+ kmem_free((vm_offset_t)sc->gatt->ag_virtual, 64 * 1024, 0);
}
static void
Index: dev/amd_ecc_inject/ecc_inject.c
===================================================================
--- dev/amd_ecc_inject/ecc_inject.c
+++ dev/amd_ecc_inject/ecc_inject.c
@@ -195,7 +195,7 @@
pause_sbt("ecc_ei_inject", delay_ms * SBT_1MS, 0, 0);
}
- kmem_free(kernel_arena, memory, PAGE_SIZE);
+ kmem_free(memory, PAGE_SIZE, 0);
}
static int
Index: dev/hyperv/vmbus/hyperv.c
===================================================================
--- dev/hyperv/vmbus/hyperv.c
+++ dev/hyperv/vmbus/hyperv.c
@@ -264,8 +264,8 @@
static void
hypercall_memfree(void)
{
- kmem_free(kernel_arena, (vm_offset_t)hypercall_context.hc_addr,
- PAGE_SIZE);
+
+ kmem_free((vm_offset_t)hypercall_context.hc_addr, PAGE_SIZE, M_EXEC);
hypercall_context.hc_addr = NULL;
}
Index: dev/liquidio/lio_network.h
===================================================================
--- dev/liquidio/lio_network.h
+++ dev/liquidio/lio_network.h
@@ -212,7 +212,7 @@
lio_dma_free(size_t size, void *cpu_addr)
{
- kmem_free(kmem_arena, (vm_offset_t)cpu_addr, size);
+ kmem_free((vm_offset_t)cpu_addr, size, 0);
}
static inline uint64_t
Index: kern/kern_malloc.c
===================================================================
--- kern/kern_malloc.c
+++ kern/kern_malloc.c
@@ -443,6 +443,8 @@
{
void *ret;
+ KASSERT((flags & M_EXEC) == 0,
+ ("contigmalloc(9) does not accept the flag M_EXEC"));
ret = (void *)kmem_alloc_contig(size, flags, low, high, alignment,
boundary, VM_MEMATTR_DEFAULT);
if (ret != NULL)
@@ -457,6 +459,8 @@
{
void *ret;
+ KASSERT((flags & M_EXEC) == 0,
+ ("contigmalloc_domain(9) does not accept the flag M_EXEC"));
ret = (void *)kmem_alloc_contig_domain(domain, size, flags, low, high,
alignment, boundary, VM_MEMATTR_DEFAULT);
if (ret != NULL)
@@ -475,7 +479,7 @@
contigfree(void *addr, unsigned long size, struct malloc_type *type)
{
- kmem_free(kernel_arena, (vm_offset_t)addr, size);
+ kmem_free((vm_offset_t)addr, size, 0);
malloc_type_freed(type, round_page(size));
}
Index: kern/subr_busdma_bufalloc.c
===================================================================
--- kern/subr_busdma_bufalloc.c
+++ kern/subr_busdma_bufalloc.c
@@ -171,6 +171,6 @@
busdma_bufalloc_free_uncacheable(void *item, vm_size_t size, uint8_t pflag)
{
- kmem_free(kernel_arena, (vm_offset_t)item, size);
+ kmem_free((vm_offset_t)item, size, 0);
}
Index: mips/ingenic/jz4780_lcd.c
===================================================================
--- mips/ingenic/jz4780_lcd.c
+++ mips/ingenic/jz4780_lcd.c
@@ -129,7 +129,7 @@
static void
jzlcd_freefb(struct jzlcd_softc *sc)
{
- kmem_free(kernel_arena, sc->vaddr, sc->fbsize);
+ kmem_free(sc->vaddr, sc->fbsize, 0);
}
static void
Index: mips/mips/busdma_machdep.c
===================================================================
--- mips/mips/busdma_machdep.c
+++ mips/mips/busdma_machdep.c
@@ -756,7 +756,7 @@
!_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr))
uma_zfree(bufzone->umazone, vaddr);
else
- kmem_free(kernel_arena, (vm_offset_t)vaddr, dmat->maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->maxsize, 0);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
Index: powerpc/powerpc/busdma_machdep.c
===================================================================
--- powerpc/powerpc/busdma_machdep.c
+++ powerpc/powerpc/busdma_machdep.c
@@ -570,7 +570,7 @@
if (!map->contigalloc)
free(vaddr, M_DEVBUF);
else
- kmem_free(kmem_arena, (vm_offset_t)vaddr, dmat->maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->maxsize, 0);
bus_dmamap_destroy(dmat, map);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
Index: vm/uma_core.c
===================================================================
--- vm/uma_core.c
+++ vm/uma_core.c
@@ -1300,14 +1300,11 @@
static void
page_free(void *mem, vm_size_t size, uint8_t flags)
{
- struct vmem *vmem;
- if (flags & UMA_SLAB_KERNEL)
- vmem = kernel_arena;
- else
+ if ((flags & (UMA_SLAB_KERNEL | UMA_SLAB_KRWX)) != UMA_SLAB_KERNEL)
panic("UMA: page_free used with invalid flags %x", flags);
- kmem_free(vmem, (vm_offset_t)mem, size);
+ kmem_free((vm_offset_t)mem, size, 0);
}
/*
@@ -3719,19 +3716,19 @@
void
uma_large_free(uma_slab_t slab)
{
- struct vmem *arena;
+ int flags;
KASSERT((slab->us_flags & UMA_SLAB_KERNEL) != 0,
("uma_large_free: Memory not allocated with uma_large_malloc."));
#if VM_NRESERVLEVEL > 0
if (__predict_true((slab->us_flags & UMA_SLAB_KRWX) == 0))
- arena = kernel_arena;
+ flags = 0;
else
- arena = kernel_rwx_arena;
+ flags = M_EXEC;
#else
- arena = kernel_arena;
+ flags = 0;
#endif
- kmem_free(arena, (vm_offset_t)slab->us_data, slab->us_size);
+ kmem_free((vm_offset_t)slab->us_data, slab->us_size, flags);
uma_total_dec(slab->us_size);
zone_free_item(slabzone, slab, NULL, SKIP_NONE);
}
Index: vm/vm_extern.h
===================================================================
--- vm/vm_extern.h
+++ vm/vm_extern.h
@@ -66,7 +66,7 @@
vm_memattr_t memattr);
vm_offset_t kmem_malloc(vm_size_t size, int flags);
vm_offset_t kmem_malloc_domain(int domain, vm_size_t size, int flags);
-void kmem_free(struct vmem *, vm_offset_t, vm_size_t);
+void kmem_free(vm_offset_t addr, vm_size_t size, int flags);
/* This provides memory for previously allocated address space. */
int kmem_back(vm_object_t, vm_offset_t, vm_size_t, int);
Index: vm/vm_kern.c
===================================================================
--- vm/vm_kern.c
+++ vm/vm_kern.c
@@ -539,23 +539,15 @@
* original allocation.
*/
void
-kmem_free(struct vmem *vmem, vm_offset_t addr, vm_size_t size)
+kmem_free(vm_offset_t addr, vm_size_t size, int flags)
{
struct vmem *arena;
int domain;
-#if VM_NRESERVLEVEL > 0
- KASSERT(vmem == kernel_arena || vmem == kernel_rwx_arena,
- ("kmem_free: Only kernel_arena or kernel_rwx_arena are supported."));
-#else
- KASSERT(vmem == kernel_arena,
- ("kmem_free: Only kernel_arena is supported."));
-#endif
-
size = round_page(size);
domain = _kmem_unback(kernel_object, addr, size);
#if VM_NRESERVLEVEL > 0
- if (__predict_true(vmem == kernel_arena))
+ if (__predict_true((flags & M_EXEC) == 0))
arena = vm_dom[domain].vmd_kernel_arena;
else
arena = vm_dom[domain].vmd_kernel_rwx_arena;
Index: x86/iommu/busdma_dmar.c
===================================================================
--- x86/iommu/busdma_dmar.c
+++ x86/iommu/busdma_dmar.c
@@ -479,7 +479,7 @@
} else {
KASSERT((map->flags & BUS_DMAMAP_DMAR_KMEM_ALLOC) != 0,
("dmar_bus_dmamem_free for non alloced map %p", map));
- kmem_free(kernel_arena, (vm_offset_t)vaddr, tag->common.maxsize);
+ kmem_free((vm_offset_t)vaddr, tag->common.maxsize, 0);
map->flags &= ~BUS_DMAMAP_DMAR_KMEM_ALLOC;
}
Index: x86/iommu/intel_intrmap.c
===================================================================
--- x86/iommu/intel_intrmap.c
+++ x86/iommu/intel_intrmap.c
@@ -374,7 +374,7 @@
dmar_disable_ir(unit);
dmar_qi_invalidate_iec_glob(unit);
vmem_destroy(unit->irtids);
- kmem_free(kernel_arena, (vm_offset_t)unit->irt,
- unit->irte_cnt * sizeof(dmar_irte_t));
+ kmem_free((vm_offset_t)unit->irt, unit->irte_cnt *
+ sizeof(dmar_irte_t), 0);
}
}
Index: x86/iommu/intel_qi.c
===================================================================
--- x86/iommu/intel_qi.c
+++ x86/iommu/intel_qi.c
@@ -444,7 +444,7 @@
("dmar%d: waiters on disabled queue", unit->unit));
DMAR_UNLOCK(unit);
- kmem_free(kernel_arena, unit->inv_queue, unit->inv_queue_size);
+ kmem_free(unit->inv_queue, unit->inv_queue_size, 0);
unit->inv_queue = 0;
unit->inv_queue_size = 0;
unit->qi_enabled = 0;
Index: x86/x86/busdma_bounce.c
===================================================================
--- x86/x86/busdma_bounce.c
+++ x86/x86/busdma_bounce.c
@@ -499,8 +499,7 @@
if ((dmat->bounce_flags & BUS_DMA_KMEM_ALLOC) == 0)
free_domain(vaddr, M_DEVBUF);
else
- kmem_free(kernel_arena, (vm_offset_t)vaddr,
- dmat->common.maxsize);
+ kmem_free((vm_offset_t)vaddr, dmat->common.maxsize, 0);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat,
dmat->bounce_flags);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 30, 7:00 PM (27 m, 48 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24483754
Default Alt Text
D16845.id47102.diff (16 KB)

Event Timeline