mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 10:50:54 +07:00
cxgb3: Fix transmit queue stop mechanism
The last change in the Tx queue stop mechanism opens a window where the Tx queue might be stopped after pending credits returned. Tx credits are returned via a control message generated by the HW. It returns tx credits on demand, triggered by a completion bit set in selective transmit packet headers. The current code can lead to the Tx queue stopped with all pending credits returned, and the current frame not triggering a credit return. The Tx queue will then never be awaken. The driver could alternatively request a completion for packets that stop the queue. It's however safer at this point to go back to the pre-existing behaviour. Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
cdb3469778
commit
cd7e903440
@ -1107,9 +1107,15 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
}
|
||||
|
||||
q->in_use += ndesc;
|
||||
if (unlikely(credits - ndesc < q->stop_thres))
|
||||
if (USE_GTS || !should_restart_tx(q))
|
||||
t3_stop_queue(dev, qs, q);
|
||||
if (unlikely(credits - ndesc < q->stop_thres)) {
|
||||
t3_stop_queue(dev, qs, q);
|
||||
|
||||
if (should_restart_tx(q) &&
|
||||
test_and_clear_bit(TXQ_ETH, &qs->txq_stopped)) {
|
||||
q->restarts++;
|
||||
netif_wake_queue(dev);
|
||||
}
|
||||
}
|
||||
|
||||
gen = q->gen;
|
||||
q->unacked += ndesc;
|
||||
|
Loading…
Reference in New Issue
Block a user