summaryrefslogtreecommitdiffstats
path: root/sys/pci/if_sis.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-01-06 23:36:43 +0000
committerphk <phk@FreeBSD.org>2005-01-06 23:36:43 +0000
commit538dbb8988cd6d902d0f9a1bbb95b0b103a81f66 (patch)
tree83b0014b66130c63c751dc7f500ef4b6650ddfab /sys/pci/if_sis.c
parent20280f143170ee08a1e2cbd8871550105b276674 (diff)
downloadFreeBSD-src-538dbb8988cd6d902d0f9a1bbb95b0b103a81f66.zip
FreeBSD-src-538dbb8988cd6d902d0f9a1bbb95b0b103a81f66.tar.gz
Simplify and fix bugs in rx/tx ring cleanup.
Diffstat (limited to 'sys/pci/if_sis.c')
-rw-r--r--sys/pci/if_sis.c45
1 files changed, 21 insertions, 24 deletions
diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c
index c68cc0a..53aa74c 100644
--- a/sys/pci/if_sis.c
+++ b/sys/pci/if_sis.c
@@ -2182,8 +2182,9 @@ sis_watchdog(struct ifnet *ifp)
static void
sis_stop(struct sis_softc *sc)
{
- int i;
- struct ifnet *ifp;
+ int i;
+ struct ifnet *ifp;
+ struct sis_desc *dp;
if (sc->sis_stopped)
return;
@@ -2210,35 +2211,31 @@ sis_stop(struct sis_softc *sc)
/*
* Free data in the RX lists.
*/
- for (i = 0; i < SIS_RX_LIST_CNT; i++) {
- if (sc->sis_rx_list[i].sis_mbuf != NULL) {
- bus_dmamap_unload(sc->sis_tag,
- sc->sis_rx_list[i].sis_map);
- bus_dmamap_destroy(sc->sis_tag,
- sc->sis_rx_list[i].sis_map);
- m_freem(sc->sis_rx_list[i].sis_mbuf);
- sc->sis_rx_list[i].sis_mbuf = NULL;
- }
+ dp = &sc->sis_rx_list[0];
+ for (i = 0; i < SIS_RX_LIST_CNT; i++, dp++) {
+ if (dp->sis_mbuf == NULL)
+ continue;
+ bus_dmamap_unload(sc->sis_tag, dp->sis_map);
+ bus_dmamap_destroy(sc->sis_tag, dp->sis_map);
+ m_freem(dp->sis_mbuf);
+ dp->sis_mbuf = NULL;
}
- bzero(sc->sis_rx_list,
- sizeof(sc->sis_rx_list));
+ bzero(sc->sis_rx_list, SIS_RX_LIST_SZ);
/*
* Free the TX list buffers.
*/
- for (i = 0; i < SIS_TX_LIST_CNT; i++) {
- if (sc->sis_tx_list[i].sis_mbuf != NULL) {
- bus_dmamap_unload(sc->sis_tag,
- sc->sis_tx_list[i].sis_map);
- bus_dmamap_destroy(sc->sis_tag,
- sc->sis_tx_list[i].sis_map);
- m_freem(sc->sis_tx_list[i].sis_mbuf);
- sc->sis_tx_list[i].sis_mbuf = NULL;
- }
+ dp = &sc->sis_tx_list[0];
+ for (i = 0; i < SIS_TX_LIST_CNT; i++, dp++) {
+ if (dp->sis_mbuf == NULL)
+ continue;
+ bus_dmamap_unload(sc->sis_tag, dp->sis_map);
+ bus_dmamap_destroy(sc->sis_tag, dp->sis_map);
+ m_freem(dp->sis_mbuf);
+ dp->sis_mbuf = NULL;
}
- bzero(sc->sis_tx_list,
- sizeof(sc->sis_tx_list));
+ bzero(sc->sis_tx_list, SIS_TX_LIST_SZ);
sc->sis_stopped = 1;
}
OpenPOWER on IntegriCloud