qcacld-3.0: Update netif queue timestamp to avoid watchdog
Update netif queue timestamp while stopping queues to avoid NETDEV watchdog CRs-Fixed: 983687 Change-Id: Ifb0777001fead64836f1ea38eb8a3becc47ecac2
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
13644679a2
commit
89223f7e36
@@ -370,11 +370,11 @@ static void __hdd_softap_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||
hdd_context_t *hdd_ctx;
|
||||
struct netdev_queue *txq;
|
||||
int i;
|
||||
|
||||
DPTRACE(qdf_dp_trace(NULL, QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
|
||||
NULL, 0));
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_SAP_DATA, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Transmission timeout occurred", __func__);
|
||||
/* Getting here implies we disabled the TX queues for too
|
||||
* long. Queues are disabled either because of disassociation
|
||||
* or low resource scenarios. In case of disassociation it is
|
||||
@@ -387,6 +387,24 @@ static void __hdd_softap_tx_timeout(struct net_device *dev)
|
||||
"%s: Recovery in Progress. Ignore!!!", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_SAP_DATA, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Transmission timeout occurred jiffies %lu trans_start %lu"
|
||||
, __func__, jiffies, dev->trans_start);
|
||||
|
||||
for (i = 0; i < NUM_TX_QUEUES; i++) {
|
||||
txq = netdev_get_tx_queue(dev, i);
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_DATA,
|
||||
QDF_TRACE_LEVEL_ERROR,
|
||||
"Queue%d status: %d txq->trans_start %lu",
|
||||
i, netif_tx_queue_stopped(txq), txq->trans_start);
|
||||
}
|
||||
|
||||
wlan_hdd_display_netif_queue_history(hdd_ctx);
|
||||
ol_tx_dump_flow_pool_info();
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_ERROR,
|
||||
"carrier state: %d", netif_carrier_ok(dev));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -583,6 +583,8 @@ QDF_STATUS hdd_ibss_get_sta_id(hdd_station_ctx_t *pHddStaCtx,
|
||||
*/
|
||||
static void __hdd_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||
hdd_context_t *hdd_ctx;
|
||||
struct netdev_queue *txq;
|
||||
int i = 0;
|
||||
|
||||
@@ -601,13 +603,16 @@ static void __hdd_tx_timeout(struct net_device *dev)
|
||||
|
||||
for (i = 0; i < NUM_TX_QUEUES; i++) {
|
||||
txq = netdev_get_tx_queue(dev, i);
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_INFO,
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_ERROR,
|
||||
"Queue%d status: %d txq->trans_start %lu",
|
||||
i, netif_tx_queue_stopped(txq), txq->trans_start);
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_INFO,
|
||||
"carrier state: %d", netif_carrier_ok(dev));
|
||||
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
wlan_hdd_display_netif_queue_history(hdd_ctx);
|
||||
ol_tx_dump_flow_pool_info();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -980,6 +985,27 @@ static void wlan_hdd_update_queue_oper_stats(hdd_adapter_t *adapter,
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_update_txq_timestamp() - update txq timestamp
|
||||
* @dev: net device
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void wlan_hdd_update_txq_timestamp(struct net_device *dev)
|
||||
{
|
||||
struct netdev_queue *txq;
|
||||
int i;
|
||||
bool unlock;
|
||||
|
||||
for (i = 0; i < NUM_TX_QUEUES; i++) {
|
||||
txq = netdev_get_tx_queue(dev, i);
|
||||
unlock = __netif_tx_trylock(txq);
|
||||
txq_trans_update(txq);
|
||||
if (unlock == true)
|
||||
__netif_tx_unlock(txq);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_netif_queue_control() - Use for netif_queue related actions
|
||||
* @adapter: adapter handle
|
||||
@@ -1014,8 +1040,10 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
|
||||
|
||||
case WLAN_STOP_ALL_NETIF_QUEUE:
|
||||
spin_lock_bh(&adapter->pause_map_lock);
|
||||
if (!adapter->pause_map)
|
||||
if (!adapter->pause_map) {
|
||||
netif_tx_stop_all_queues(adapter->dev);
|
||||
wlan_hdd_update_txq_timestamp(adapter->dev);
|
||||
}
|
||||
adapter->pause_map |= (1 << reason);
|
||||
spin_unlock_bh(&adapter->pause_map_lock);
|
||||
break;
|
||||
@@ -1038,8 +1066,10 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
|
||||
|
||||
case WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER:
|
||||
spin_lock_bh(&adapter->pause_map_lock);
|
||||
if (!adapter->pause_map)
|
||||
if (!adapter->pause_map) {
|
||||
netif_tx_stop_all_queues(adapter->dev);
|
||||
wlan_hdd_update_txq_timestamp(adapter->dev);
|
||||
}
|
||||
adapter->pause_map |= (1 << reason);
|
||||
netif_carrier_off(adapter->dev);
|
||||
spin_unlock_bh(&adapter->pause_map_lock);
|
||||
@@ -1056,16 +1086,20 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
|
||||
|
||||
case WLAN_NETIF_TX_DISABLE:
|
||||
spin_lock_bh(&adapter->pause_map_lock);
|
||||
if (!adapter->pause_map)
|
||||
if (!adapter->pause_map) {
|
||||
netif_tx_disable(adapter->dev);
|
||||
wlan_hdd_update_txq_timestamp(adapter->dev);
|
||||
}
|
||||
adapter->pause_map |= (1 << reason);
|
||||
spin_unlock_bh(&adapter->pause_map_lock);
|
||||
break;
|
||||
|
||||
case WLAN_NETIF_TX_DISABLE_N_CARRIER:
|
||||
spin_lock_bh(&adapter->pause_map_lock);
|
||||
if (!adapter->pause_map)
|
||||
if (!adapter->pause_map) {
|
||||
netif_tx_disable(adapter->dev);
|
||||
wlan_hdd_update_txq_timestamp(adapter->dev);
|
||||
}
|
||||
adapter->pause_map |= (1 << reason);
|
||||
netif_carrier_off(adapter->dev);
|
||||
spin_unlock_bh(&adapter->pause_map_lock);
|
||||
@@ -1080,7 +1114,6 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
|
||||
wlan_hdd_process_peer_unauthorised_pause(adapter);
|
||||
spin_unlock_bh(&adapter->pause_map_lock);
|
||||
|
||||
|
||||
wlan_hdd_update_queue_oper_stats(adapter, action, reason);
|
||||
|
||||
adapter->queue_oper_history[adapter->history_index].time =
|
||||
|
Reference in New Issue
Block a user