From 83044c26d3b736d1d249ecea0d5dfa4ae7fc1b8b Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 13 Aug 2018 15:00:44 -0700 Subject: [PATCH] qcacld-3.0: Remove redundant recovery-enabled checks cds_trigger_recovery() already checks for various conditions before actually triggering recovery. One of these checks ensures that recovery is enabled, but some callers are checking to see if recovery is enabled before calling cds_trigger_recovery() as well. Because of this, some important checks are skipped, and crashes can occur when they should not. Remove the redundant checks at the call sites for cds_trigger_recovery() so that all of the recovery conditions are properly handled, and the wlan driver avoids crashing when it should not. Change-Id: I8c26a002b66496a1eb06263f3f8b91ead739e3ac CRs-Fixed: 2296008 --- core/dp/htt/htt_rx_ll.c | 5 +---- core/hdd/src/wlan_hdd_main.c | 5 +---- core/mac/src/pe/lim/lim_utils.c | 7 +----- core/wma/src/wma_dev_if.c | 40 +++++++-------------------------- 4 files changed, 11 insertions(+), 46 deletions(-) diff --git a/core/dp/htt/htt_rx_ll.c b/core/dp/htt/htt_rx_ll.c index cb9caa73dadd..95d171f04116 100644 --- a/core/dp/htt/htt_rx_ll.c +++ b/core/dp/htt/htt_rx_ll.c @@ -990,10 +990,7 @@ qdf_nbuf_t htt_rx_hash_list_lookup(struct htt_pdev_t *pdev, if (!netbuf) { qdf_print("rx hash: %s: no entry found for %pK!\n", __func__, (void *)paddr); - if (cds_is_self_recovery_enabled()) - cds_trigger_recovery(QDF_RX_HASH_NO_ENTRY_FOUND); - else - HTT_ASSERT_ALWAYS(0); + cds_trigger_recovery(QDF_RX_HASH_NO_ENTRY_FOUND); } return netbuf; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 88b9437d07ca..c9a2f08931d1 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -14234,10 +14234,7 @@ void hdd_drv_ops_inactivity_handler(void) return; } - if (cds_is_self_recovery_enabled()) - cds_trigger_recovery(QDF_REASON_UNSPECIFIED); - else - QDF_BUG(0); + cds_trigger_recovery(QDF_REASON_UNSPECIFIED); } void hdd_pld_ipa_uc_shutdown_pipes(void) diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index cdc46db78135..0afe87dd81e2 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -5965,12 +5965,7 @@ bool lim_set_nss_change(tpAniSirGlobal pMac, tpPESession psessionEntry, if (!rxNss) { pe_err("Invalid rxNss value: %u", rxNss); - if (!cds_is_driver_recovering()) { - if (cds_is_self_recovery_enabled()) - cds_trigger_recovery(QDF_REASON_UNSPECIFIED); - else - QDF_BUG(0); - } + cds_trigger_recovery(QDF_REASON_UNSPECIFIED); } tempParam.rxNss = rxNss; diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index d3e54efc2d0b..a1ef1880e908 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -842,17 +842,8 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle, return status; send_fail_rsp: - if (!cds_is_driver_recovering()) { - if (cds_is_self_recovery_enabled()) { - WMA_LOGE("rcvd del_self_sta without del_bss, trigger recovery, vdev_id %d", - vdev_id); - cds_trigger_recovery(QDF_REASON_UNSPECIFIED); - } else { - WMA_LOGE("rcvd del_self_sta without del_bss, BUG_ON(), vdev_id %d", - vdev_id); - QDF_BUG(0); - } - } + WMA_LOGE("rcvd del_self_sta without del_bss; vdev_id:%d", vdev_id); + cds_trigger_recovery(QDF_REASON_UNSPECIFIED); status = QDF_STATUS_E_FAILURE; send_rsp: @@ -2784,16 +2775,8 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma, WMA_TARGET_REQ_TYPE_VDEV_STOP, false); if (!req_msg || req_msg->msg_type != WMA_DELETE_BSS_REQ) { - if (!cds_is_driver_recovering()) { - if (cds_is_self_recovery_enabled()) { - WMA_LOGE("BSS is in started state before vdev start, trigger recovery"); - cds_trigger_recovery( - QDF_REASON_UNSPECIFIED); - } else { - WMA_LOGE("BSS is in started state before vdev start, BUG_ON()"); - QDF_BUG(0); - } - } + WMA_LOGE("BSS is in started state before vdev start"); + cds_trigger_recovery(QDF_REASON_UNSPECIFIED); } } @@ -3196,18 +3179,11 @@ int wma_peer_delete_handler(void *handle, uint8_t *cmd_param_info, return status; } -static void wma_trigger_recovery_assert_on_fw_timeout( - uint16_t wma_msg) +static void wma_trigger_recovery_assert_on_fw_timeout(uint16_t wma_msg) { - if (cds_is_self_recovery_enabled()) { - WMA_LOGE("%s timed out, triggering recovery", - mac_trace_get_wma_msg_string(wma_msg)); - cds_trigger_recovery(QDF_REASON_UNSPECIFIED); - } else { - WMA_LOGE("%s timed out, BUG_ON()", - mac_trace_get_wma_msg_string(wma_msg)); - QDF_BUG(0); - } + WMA_LOGE("%s timed out, triggering recovery", + mac_trace_get_wma_msg_string(wma_msg)); + cds_trigger_recovery(QDF_REASON_UNSPECIFIED); } static inline bool wma_crash_on_fw_timeout(bool crash_enabled)