summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSourav Mohapatra <mohapatr@codeaurora.org>2020-06-16 16:25:08 +0530
committerKumar Anand <kumaranand@google.com>2020-07-22 00:00:17 +0000
commitf9d54215e9aead406c43008c1bc9b73751a00adf (patch)
tree26da53f7b0db150bb79ad9328565cdb87b94688b
parentc2a7e0a86ae97290f1eb9a42ddc2ed0c62c63c7a (diff)
downloadqcacld-f9d54215e9aead406c43008c1bc9b73751a00adf.tar.gz
qcacld-3.0: Wait for driver recovery while WiFi ON/OFF
Currently the driver is not synchronized properly between SSR and wifi ON/OFF. This causes a potential deadlock. To synchronize, add a wait in wlan_hdd_state_ctrl_param_write which is called during WiFi ON/OFF. This wait will ensure that the driver recovery is complete before proceeding with ON/OFF. Bug: 157090295 Change-Id: Ia1c4f8d7076d77c591276ee380b55a747cf606bd CRs-Fixed: 2701513
-rw-r--r--core/hdd/src/wlan_hdd_driver_ops.c5
-rw-r--r--core/hdd/src/wlan_hdd_main.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c
index efee8e24a3..b46b22775f 100644
--- a/core/hdd/src/wlan_hdd_driver_ops.c
+++ b/core/hdd/src/wlan_hdd_driver_ops.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2018,2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -413,12 +413,12 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const struct hif_bus_i
goto err_hdd_deinit;
+ hdd_start_complete(0);
if (reinit) {
cds_set_recovery_in_progress(false);
} else {
cds_set_load_in_progress(false);
cds_set_driver_loaded(true);
- hdd_start_complete(0);
}
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT);
@@ -449,6 +449,7 @@ err_init_qdf_ctx:
hdd_remove_pm_qos(dev);
hdd_stop_driver_ops_timer();
+ hdd_start_complete(0);
mutex_unlock(&hdd_init_deinit_lock);
return check_for_probe_defer(ret);
}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 4ecd4a85e1..e76b17f73e 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -12153,7 +12153,7 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
goto exit;
}
- if (!cds_is_driver_loaded()) {
+ if (!cds_is_driver_loaded() || cds_is_driver_recovering()) {
init_completion(&wlan_start_comp);
rc = wait_for_completion_timeout(&wlan_start_comp,
msecs_to_jiffies(HDD_WLAN_START_WAIT_TIME));