svn commit: r226417 - user/adrian/if_ath_tx/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Sun Oct 16 07:29:51 UTC 2011
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++;
More information about the svn-src-user
mailing list