|
|
@ -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,9 +876,12 @@ 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++) { |
|
|
|
|
|
|
|
if (!adm5120_devs[i]) |
|
|
|
|
|
|
|
continue; |
|
|
|
netif_stop_queue(dev); |
|
|
|
netif_stop_queue(dev); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
dev->trans_start = jiffies; |
|
|
|
dev->trans_start = jiffies; |
|
|
|
|
|
|
|
|
|
|
|