Race condition is happening when tx traffic is running and simulataneously suspend is going on. hdd_hard_start_xmit() is called under txq->__xmit_lock and in case of low descriptor scenario, it goes to pause the netif queues and trying to take adapter->pause_map_lock for doing so which is already acquired by another thread. In another thread, suspend indication is being preocessed and as a result is trying to pause netif queues with netif_action WLAN_NETIF_TX_DISABLE which takes adapter->pause_map_lock and then calls netif_tx_disable() which is trying to take txq->__xmit_lock already taken by the thread executing hdd_hard_start_xmit(). This leads to a deadlock situation. Replace netif_tx_disable() with netif_tx_stop_all_queues() as netif_tx_stop_all_queues() is doing the same thing as netif_tx_disable() only without taking the txq->__xmit_lock which prevents this deadlock. Change-Id: I5afafe6435707bd8f0e87972a740f908d06ce847 CRs-Fixed: 2030933 |
||
---|---|---|
.. | ||
htt | ||
ol/inc | ||
txrx |