b43: Work around mac80211 race condition
authorLarry Finger <Larry.Finger@lwfinger.net>
Wed, 29 Jul 2009 15:54:06 +0000 (10:54 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 4 Aug 2009 20:43:26 +0000 (16:43 -0400)
commit18c6951091eca7645005a71b556106cc99a6f4b1
treef8e67fe0f40a6d846931653fc50fe25d8d623b91
parentae6f53f25f9803212d1985b5eb5a03111f439c24
b43: Work around mac80211 race condition

As shown in http://thread.gmane.org/gmane.linux.kernel.wireless.general/36497,
mac80211 has a bug that allows a call to the TX routine after the queues have
been stopped. This situation will only occur under extreme stress. Although
b43 does not crash when this condition occurs, it does generate a WARN_ON and
also logs a queue overrun message. This patch recognizes b43 is not at fault
and logs a message only when the most verbose debugging mode is enabled. In
the unlikely event that the queue is not stopped when the DMA queue becomes
full, then a warning is issued.

During testing of this patch with one output stream running repeated tcpperf
writes and a second running a flood ping, this routine was entered with
the DMA ring stopped about once per hour. The condition where the DMA queue is
full but the ring has not been stopped has never been seen by me.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/b43/dma.c