summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbschmidt <bschmidt@FreeBSD.org>2011-04-16 10:35:02 +0000
committerbschmidt <bschmidt@FreeBSD.org>2011-04-16 10:35:02 +0000
commitebcc30282ef329fde579a7276090b2a4e2fe6e4b (patch)
tree22142a1c40690a9f1b7e142638626c35f76190b0
parent7c20ac5e151fd7bf876c5ae92b96c3da95cd6dcd (diff)
downloadFreeBSD-src-ebcc30282ef329fde579a7276090b2a4e2fe6e4b.zip
FreeBSD-src-ebcc30282ef329fde579a7276090b2a4e2fe6e4b.tar.gz
Make sure to destroy all DMA tags and maps.
-rw-r--r--sys/dev/iwn/if_iwn.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index 0f35d6c..8d7959a 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -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, struct iwn_rx_ring *ring)
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, struct iwn_tx_ring *ring)
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
OpenPOWER on IntegriCloud