diff options
| author | Kiran Kumar Lokere <klokere@codeaurora.org> | 2016-08-04 18:47:33 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-13 18:27:16 -0700 |
| commit | 5ea22bcb56336898ea8798e65044c3d366d13c0d (patch) | |
| tree | efb79e32342d6db71cbc804240eb054b4b72ad39 | |
| parent | cd60427e60725175df0a71b39a06074f6c337be9 (diff) | |
qcacld-3.0: Check if vdev is up before sending vdev down to FW
When auth timeout failure happens, as part of clean up process
vdev down is sent to FW but the vdev up happens only after the
assoc response is received. Sending the vdev down to without
vdev up leads to negative vdev up count value in the FW.
Check if vdev is up before sending the vdev down.
Change-Id: Ia5394390d376c638b3976d446a6ecc98d0584159
CRs-Fixed: 1051760
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 2af766ed6a4a..57b9c351c38d 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1400,17 +1400,21 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info, peer, false); } - if (wmi_unified_vdev_down_send(wma->wmi_handle, + if (wma->interfaces[resp_event->vdev_id].vdev_up) { + if (wmi_unified_vdev_down_send(wma->wmi_handle, resp_event->vdev_id) != - QDF_STATUS_SUCCESS) { - WMA_LOGE("Failed to send vdev down cmd: vdev %d", - resp_event->vdev_id); - } else { - wma->interfaces[resp_event->vdev_id].vdev_up = false; + QDF_STATUS_SUCCESS) { + WMA_LOGE("Failed to send vdev down: vdev %d", + resp_event->vdev_id); + } else { + wma->interfaces[resp_event->vdev_id].vdev_up = + false; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE - if (mac_ctx->sap.sap_channel_avoidance) - wma_find_mcc_ap(wma, resp_event->vdev_id, false); + if (mac_ctx->sap.sap_channel_avoidance) + wma_find_mcc_ap(wma, + resp_event->vdev_id, false); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ + } } ol_txrx_vdev_flush(iface->handle); WMA_LOGD("%s, vdev_id: %d, un-pausing tx_ll_queue for VDEV_STOP rsp", @@ -2400,16 +2404,21 @@ void wma_vdev_resp_timer(void *data) peer, false); } - if (wmi_unified_vdev_down_send(wma->wmi_handle, - tgt_req->vdev_id) != QDF_STATUS_SUCCESS) { - WMA_LOGE("Failed to send vdev down cmd: vdev %d", - tgt_req->vdev_id); - } else { - wma->interfaces[tgt_req->vdev_id].vdev_up = false; + if (wma->interfaces[tgt_req->vdev_id].vdev_up) { + if (wmi_unified_vdev_down_send(wma->wmi_handle, + tgt_req->vdev_id) != + QDF_STATUS_SUCCESS) { + WMA_LOGE("Failed to send vdev down: vdev %d", + tgt_req->vdev_id); + } else { + wma->interfaces[tgt_req->vdev_id].vdev_up = + false; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE - if (mac_ctx->sap.sap_channel_avoidance) - wma_find_mcc_ap(wma, tgt_req->vdev_id, false); + if (mac_ctx->sap.sap_channel_avoidance) + wma_find_mcc_ap(wma, tgt_req->vdev_id, + false); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ + } } ol_txrx_vdev_flush(iface->handle); WMA_LOGD("%s, vdev_id: %d, un-pausing tx_ll_queue for WDA_DELETE_BSS_REQ timeout", |
