diff options
| author | Himanshu Agarwal <himanaga@qti.qualcomm.com> | 2015-10-15 10:38:46 +0530 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2015-10-15 18:08:43 -0700 |
| commit | 3302f8b3bc08dee72302fd9d4920f91ab9e78a82 (patch) | |
| tree | 113847f4c225ba1ea48b4f621e89fdbf09e51aa5 | |
| parent | dbeb471329087401eed44b874e86e77a47535641 (diff) | |
Revert "qcacld 2.0: Changes to avoid taking spinlock on whole function"
This reverts commit I47a54d6777413ee42a4f451d2a4925e3fd6e958a.
There is issue of double spin unlock due to which crash is happening.
Change-Id: Ief8fb9028bf1a11a84d05d914c6dbab7f6194e7c
CRs-Fixed: 920024
| -rw-r--r-- | CORE/CLD_TXRX/TLSHIM/tl_shim.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 6a0efe7e62fe..585efe38ec93 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -495,28 +495,27 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, } #endif - adf_os_spin_lock_bh(&tl_shim->mgmt_lock); param_tlvs = (WMI_MGMT_RX_EVENTID_param_tlvs *) data; if (!param_tlvs) { TLSHIM_LOGE("Get NULL point message from FW"); - goto err; + return 0; } hdr = param_tlvs->hdr; if (!hdr) { TLSHIM_LOGE("Rx event is NULL"); - goto err; + return 0; } if (hdr->buf_len < sizeof(struct ieee80211_frame)) { TLSHIM_LOGE("Invalid rx mgmt packet"); - goto err; + return 0; } rx_pkt = vos_mem_malloc(sizeof(*rx_pkt)); if (!rx_pkt) { TLSHIM_LOGE("Failed to allocate rx packet"); - goto err; + return 0; } vos_mem_zero(rx_pkt, sizeof(*rx_pkt)); @@ -566,7 +565,7 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, TLSHIM_LOGE("%s: Failed to allocate wbuf for mgmt rx len(%u)", __func__, hdr->buf_len); vos_mem_free(rx_pkt); - goto err; + return 0; } adf_nbuf_put_tail(wbuf, hdr->buf_len); @@ -612,7 +611,7 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, if (!tl_shim->mgmt_rx) { TLSHIM_LOGE("Not registered for Mgmt rx, dropping the frame"); vos_pkt_return_packet(rx_pkt); - goto err; + return 0; } /* If it is a beacon/probe response, save it for future use */ @@ -665,7 +664,6 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, } } } - adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); #ifdef WLAN_FEATURE_11W if (mgt_type == IEEE80211_FC0_TYPE_MGT && @@ -760,10 +758,6 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, } #endif /* WLAN_FEATURE_11W */ return tl_shim->mgmt_rx(vos_ctx, rx_pkt); - -err: - adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); - return 0; } static int tlshim_mgmt_rx_wmi_handler(void *context, u_int8_t *data, @@ -775,7 +769,7 @@ static int tlshim_mgmt_rx_wmi_handler(void *context, u_int8_t *data, VOS_STATUS ret = VOS_STATUS_SUCCESS; if (vos_is_logp_in_progress(VOS_MODULE_ID_TL, NULL)) { - TLSHIM_LOGE("%s: LOGP in progress\n", __func__); + TLSHIM_LOGE("%s: LOPG in progress\n", __func__); return (-1); } @@ -789,7 +783,9 @@ static int tlshim_mgmt_rx_wmi_handler(void *context, u_int8_t *data, return (-1); } + adf_os_spin_lock_bh(&tl_shim->mgmt_lock); ret = tlshim_mgmt_rx_process(context, data, data_len, FALSE, 0); + adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); return ret; } @@ -809,13 +805,12 @@ int tlshim_mgmt_roam_event_ind(void *context, u_int32_t vdev_id) return ret; } - adf_os_spin_lock_bh(&tl_shim->mgmt_lock); if (tl_shim->last_beacon_data && tl_shim->last_beacon_len) { - adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); + adf_os_spin_lock_bh(&tl_shim->mgmt_lock); ret = tlshim_mgmt_rx_process(context, tl_shim->last_beacon_data, tl_shim->last_beacon_len, TRUE, vdev_id); + adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); } - adf_os_spin_unlock_bh(&tl_shim->mgmt_lock); return ret; } |
