cxgb4: Avoids race and deadlock while freeing tx descriptor
There could be race between t4_eth_xmit() and t4_free_sge_resources() while freeing tx descriptors, take txq lock in t4_free_sge_resources(). We need to stop the xmit frame path which runs in bottom half context while unloading the driver using _bh variant of the lock. This is to prevent the deadlock between xmit and driver unload. Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ed98c85ee9
commit
fbe8077687
@ -3006,7 +3006,9 @@ void t4_free_sge_resources(struct adapter *adap)
|
||||
if (etq->q.desc) {
|
||||
t4_eth_eq_free(adap, adap->mbox, adap->pf, 0,
|
||||
etq->q.cntxt_id);
|
||||
__netif_tx_lock_bh(etq->txq);
|
||||
free_tx_desc(adap, &etq->q, etq->q.in_use, true);
|
||||
__netif_tx_unlock_bh(etq->txq);
|
||||
kfree(etq->q.sdesc);
|
||||
free_txq(adap, &etq->q);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user