[adm5120] disable queue of all interfaces when tx ring is full
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 1 Jan 2008 11:11:50 +0000 (11:11 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 1 Jan 2008 11:11:50 +0000 (11:11 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10073 3c298f89-4303-0410-b956-a3cf2f4a3e73

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

index c8c3f1d..234b6c5 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;