From: Hariprasad Shenai Date: Tue, 26 Apr 2016 14:40:24 +0000 (+0530) Subject: cxgb4: Avoids race and deadlock while freeing tx descriptor X-Git-Tag: MMI-PSA29.97-13-9~7934^2~199^2~5 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=fbe8077687330a55e87bc26745d4992991c101ec;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git 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 Signed-off-by: David S. Miller --- diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c index 6278e5a74b74..bad253beb8c8 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c @@ -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); }