From 62bf738e155a1cc9bd509a6f845beef1e505965a Mon Sep 17 00:00:00 2001 From: Alok Kumar Date: Mon, 8 Oct 2018 16:53:39 +0530 Subject: [PATCH] qcacld-3.0: Address the error path during WLAN suspend In __wlan_hdd_cfg80211_suspend_wlan(), suspend process is bailed out if hdd_suspend_wlan() < 0 due to which RX thread waits for completion of ol_resume_rx_event. Do completion of ol_resume_rx_event in __wlan_hdd_cfg80211_suspend_wlan for error path to resume RX thread. Change-Id: I8bf056f82d80e063b2e32a1a6573d7a36ced67dc CRs-Fixed: 2327238 --- core/cds/inc/cds_sched.h | 2 +- core/hdd/src/wlan_hdd_power.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h index d62f03f95c56..3393e3cfc5d0 100644 --- a/core/cds/inc/cds_sched.h +++ b/core/cds/inc/cds_sched.h @@ -106,7 +106,7 @@ typedef struct _cds_sched_context { /* Completion object to suspend OL rx thread */ struct completion ol_suspend_rx_event; - /* Completion objext to resume OL rx thread */ + /* Completion object to resume OL rx thread */ struct completion ol_resume_rx_event; /* Completion object for OL Rxthread shutdown */ diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index d4e118144683..80302a4bec05 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1789,8 +1789,10 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, if (hdd_ctx->enable_dp_rx_threads) dp_txrx_suspend(cds_get_context(QDF_MODULE_ID_SOC)); - if (hdd_suspend_wlan() < 0) + if (hdd_suspend_wlan() < 0) { + hdd_err("Failed to suspend WLAN"); goto resume_all; + } MTRACE(qdf_trace(QDF_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_SUSPEND_WLAN, @@ -1803,6 +1805,11 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, return 0; resume_all: + /* Resume tlshim Rx thread */ + if (hdd_ctx->is_ol_rx_thread_suspended) { + cds_resume_rx_thread(); + hdd_ctx->is_ol_rx_thread_suspended = false; + } scheduler_resume(); hdd_ctx->is_scheduler_suspended = false; resume_tx: