[PATCH] libertas: fixed transmission flow control on the mesh interface
[safe/jmp/linux-2.6] / drivers / net / wireless / libertas / tx.c
index 964321f..e61729f 100644 (file)
@@ -159,6 +159,7 @@ done:
                skb_orphan(skb);
                /* stop processing outgoing pkts */
                netif_stop_queue(priv->wlan_dev.netdev);
+               netif_stop_queue(priv->mesh_dev);
                /* freeze any packets already in our queues */
                priv->adapter->TxLockFlag = 1;
        } else {
@@ -195,10 +196,13 @@ static void wlan_tx_queue(wlan_private *priv, struct sk_buff *skb)
 
        WARN_ON(priv->adapter->tx_queue_idx >= NR_TX_QUEUE);
        adapter->tx_queue_ps[adapter->tx_queue_idx++] = skb;
-       if (adapter->tx_queue_idx == NR_TX_QUEUE)
+       if (adapter->tx_queue_idx == NR_TX_QUEUE) {
                netif_stop_queue(priv->wlan_dev.netdev);
-       else
+               netif_stop_queue(priv->mesh_dev);
+       } else {
                netif_start_queue(priv->wlan_dev.netdev);
+               netif_start_queue(priv->mesh_dev);
+       }
 
        spin_unlock(&adapter->txqueue_lock);
 }
@@ -279,6 +283,8 @@ void libertas_send_tx_feedback(wlan_private * priv)
        libertas_upload_rx_packet(priv, adapter->currenttxskb);
        adapter->currenttxskb = NULL;
        priv->adapter->TxLockFlag = 0;
-       if (priv->adapter->connect_status == libertas_connected)
+       if (priv->adapter->connect_status == libertas_connected) {
                netif_wake_queue(priv->wlan_dev.netdev);
+               netif_wake_queue(priv->mesh_dev);
+       }
 }