summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiran Kumar Lokere <klokere@codeaurora.org>2016-08-04 18:47:33 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-13 18:27:16 -0700
commit5ea22bcb56336898ea8798e65044c3d366d13c0d (patch)
treeefb79e32342d6db71cbc804240eb054b4b72ad39
parentcd60427e60725175df0a71b39a06074f6c337be9 (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.c41
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",