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);
 }
 
 /*

Reply via email to