diff options
| author | Frank Liu <qiliu@codeaurora.org> | 2016-12-22 20:22:09 +0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-12-27 07:36:53 -0800 |
| commit | c67c08fc61bd2fbbbcd13dec3876c733f551abb9 (patch) | |
| tree | 610b37de66f8848bf2d00026f80700fda34f1b96 | |
| parent | 104303446f464d85926b3dbf2d1b1f7984ee80e9 (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.c | 10 |
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); |
