diff options
author | Pyun YongHyeon <yongari@FreeBSD.org> | 2011-01-13 23:00:28 +0000 |
---|---|---|
committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2011-01-13 23:00:28 +0000 |
commit | 9e18005d99c785ebd9bb511e39a10971fbbade69 (patch) | |
tree | d0c0e7f190ba7e7b47537698f976e0f61eb5a8a8 /sys/dev/re | |
parent | ea40bc90e19141f8026a95235ba160ffe625e468 (diff) | |
download | src-9e18005d99c785ebd9bb511e39a10971fbbade69.tar.gz src-9e18005d99c785ebd9bb511e39a10971fbbade69.zip |
Make sure to check validity of dma maps before destroying.
Notes
Notes:
svn path=/head/; revision=217384
Diffstat (limited to 'sys/dev/re')
-rw-r--r-- | sys/dev/re/if_re.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index f9c72b0a47ab..92db00a03b63 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -1663,15 +1663,19 @@ re_detach(device_t dev) /* Destroy all the RX and TX buffer maps */ if (sc->rl_ldata.rl_tx_mtag) { - for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) - bus_dmamap_destroy(sc->rl_ldata.rl_tx_mtag, - sc->rl_ldata.rl_tx_desc[i].tx_dmamap); + for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) { + if (sc->rl_ldata.rl_tx_desc[i].tx_dmamap) + bus_dmamap_destroy(sc->rl_ldata.rl_tx_mtag, + sc->rl_ldata.rl_tx_desc[i].tx_dmamap); + } bus_dma_tag_destroy(sc->rl_ldata.rl_tx_mtag); } if (sc->rl_ldata.rl_rx_mtag) { - for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) - bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, - sc->rl_ldata.rl_rx_desc[i].rx_dmamap); + for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { + if (sc->rl_ldata.rl_rx_desc[i].rx_dmamap) + bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, + sc->rl_ldata.rl_rx_desc[i].rx_dmamap); + } if (sc->rl_ldata.rl_rx_sparemap) bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, sc->rl_ldata.rl_rx_sparemap); |