Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133982568
D16845.id47102.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
D16845.id47102.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D16845: Replace kmem_free()'s arena parameter
Attached
Detach File
Event Timeline
Log In to Comment