Here is a diff to pass around the size to free(9) in amd64's _bus_dmamap
allocations.
i386 is symmetric but I don't have the hardware currently to test it.
Index: bus_dma.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/bus_dma.c,v
retrieving revision 1.48
diff -u -p -r1.48 bus_dma.c
--- bus_dma.c 27 Jan 2015 05:10:30 -0000 1.48
+++ bus_dma.c 17 Dec 2015 11:16:34 -0000
@@ -149,8 +149,11 @@ _bus_dmamap_create(bus_dma_tag_t t, bus_
void
_bus_dmamap_destroy(bus_dma_tag_t t, bus_dmamap_t map)
{
-
- free(map, M_DEVBUF, 0);
+ size_t mapsize;
+
+ mapsize = sizeof(struct bus_dmamap) +
+ (sizeof(bus_dma_segment_t) * (map->_dm_segcnt - 1));
+ free(map, M_DEVBUF, mapsize);
}
/*