summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYue Ma <yuem@qca.qualcomm.com>2014-01-28 16:33:11 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-31 17:28:05 -0800
commit89eb5c2f36ca044813f2bdbcad4002cb49851e26 (patch)
treeaa9393d7fc4ed512b2b8928c8203ed9c6f0592b9
parent17b651403c29ff5c9b8b16b3952d1e16448877b2 (diff)
qcacld: Set SSR flag right after target assert happens
In order to avoid a race condition between SSR and driver unloading, we need set SSR flag immediately after target assert happens and check it when driver unloads. Change-Id: I3d9718e91f413fe0c822db8129f7fea410e63c6a CRs-Fixed: 606725
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c1
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c3
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c4
3 files changed, 6 insertions, 2 deletions
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 96681213fda0..20a179d3f9da 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -1492,7 +1492,6 @@ VOS_STATUS hdd_wlan_shutdown(void)
}
#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC)
- vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, TRUE);
pHddCtx->isLogpInProgress = TRUE;
#endif
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 2d4c4a25dfec..4c40030bf52e 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10036,7 +10036,8 @@ static void hdd_driver_exit(void)
}
else
{
- while(pHddCtx->isLogpInProgress) {
+ while(pHddCtx->isLogpInProgress ||
+ vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
"%s:SSR in Progress; block rmmod for 1 second!!!", __func__);
msleep(1000);
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index 2c0973a83cde..e632876fa4f3 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -571,6 +571,10 @@ void ol_target_failure(void *instance, A_STATUS status)
printk("XXX TARGET ASSERTED XXX\n");
scn->target_status = OL_TRGET_STATUS_RESET;
+#if defined(QCA_WIFI_2_0) && !defined(QCA_WIFI_ISOC)
+ vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, TRUE);
+#endif
+
#ifndef CONFIG_CNSS
if (HIFDiagReadMem(scn->hif_hdl,
host_interest_item_address(scn->target_type, offsetof(struct host_interest_s, hi_failure_state)),