summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandeep Puligilla <spuligil@codeaurora.org>2017-10-17 12:33:56 -0700
committersnandini <snandini@codeaurora.org>2017-10-17 21:55:10 -0700
commitd47b451900b710c809e0857822e42dcafa510d6a (patch)
tree0df4fbbfc540d9ac971e855ebae6c33df17d60c9
parentb42fd5d71b9c197cd741c66c237d66cf32ef8537 (diff)
qcacld-3.0: Allow recovery during firmware down
Host is triggering crash during vdev response timeout handler when firmware is down. If firmware is down, Send failure response to upper layer from WMA vdev timeout response handler so that recovery can complete. Change-Id: Ib5cf2c539fded700b07a694fa6771c9ba8550173 CRs-Fixed: 2128282
-rw-r--r--core/hdd/src/wlan_hdd_driver_ops.c1
-rw-r--r--core/wma/src/wma_dev_if.c3
-rw-r--r--core/wma/src/wma_main.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c
index c8da11f2b735..ac13fdce647b 100644
--- a/core/hdd/src/wlan_hdd_driver_ops.c
+++ b/core/hdd/src/wlan_hdd_driver_ops.c
@@ -1357,6 +1357,7 @@ static void wlan_hdd_pld_uevent(struct device *dev,
{
ENTER();
+ hdd_info("pld event %d", uevent->uevent);
switch (uevent->uevent) {
case PLD_RECOVERY:
cds_set_recovery_in_progress(true);
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index e474b02054d3..81c6630c5dac 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -2810,7 +2810,8 @@ static inline bool wma_crash_on_fw_timeout(bool crash_enabled)
if (cds_is_driver_unloading())
return false;
- if (!cds_is_fw_down())
+ /* Firmware is down send failure response */
+ if (cds_is_fw_down())
return false;
return crash_enabled;
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 2687d9097e57..b93d02542967 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -1865,6 +1865,8 @@ static void wma_cleanup_vdev_resp_queue(tp_wma_handle wma)
return;
}
+ WMA_LOGD(FL("Cleaning up vdev resp queue"));
+
/* peek front, and then cleanup it in wma_vdev_resp_timer */
while (qdf_list_peek_front(&wma->vdev_resp_queue, &node1) ==
QDF_STATUS_SUCCESS) {