diff options
| author | Sandeep Puligilla <spuligil@codeaurora.org> | 2017-10-17 12:33:56 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-10-17 21:55:10 -0700 |
| commit | d47b451900b710c809e0857822e42dcafa510d6a (patch) | |
| tree | 0df4fbbfc540d9ac971e855ebae6c33df17d60c9 | |
| parent | b42fd5d71b9c197cd741c66c237d66cf32ef8537 (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.c | 1 | ||||
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 3 | ||||
| -rw-r--r-- | core/wma/src/wma_main.c | 2 |
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) { |
