[patch] if_ath_tx: change interrupt scheduling deferral
Adrian Chadd
adrian at freebsd.org
Sat Sep 10 12:24:29 UTC 2011
Hi,
This patch changes how the deferred interrupt handling works. It's
likely I'll have to change things a bit before I commit it so I won't
be (yet) committing this.
It brings the interrupt handling in line with how ath9k and the
reference driver works. It eliminates a possible race condition:
* ath_intr() and ath_hal_getisr() set AH5212(ah)->ah_intrTxqs, which
is a bitmap of TXQs which need servicing;
* The ath TX processes call txqactive() which check the above bitmap
and clear the bit that's been tested.
The interrupt handler ath_intr() can be called during the TX
completion task, so I think it's possible that the interrupt could
occur, setting a TXQ bit, in between txqactive()'s "check bit X" and
"clear bit X".
My testing was only showing up one queue hang every 20-50 million
packets where the TXQ had active packets in it which were completed,
but hadn't been processed.
I've only just begun testing this. I'll post updates as they're needed.
Thanks,
Adrian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ar5416-int-sched.diff
Type: application/octet-stream
Size: 8684 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-wireless/attachments/20110910/85aad26d/ar5416-int-sched.obj
More information about the freebsd-wireless
mailing list