Make sure to destroy all DMA tags and maps.

This commit is contained in:
Bernhard Schmidt 2011-04-16 10:35:02 +00:00
parent 1f43fb20f2
commit a59641a1a4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=220701

View File

@ -1159,16 +1159,20 @@ iwn_dma_contig_alloc(struct iwn_softc *sc, struct iwn_dma_info *dma,
static void static void
iwn_dma_contig_free(struct iwn_dma_info *dma) iwn_dma_contig_free(struct iwn_dma_info *dma)
{ {
if (dma->tag != NULL) { if (dma->map != NULL) {
if (dma->map != NULL) { if (dma->vaddr != NULL) {
if (dma->paddr == 0) { bus_dmamap_sync(dma->tag, dma->map,
bus_dmamap_sync(dma->tag, dma->map, BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); bus_dmamap_unload(dma->tag, dma->map);
bus_dmamap_unload(dma->tag, dma->map);
}
bus_dmamem_free(dma->tag, &dma->vaddr, 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); 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) if (data->map != NULL)
bus_dmamap_destroy(ring->data_dmat, data->map); 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 static int
@ -1479,6 +1487,10 @@ iwn_free_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring)
if (data->map != NULL) if (data->map != NULL)
bus_dmamap_destroy(ring->data_dmat, data->map); 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 static void