diff options
| author | Yun Park <yunp@qca.qualcomm.com> | 2016-03-07 17:38:27 -0800 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-03-10 13:00:41 +0530 |
| commit | 94edded59250573f2a7f2733024ae17e7385b7ef (patch) | |
| tree | 7d41cfffe3de2fa279b29aa4f3fc03f869cfd11e | |
| parent | 7a2fea5e2f2b9c85fd7a5e24460a847307214772 (diff) | |
qcacld: Fix deadlock at HDD IPA event_lock when roaming
For AP_DISCONNECT and STA_DISCONNECT event, SME function is called
with HDD IPA event lock held.
This causes a deadlock between HDD IPA event lock and SME global lock.
Fix by releasing HDD IPA event_lock before calling SME function.
Change-Id: Ib898d8de2c75e0e8409785cac2cb57a35d28b3e5
CRs-Fixed: 986944
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ipa.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index aae23dcde0fe..4d662fa7b202 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -4276,15 +4276,14 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, } } + vos_lock_release(&hdd_ipa->event_lock); + if (hdd_ipa_uc_sta_is_enabled(hdd_ipa)) { hdd_ipa_uc_offload_enable_disable(adapter, SIR_STA_RX_DATA_OFFLOAD, 0); vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; } #endif -#ifdef IPA_UC_OFFLOAD - vos_lock_release(&hdd_ipa->event_lock); -#endif /* IPA_UC_OFFLOAD */ break; case WLAN_AP_DISCONNECT: @@ -4318,12 +4317,13 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, } } + vos_lock_release(&hdd_ipa->event_lock); + if (hdd_ipa_uc_is_enabled(hdd_ipa)) { hdd_ipa_uc_offload_enable_disable(adapter, SIR_AP_RX_DATA_OFFLOAD, 0); vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; } - vos_lock_release(&hdd_ipa->event_lock); #endif /* IPA_UC_OFFLOAD */ break; |
