staging: vt6655: don't stop TX queue unless buffer full.
authorMalcolm Priestley <tvboxspy@gmail.com>
Sun, 27 Sep 2015 08:17:39 +0000 (09:17 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 29 Sep 2015 02:19:53 +0000 (04:19 +0200)
Presently the TX buffer stops while filling the buffer.

However, this does not make use of the available buffer
space, it also lags the speed of the TX troughtput.

Only stop the queue when the buffer becomes full. The
Interupt handler will start the queue again when a
buffer is available.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6655/device_main.c

index 326bce31c9ca646f378ee5bafda68a72017e0142..07ebdea7aa34aef7a69741d8a9a48128064bc0ec 100644 (file)
@@ -1105,6 +1105,7 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
 
        if (AVAIL_TD(priv, dma_idx) < 1) {
                spin_unlock_irqrestore(&priv->lock, flags);
+               ieee80211_stop_queues(priv->hw);
                return -ENOMEM;
        }
 
@@ -1156,13 +1157,8 @@ static void vnt_tx_80211(struct ieee80211_hw *hw,
 {
        struct vnt_private *priv = hw->priv;
 
-       ieee80211_stop_queues(hw);
-
-       if (vnt_tx_packet(priv, skb)) {
+       if (vnt_tx_packet(priv, skb))
                ieee80211_free_txskb(hw, skb);
-
-               ieee80211_wake_queues(hw);
-       }
 }
 
 static int vnt_start(struct ieee80211_hw *hw)