iwlwifi: don't stop queue in the middle of fragmented packet
authorTomas Winkler <tomas.winkler@intel.com>
Thu, 24 Jul 2008 18:33:42 +0000 (21:33 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 1 Aug 2008 19:31:33 +0000 (15:31 -0400)
This patch avoids stopping queue in the middle of the fragmented packet.
It is required that there will be ~10 (max packet/min fragment) or 16
(4 bits of frag number) free tfds all the time.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-tx.c

index f72cd0b..0182e4d 100644 (file)
@@ -962,16 +962,16 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
        if (ret)
                return ret;
 
-       if ((iwl_queue_space(q) < q->high_mark)
-           && priv->mac80211_registered) {
+       if ((iwl_queue_space(q) < q->high_mark) && priv->mac80211_registered) {
                if (wait_write_ptr) {
                        spin_lock_irqsave(&priv->lock, flags);
                        txq->need_update = 1;
                        iwl_txq_update_write_ptr(priv, txq);
                        spin_unlock_irqrestore(&priv->lock, flags);
+               } else {
+                       ieee80211_stop_queue(priv->hw,
+                                            skb_get_queue_mapping(skb));
                }
-
-               ieee80211_stop_queue(priv->hw, skb_get_queue_mapping(skb));
        }
 
        return 0;