b43: fix ieee80211_rx() context
authorJohannes Berg <johannes@sipsolutions.net>
Sun, 11 Oct 2009 10:19:21 +0000 (12:19 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 12 Oct 2009 19:55:53 +0000 (15:55 -0400)
Due to the way it interacts with the networking
stack and other parts of mac80211, ieee80211_rx()
must be called with disabled softirqs.

[1] http://thread.gmane.org/gmane.linux.kernel.wireless.general/39440/focus=40266

Reported-by: Dave Young <hidave.darkstar@gmail.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/b43/xmit.c

index 892573b27d50d86f5ff12610ad4f816a2d0c7762..f4e9695ec18611a2c33439184fa501fc9dc9a8c7 100644 (file)
@@ -690,7 +690,10 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)
        }
 
        memcpy(IEEE80211_SKB_RXCB(skb), &status, sizeof(status));
+
+       local_bh_disable();
        ieee80211_rx(dev->wl->hw, skb);
+       local_bh_enable();
 
 #if B43_DEBUG
        dev->rx_count++;