Index: dev/sgmap_common.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/alpha/dev/sgmap_common.c,v
retrieving revision 1.14
diff -u -p -r1.14 sgmap_common.c
--- dev/sgmap_common.c  9 Dec 2014 06:58:28 -0000       1.14
+++ dev/sgmap_common.c  13 May 2019 16:39:50 -0000
@@ -150,6 +150,8 @@ alpha_sgmap_dmamap_setup(map, nsegments,
 {
        map->_dm_cookie = mallocarray(nsegments, sizeof(struct extent_region),
            M_DEVBUF, (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK);
+       if (map->_dm_cookie != NULL)
+               map->_dm_cookiesize = nsegments * sizeof(struct extent_region);
        return (map->_dm_cookie == NULL);
 }
 
@@ -187,7 +189,7 @@ void
 alpha_sgmap_dmamap_teardown(map)
        bus_dmamap_t map;
 {
-       free(map->_dm_cookie, M_DEVBUF, 0);
+       free(map->_dm_cookie, M_DEVBUF, map->_dm_cookiesize);
 }
 
 void
Index: include/bus.h
===================================================================
RCS file: /OpenBSD/src/sys/arch/alpha/include/bus.h,v
retrieving revision 1.31
diff -u -p -r1.31 bus.h
--- include/bus.h       8 May 2017 00:27:45 -0000       1.31
+++ include/bus.h       13 May 2019 16:39:50 -0000
@@ -648,6 +648,7 @@ struct alpha_bus_dmamap {
         * Private cookie to be used by the DMA back-end.
         */
        void            *_dm_cookie;
+       size_t          _dm_cookiesize; /* size allocated for _dm_cookie */
 
        /*
         * The DMA window that we ended up being mapped in.
Index: isa/isadma_bounce.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/alpha/isa/isadma_bounce.c,v
retrieving revision 1.12
diff -u -p -r1.12 isadma_bounce.c
--- isa/isadma_bounce.c 27 Sep 2015 10:12:09 -0000      1.12
+++ isa/isadma_bounce.c 13 May 2019 16:39:50 -0000
@@ -115,6 +115,7 @@ isadma_bounce_dmamap_create(bus_dma_tag_
 
        map = *dmamp;
        map->_dm_cookie = NULL;
+       map->_dm_cookiesize = 0;
 
        cookiesize = sizeof(*cookie);
 
@@ -156,6 +157,7 @@ isadma_bounce_dmamap_create(bus_dma_tag_
        cookie = (struct isadma_bounce_cookie *)cookiestore;
        cookie->id_flags = cookieflags;
        map->_dm_cookie = cookie;
+       map->_dm_cookiesize = cookiesize;
 
        if (cookieflags & ID_MIGHT_NEED_BOUNCE) {
                /*
@@ -190,7 +192,7 @@ isadma_bounce_dmamap_destroy(bus_dma_tag
        if (cookie->id_flags & ID_HAS_BOUNCE)
                isadma_bounce_free_bouncebuf(t, map);
 
-       free(cookie, M_DEVBUF, 0);
+       free(cookie, M_DEVBUF, map->_dm_cookiesize);
        _bus_dmamap_destroy(t, map);
 }
 

Reply via email to