disable queue of all interfaces when tx ring is full
SVN-Revision: 10073
This commit is contained in:
		@@ -843,6 +843,7 @@ static int adm5120_if_hard_start_xmit(struct sk_buff *skb,
 | 
				
			|||||||
	struct adm5120_if_priv *priv = netdev_priv(dev);
 | 
						struct adm5120_if_priv *priv = netdev_priv(dev);
 | 
				
			||||||
	unsigned int entry;
 | 
						unsigned int entry;
 | 
				
			||||||
	unsigned long data;
 | 
						unsigned long data;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* lock switch irq */
 | 
						/* lock switch irq */
 | 
				
			||||||
	spin_lock_irq(&tx_lock);
 | 
						spin_lock_irq(&tx_lock);
 | 
				
			||||||
@@ -875,8 +876,11 @@ static int adm5120_if_hard_start_xmit(struct sk_buff *skb,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	cur_txl++;
 | 
						cur_txl++;
 | 
				
			||||||
	if (cur_txl == dirty_txl + TX_QUEUE_LEN) {
 | 
						if (cur_txl == dirty_txl + TX_QUEUE_LEN) {
 | 
				
			||||||
		/* FIXME: stop queue for all devices */
 | 
							for (i = 0; i < SWITCH_NUM_PORTS; i++) {
 | 
				
			||||||
		netif_stop_queue(dev);
 | 
								if (!adm5120_devs[i])
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								netif_stop_queue(dev);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dev->trans_start = jiffies;
 | 
						dev->trans_start = jiffies;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user