Author: bschmidt
Date: Sat Apr 16 10:35:02 2011
New Revision: 220701
URL: http://svn.freebsd.org/changeset/base/220701

Log:
  Make sure to destroy all DMA tags and maps.

Modified:
  head/sys/dev/iwn/if_iwn.c

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c   Sat Apr 16 10:32:46 2011        (r220700)
+++ head/sys/dev/iwn/if_iwn.c   Sat Apr 16 10:35:02 2011        (r220701)
@@ -1159,16 +1159,20 @@ fail:
 static void
 iwn_dma_contig_free(struct iwn_dma_info *dma)
 {
-       if (dma->tag != NULL) {
-               if (dma->map != NULL) {
-                       if (dma->paddr == 0) {
-                               bus_dmamap_sync(dma->tag, dma->map,
-                                   BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
-                               bus_dmamap_unload(dma->tag, dma->map);
-                       }
+       if (dma->map != NULL) {
+               if (dma->vaddr != NULL) {
+                       bus_dmamap_sync(dma->tag, dma->map,
+                           BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+                       bus_dmamap_unload(dma->tag, dma->map);
                        bus_dmamem_free(dma->tag, &dma->vaddr, dma->map);
+                       dma->vaddr = NULL;
                }
+               bus_dmamap_destroy(dma->tag, dma->map);
+               dma->map = NULL;
+       }
+       if (dma->tag != NULL) {
                bus_dma_tag_destroy(dma->tag);
+               dma->tag = NULL;
        }
 }
 
@@ -1360,6 +1364,10 @@ iwn_free_rx_ring(struct iwn_softc *sc, s
                if (data->map != NULL)
                        bus_dmamap_destroy(ring->data_dmat, data->map);
        }
+       if (ring->data_dmat != NULL) {
+               bus_dma_tag_destroy(ring->data_dmat);
+               ring->data_dmat = NULL;
+       }
 }
 
 static int
@@ -1479,6 +1487,10 @@ iwn_free_tx_ring(struct iwn_softc *sc, s
                if (data->map != NULL)
                        bus_dmamap_destroy(ring->data_dmat, data->map);
        }
+       if (ring->data_dmat != NULL) {
+               bus_dma_tag_destroy(ring->data_dmat);
+               ring->data_dmat = NULL;
+       }
 }
 
 static void
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to