Module Name: src Committed By: jakllsch Date: Sun Jan 20 22:32:59 UTC 2013
Modified Files: src/sys/arch/arm/omap: if_cpsw.c Log Message: purge the transmit queue in cpsw_stop() To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/omap/if_cpsw.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/omap/if_cpsw.c diff -u src/sys/arch/arm/omap/if_cpsw.c:1.1 src/sys/arch/arm/omap/if_cpsw.c:1.2 --- src/sys/arch/arm/omap/if_cpsw.c:1.1 Thu Jan 3 21:13:26 2013 +++ src/sys/arch/arm/omap/if_cpsw.c Sun Jan 20 22:32:59 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cpsw.c,v 1.1 2013/01/03 21:13:26 jakllsch Exp $ */ +/* $NetBSD: if_cpsw.c,v 1.2 2013/01/20 22:32:59 jakllsch Exp $ */ /* * Copyright (c) 2013 Jonathan A. Kollasch @@ -53,7 +53,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: if_cpsw.c,v 1.1 2013/01/03 21:13:26 jakllsch Exp $"); +__KERNEL_RCSID(1, "$NetBSD: if_cpsw.c,v 1.2 2013/01/20 22:32:59 jakllsch Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -958,6 +958,13 @@ cpsw_stop(struct ifnet *ifp, int disable cpsw_write_4(sc, CPSW_CPDMA_SOFT_RESET, 1); while(cpsw_read_4(sc, CPSW_CPDMA_SOFT_RESET) & 1); + /* Release any queued transmit buffers. */ + for (i = 0; i < CPSW_NTXDESCS; i++) { + bus_dmamap_unload(sc->sc_bdt, rdp->tx_dm[i]); + m_freem(rdp->tx_mb[i]); + rdp->tx_mb[i] = NULL; + } + ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE); ifp->if_timer = 0;