[adm5120] disable queue of all interfaces when tx ring is full
authorGabor Juhos <juhosg@openwrt.org>
Tue, 1 Jan 2008 11:11:50 +0000 (11:11 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 1 Jan 2008 11:11:50 +0000 (11:11 +0000)
SVN-Revision: 10073

target/linux/adm5120/files/drivers/net/adm5120sw.c

index c8c3f1d5b2aceca117e5855d8dd82be36ae83eeb..234b6c5146d0861ed09689bc4fb5c44b26610a20 100644 (file)
@@ -843,6 +843,7 @@ static int adm5120_if_hard_start_xmit(struct sk_buff *skb,
        struct adm5120_if_priv *priv = netdev_priv(dev);
        unsigned int entry;
        unsigned long data;
+       int i;
 
        /* lock switch irq */
        spin_lock_irq(&tx_lock);
@@ -875,8 +876,11 @@ static int adm5120_if_hard_start_xmit(struct sk_buff *skb,
 
        cur_txl++;
        if (cur_txl == dirty_txl + TX_QUEUE_LEN) {
-               /* FIXME: stop queue for all devices */
-               netif_stop_queue(dev);
+               for (i = 0; i < SWITCH_NUM_PORTS; i++) {
+                       if (!adm5120_devs[i])
+                               continue;
+                       netif_stop_queue(dev);
+               }
        }
 
        dev->trans_start = jiffies;