Date: Sun, 16 Oct 2011 07:29:50 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r226417 - user/adrian/if_ath_tx/sys/dev/ath Message-ID: <201110160729.p9G7TooB050805@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Sun Oct 16 07:29:50 2011 New Revision: 226417 URL: http://svn.freebsd.org/changeset/base/226417 Log: Move the TX taskqueue enqueue to later in the ath_intr() routine. I have this sneaking suspicion that preemption is the reason behind some of these TX hangs. Ie, the taskqueue enqueue caused the taskqueue process (which may be at the same priority as the ath_intr swi) to preempt it. Thus TX could occur before the TXQ status bits were properly set. Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath.c Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath.c ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_ath.c Sun Oct 16 07:05:43 2011 (r226416) +++ user/adrian/if_ath_tx/sys/dev/ath/if_ath.c Sun Oct 16 07:29:50 2011 (r226417) @@ -1481,7 +1481,6 @@ ath_intr(void *arg) } if (status & HAL_INT_TX) { sc->sc_stats.ast_tx_intr++; - taskqueue_enqueue_fast(sc->sc_tq, &sc->sc_txtask); /* * Grab all the currently set bits in the HAL txq bitmap @@ -1493,6 +1492,7 @@ ath_intr(void *arg) ath_hal_gettxintrtxqs(sc->sc_ah, &txqs); sc->sc_txq_active |= txqs; ATH_UNLOCK(sc); + taskqueue_enqueue_fast(sc->sc_tq, &sc->sc_txtask); } if (status & HAL_INT_BMISS) { sc->sc_stats.ast_bmiss++;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110160729.p9G7TooB050805>