From e45eea037035cc1bf275c776b49f49c8cad72f8c Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Sun, 6 Feb 2011 22:55:16 +0900 Subject: [PATCH] --- yaml --- r: 235861 b: refs/heads/master c: 1348dc08a912c0bdfc8680df8919dd79de8c3b9a h: refs/heads/master i: 235859: eabfa23ec7361f6599cd3a28ce2a6d20b8947f8b v: v3 --- [refs] | 2 +- trunk/drivers/staging/rtl8192e/r8192E_core.c | 26 +++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 1e8bb19c768e..665b115c1b84 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 79b03af67a7db3622aefe2da8c250775c81fd623 +refs/heads/master: 1348dc08a912c0bdfc8680df8919dd79de8c3b9a diff --git a/trunk/drivers/staging/rtl8192e/r8192E_core.c b/trunk/drivers/staging/rtl8192e/r8192E_core.c index a63c6e59b2e9..d9e47d0d1017 100644 --- a/trunk/drivers/staging/rtl8192e/r8192E_core.c +++ b/trunk/drivers/staging/rtl8192e/r8192E_core.c @@ -988,14 +988,6 @@ static void rtl8192_tx_isr(struct net_device *dev, int prio) kfree_skb(skb); } - if (prio == MGNT_QUEUE) { - if (priv->ieee80211->ack_tx_to_ieee) { - if (rtl8192_is_tx_queue_empty(dev)) { - priv->ieee80211->ack_tx_to_ieee = 0; - ieee80211_ps_tx_ack(priv->ieee80211, 1); - } - } - } if (prio != BEACON_QUEUE) { /* try to deal with the pending packets */ @@ -4957,7 +4949,23 @@ static void rtl8192_tx_resume(struct net_device *dev) static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv) { - rtl8192_tx_resume(priv->ieee80211->dev); + struct rtl8192_tx_ring *mgnt_ring = &priv->tx_ring[MGNT_QUEUE]; + struct net_device *dev = priv->ieee80211->dev; + unsigned long flags; + + /* check if we need to report that the management queue is drained */ + spin_lock_irqsave(&priv->irq_th_lock, flags); + + if (!skb_queue_len(&mgnt_ring->queue) && + priv->ieee80211->ack_tx_to_ieee && + rtl8192_is_tx_queue_empty(dev)) { + priv->ieee80211->ack_tx_to_ieee = 0; + ieee80211_ps_tx_ack(priv->ieee80211, 1); + } + + spin_unlock_irqrestore(&priv->irq_th_lock, flags); + + rtl8192_tx_resume(dev); } /* Record the received data rate */