summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYun Park <yunp@qca.qualcomm.com>2016-03-07 17:38:27 -0800
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-03-10 13:00:41 +0530
commit94edded59250573f2a7f2733024ae17e7385b7ef (patch)
tree7d41cfffe3de2fa279b29aa4f3fc03f869cfd11e
parent7a2fea5e2f2b9c85fd7a5e24460a847307214772 (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.c8
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;