summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Liu <qiliu@codeaurora.org>2016-12-22 20:22:09 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-27 07:36:53 -0800
commitc67c08fc61bd2fbbbcd13dec3876c733f551abb9 (patch)
tree610b37de66f8848bf2d00026f80700fda34f1b96
parent104303446f464d85926b3dbf2d1b1f7984ee80e9 (diff)
qcacld-2.0: Avoid driver exit blocked in reloading
There is a deadlock scenario in static driver: When wlan is turned off, then hdd_stop is called which leads to kickstart_driver_handler scheduled in workqueue, meanwhile if user has turned on wifi in another mode, fwpath_change_handler will call vos_load_unload_protect, if this just happens before kickstart_driver_handler really scheduled, driver exit will be blocked by load/unload protect, at the same time, fwpath_change_handler is waiting for driver exit finish. The fix is to remove load/unload protect operation in kickstart_driver_handler, because it's in workqueue, and as long as work is queued, loading driver will wait it done in current design. Change-Id: I883299f6fff7d011f91b5664220898b3d3c2d391 CRs-Fixed: 1104873
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c10
1 files changed, 0 insertions, 10 deletions
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 4ad7bbd7e3b8..4e54a01cbd62 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -9286,18 +9286,8 @@ static inline int wlan_hdd_stop_can_enter_lowpower(hdd_adapter_t *adapter)
*/
static void kickstart_driver_handler(struct work_struct *work)
{
- bool ready;
-
- ready = vos_is_load_unload_ready(__func__);
- if (!ready) {
- VOS_ASSERT(0);
- return;
- }
-
- vos_load_unload_protect(__func__);
hdd_driver_exit();
wlan_hdd_inited = 0;
- vos_load_unload_unprotect(__func__);
}
static DECLARE_WORK(kickstart_driver_work, kickstart_driver_handler);