summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorDaniel Drake <dsd@gentoo.org>2006-12-01 00:56:50 +0000
committerJohn W. Linville <linville@tuxdriver.com>2006-12-05 19:31:32 -0500
commit383956a9c59157db4c404d1c8bb9074b8dfe3ee0 (patch)
treeb14227d5f78f9e7fd79a2fd0dba327313f5d0837 /drivers/net/wireless
parente62438630ca37539c8cc1553710bbfaa3cf960a7 (diff)
downloadkernel-crypto-383956a9c59157db4c404d1c8bb9074b8dfe3ee0.tar.gz
kernel-crypto-383956a9c59157db4c404d1c8bb9074b8dfe3ee0.tar.xz
kernel-crypto-383956a9c59157db4c404d1c8bb9074b8dfe3ee0.zip
[PATCH] zd1211rw: zd_mac_rx isn't always called in IRQ context
e.g. usb 1-7: rx_urb_complete() *** first fragment *** usb 1-7: rx_urb_complete() *** second fragment *** drivers/net/wireless/zd1211rw/zd_mac.c:1063 ASSERT (((current_thread_info()->preempt_count) & (((1UL << (12))-1) << ((0 + 8) + 8)))) VIOLATED! [<f0299448>] zd_mac_rx+0x3e7/0x47a [zd1211rw] [<f029badc>] rx_urb_complete+0x22d/0x24a [zd1211rw] [<b028a22f>] urb_destroy+0x0/0x5 [<b01f0930>] kref_put+0x65/0x72 [<b0288cdf>] usb_hcd_giveback_urb+0x28/0x57 [<b02950c4>] qh_completions+0x296/0x2f6 [<b0294b21>] ehci_urb_done+0x70/0x7a [<b0294ea1>] qh_completions+0x73/0x2f6 [<b02951bc>] ehci_work+0x98/0x538 Remove the bogus assertion, and use dev_kfree_skb_any as pointed out by Ulrich Kunitz. Signed-off-by: Daniel Drake <dsd@gentoo.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 2696f95b927..d7a86b188a9 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -1059,10 +1059,8 @@ int zd_mac_rx(struct zd_mac *mac, const u8 *buffer, unsigned int length)
memcpy(skb_put(skb, length), buffer, length);
r = ieee80211_rx(ieee, skb, &stats);
- if (!r) {
- ZD_ASSERT(in_irq());
- dev_kfree_skb_irq(skb);
- }
+ if (!r)
+ dev_kfree_skb_any(skb);
return 0;
}