There's some races (likely in the BAR handling, sigh) which is causing

the pause/resume code to not be called completely symmetrically.

I'll chase down the root cause of that soon; this at least works around
the bug and tells me when it happens.
This commit is contained in:
adrian 2013-04-20 22:46:31 +00:00
parent 68ade6e8fa
commit d11d65f442

View File

@ -2976,7 +2976,19 @@ ath_tx_tid_resume(struct ath_softc *sc, struct ath_tid *tid)
{
ATH_TX_LOCK_ASSERT(sc);
tid->paused--;
/*
* There's some odd places where ath_tx_tid_resume() is called
* when it shouldn't be; this works around that particular issue
* until it's actually resolved.
*/
if (tid->paused == 0) {
device_printf(sc->sc_dev, "%s: %6D: paused=0?\n",
__func__,
tid->an->an_node.ni_macaddr,
":");
} else {
tid->paused--;
}
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL, "%s: unpaused = %d\n",
__func__, tid->paused);