diff options
author | Mike McCormack <mikem@ring3k.org> | 2011-02-06 08:55:16 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-02-09 14:50:19 -0500 |
commit | 1348dc08a912c0bdfc8680df8919dd79de8c3b9a (patch) | |
tree | 8a9773b7b072ae51ee6c62ea1f16c952c26354ef /drivers/staging/rtl8192e | |
parent | 79b03af67a7db3622aefe2da8c250775c81fd623 (diff) |
staging: rtl8192e: Don't call ieee80211_ps_tx_ack in interrupt context
Signed-off-by: Mike McCormack <mikem@ring3k.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/rtl8192e')
-rw-r--r-- | drivers/staging/rtl8192e/r8192E_core.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index a63c6e59b2e..d9e47d0d101 100644 --- a/drivers/staging/rtl8192e/r8192E_core.c +++ b/drivers/staging/rtl8192e/r8192E_core.c | |||
@@ -988,14 +988,6 @@ static void rtl8192_tx_isr(struct net_device *dev, int prio) | |||
988 | 988 | ||
989 | kfree_skb(skb); | 989 | kfree_skb(skb); |
990 | } | 990 | } |
991 | if (prio == MGNT_QUEUE) { | ||
992 | if (priv->ieee80211->ack_tx_to_ieee) { | ||
993 | if (rtl8192_is_tx_queue_empty(dev)) { | ||
994 | priv->ieee80211->ack_tx_to_ieee = 0; | ||
995 | ieee80211_ps_tx_ack(priv->ieee80211, 1); | ||
996 | } | ||
997 | } | ||
998 | } | ||
999 | 991 | ||
1000 | if (prio != BEACON_QUEUE) { | 992 | if (prio != BEACON_QUEUE) { |
1001 | /* try to deal with the pending packets */ | 993 | /* try to deal with the pending packets */ |
@@ -4957,7 +4949,23 @@ static void rtl8192_tx_resume(struct net_device *dev) | |||
4957 | 4949 | ||
4958 | static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv) | 4950 | static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv) |
4959 | { | 4951 | { |
4960 | rtl8192_tx_resume(priv->ieee80211->dev); | 4952 | struct rtl8192_tx_ring *mgnt_ring = &priv->tx_ring[MGNT_QUEUE]; |
4953 | struct net_device *dev = priv->ieee80211->dev; | ||
4954 | unsigned long flags; | ||
4955 | |||
4956 | /* check if we need to report that the management queue is drained */ | ||
4957 | spin_lock_irqsave(&priv->irq_th_lock, flags); | ||
4958 | |||
4959 | if (!skb_queue_len(&mgnt_ring->queue) && | ||
4960 | priv->ieee80211->ack_tx_to_ieee && | ||
4961 | rtl8192_is_tx_queue_empty(dev)) { | ||
4962 | priv->ieee80211->ack_tx_to_ieee = 0; | ||
4963 | ieee80211_ps_tx_ack(priv->ieee80211, 1); | ||
4964 | } | ||
4965 | |||
4966 | spin_unlock_irqrestore(&priv->irq_th_lock, flags); | ||
4967 | |||
4968 | rtl8192_tx_resume(dev); | ||
4961 | } | 4969 | } |
4962 | 4970 | ||
4963 | /* Record the received data rate */ | 4971 | /* Record the received data rate */ |