Date: Wed, 3 Jun 2015 14:48:04 +0000 (UTC) From: Luiz Otavio O Souza <loos@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r283948 - head/sys/dev/dwc Message-ID: <201506031448.t53Em4Gn090709@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: loos Date: Wed Jun 3 14:48:03 2015 New Revision: 283948 URL: https://svnweb.freebsd.org/changeset/base/283948 Log: Fix the OACTIVE handling on if_dwc. Previously the OACTIVE flag was being set when the tx descriptors are fully allocated but it wasn't unset anywhere. As soon as a packet is transmitted, unset the OACTIVE flag and call start routine to push any pending packets from the tx queue. This closes another race where a full tx queue would jam the tx path (tx queue is full, new packets cannot be added to queue and dwc_txstart never gets called). Modified: head/sys/dev/dwc/if_dwc.c Modified: head/sys/dev/dwc/if_dwc.c ============================================================================== --- head/sys/dev/dwc/if_dwc.c Wed Jun 3 14:07:50 2015 (r283947) +++ head/sys/dev/dwc/if_dwc.c Wed Jun 3 14:48:03 2015 (r283948) @@ -741,9 +741,11 @@ dwc_txfinish_locked(struct dwc_softc *sc { struct dwc_bufmap *bmap; struct dwc_hwdesc *desc; + struct ifnet *ifp; DWC_ASSERT_LOCKED(sc); + fp = sc->ifp; while (sc->tx_idx_tail != sc->tx_idx_head) { desc = &sc->txdesc_ring[sc->tx_idx_tail]; if ((desc->tdes0 & DDESC_TDES0_OWN) != 0) @@ -756,6 +758,7 @@ dwc_txfinish_locked(struct dwc_softc *sc bmap->mbuf = NULL; dwc_setup_txdesc(sc, sc->tx_idx_tail, 0, 0); sc->tx_idx_tail = next_txidx(sc, sc->tx_idx_tail); + ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; } /* If there are no buffers outstanding, muzzle the watchdog. */ @@ -838,8 +841,10 @@ dwc_intr(void *arg) if (reg & DMA_STATUS_RI) dwc_rxfinish_locked(sc); - if (reg & DMA_STATUS_TI) + if (reg & DMA_STATUS_TI) { dwc_txfinish_locked(sc); + dwc_txstart_locked(sc); + } } if (reg & DMA_STATUS_AIS) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506031448.t53Em4Gn090709>