From owner-svn-src-head@FreeBSD.ORG Sat May 18 13:58:07 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 9528296C; Sat, 18 May 2013 13:58:07 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 88240205; Sat, 18 May 2013 13:58:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r4IDw76U075660; Sat, 18 May 2013 13:58:07 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r4IDw7UV075659; Sat, 18 May 2013 13:58:07 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201305181358.r4IDw7UV075659@svn.freebsd.org> From: Adrian Chadd Date: Sat, 18 May 2013 13:58:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r250777 - head/sys/dev/ath X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 May 2013 13:58:07 -0000 Author: adrian Date: Sat May 18 13:58:07 2013 New Revision: 250777 URL: http://svnweb.freebsd.org/changeset/base/250777 Log: Re-add some code to exclude transmitting if we're in reset. This fixes some "transmitting during reset" bugs that crept in after I messed around with this part of the transmit path. Modified: head/sys/dev/ath/if_ath.c Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Sat May 18 13:56:26 2013 (r250776) +++ head/sys/dev/ath/if_ath.c Sat May 18 13:58:07 2013 (r250777) @@ -2620,9 +2620,28 @@ ath_start_queue(struct ifnet *ifp) { struct ath_softc *sc = ifp->if_softc; + ATH_PCU_LOCK(sc); + if (sc->sc_inreset_cnt > 0) { + device_printf(sc->sc_dev, + "%s: sc_inreset_cnt > 0; bailing\n", __func__); + ATH_PCU_UNLOCK(sc); + IF_LOCK(&ifp->if_snd); + sc->sc_stats.ast_tx_qstop++; + ifp->if_drv_flags |= IFF_DRV_OACTIVE; + IF_UNLOCK(&ifp->if_snd); + ATH_KTR(sc, ATH_KTR_TX, 0, "ath_start_task: OACTIVE, finish"); + return; + } + sc->sc_txstart_cnt++; + ATH_PCU_UNLOCK(sc); + ATH_KTR(sc, ATH_KTR_TX, 0, "ath_start_queue: start"); ath_tx_kick(sc); ATH_KTR(sc, ATH_KTR_TX, 0, "ath_start_queue: finished"); + + ATH_PCU_LOCK(sc); + sc->sc_txstart_cnt--; + ATH_PCU_UNLOCK(sc); } void