summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-02-07 17:28:09 +0530
committerPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-02-07 17:29:32 +0530
commit01fdac088553e2f608ced4f994eead67482a728a (patch)
tree3d482adc789a8954d29f34d68df18d062dbbe17a
parent20b976069f79fdce744134939fe1e86db3da3367 (diff)
parent5acabcff3611784218cb8e9a901ba423e15db180 (diff)
Merge remote-tracking branch 'origin/caf/caf-wlan/master'
Release 1.0.0.30 QCACLD WLAN Driver * origin/caf/caf-wlan/master: qcacld: Release 1.0.0.30 Caf Staging qcacld: Reduce the frequency of DFS kernel logging wlan: CLD crash wiht too many log fix qcacld: Fix of kernel panic caused by dangling pMac pointer qcacld: Populate bssid field after roaming ADD_BSS qcacld: Fix of double free panic for P2P message qcacld: Fix of kernel panic in LIM MLM response handler
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c2
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c15
-rw-r--r--CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c20
-rw-r--r--CORE/SERVICES/WMA/wma.c44
5 files changed, 61 insertions, 24 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index fcd2955aaf84..ef00f2d6fe26 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -915,7 +915,7 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(void *vos_ctx, u_int8_t sta_id,
}
if (!tl_shim->sta_info[sta_id].registered) {
- TLSHIM_LOGE("Staion is not yet registered for data service");
+ TLSHIM_LOGW("Staion is not yet registered for data service");
return skb;
}
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 9029ab40fb51..cdf522fde2e2 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 29
+#define QWLAN_VERSION_BUILD 30
-#define QWLAN_VERSIONSTR "1.0.0.29"
+#define QWLAN_VERSIONSTR "1.0.0.30"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index 489b96689ab1..4cff521738f2 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -3611,7 +3611,8 @@ static void limProcessSwitchChannelJoinReq(tpAniSirGlobal pMac, tpPESession pses
goto error;
}
- if ( (NULL == psessionEntry ) || (NULL == psessionEntry->pLimMlmJoinReq) )
+ if ( (NULL == psessionEntry ) || (NULL == psessionEntry->pLimMlmJoinReq) ||
+ (NULL == psessionEntry->pLimJoinReq) )
{
PELOGE(limLog(pMac, LOGE, FL("invalid pointer!!"));)
goto error;
@@ -3674,8 +3675,16 @@ static void limProcessSwitchChannelJoinReq(tpAniSirGlobal pMac, tpPESession pses
error:
if(NULL != psessionEntry)
{
- vos_mem_free(psessionEntry->pLimMlmJoinReq);
- psessionEntry->pLimMlmJoinReq = NULL;
+ if (psessionEntry->pLimMlmJoinReq)
+ {
+ vos_mem_free(psessionEntry->pLimMlmJoinReq);
+ psessionEntry->pLimMlmJoinReq = NULL;
+ }
+ if (psessionEntry->pLimJoinReq)
+ {
+ vos_mem_free(psessionEntry->pLimJoinReq);
+ psessionEntry->pLimJoinReq = NULL;
+ }
mlmJoinCnf.sessionId = psessionEntry->peSessionId;
}
else
diff --git a/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c b/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
index 7458461c1cfd..09203a357999 100644
--- a/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
+++ b/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
@@ -595,6 +595,7 @@ dfs_process_phyerr_bb_tlv(struct ath_dfs *dfs, void *buf, u_int16_t datalen,
{
struct rx_radar_status rs;
struct rx_search_fft_report rsfr;
+ static int invalid_phyerr_count = 0;
OS_MEMZERO(&rs, sizeof(rs));
@@ -605,14 +606,25 @@ dfs_process_phyerr_bb_tlv(struct ath_dfs *dfs, void *buf, u_int16_t datalen,
*/
rs.rssi = rssi;
rs.raw_tsf = rs_tstamp;
-
/*
* Try parsing the TLV set.
*/
if (! tlv_parse_frame(dfs, &rs, &rsfr, buf, datalen, rssi)){
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "%s[%d]:DFS tlv parse frame FAILED",
- __func__,__LINE__);
- return (0);
+ invalid_phyerr_count++;
+ /*
+ * Print only at every 2 power times
+ * to avoid flushing of the kernel
+ * logs, since the frequency of
+ * invalid phyerrors is very high
+ * in noisy environments.
+ */
+ if ( !(invalid_phyerr_count & 0xFF) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG,
+ "%s[%d]:DFS-tlv parse failed invalid phyerror count = %d",
+ __func__,__LINE__, invalid_phyerr_count);
+ }
+ return (0);
}
/* For debugging, print what we have parsed */
radar_summary_print(dfs, &rs);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 6cfd67315154..a661cdf8ef44 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -551,7 +551,7 @@ static int wma_vdev_start_resp_handler(void *handle, u_int8_t *cmd_param_info,
return -EINVAL;
}
vos_timer_stop(&req_msg->event_timeout);
- iface = &wma->interfaces[resp_event->vdev_id];
+ iface = &wma->interfaces[resp_event->vdev_id];
if (req_msg->msg_type == WDA_CHNL_SWITCH_REQ) {
tpSwitchChannelParams params =
(tpSwitchChannelParams) req_msg->user_data;
@@ -578,6 +578,7 @@ static int wma_vdev_start_resp_handler(void *handle, u_int8_t *cmd_param_info,
wma_send_msg(wma, WDA_SWITCH_CHANNEL_RSP, (void *)params, 0);
} else if (req_msg->msg_type == WDA_ADD_BSS_REQ) {
tpAddBssParams bssParams = (tpAddBssParams) req_msg->user_data;
+ vos_mem_copy(iface->bssid, bssParams->bssId, ETH_ALEN);
wma_vdev_start_rsp(wma, bssParams, resp_event);
}
vos_timer_destroy(&req_msg->event_timeout);
@@ -1348,15 +1349,14 @@ static void wma_update_noa(struct beacon_info *beacon,
static void wma_update_probe_resp_noa(tp_wma_handle wma_handle,
struct p2p_sub_element_noa *noa_ie)
{
- tSirP2PNoaAttr *noa_attr = (tSirP2PNoaAttr *) adf_os_mem_alloc(
- NULL, sizeof(tSirP2PNoaAttr));
+ tSirP2PNoaAttr *noa_attr = (tSirP2PNoaAttr *) vos_mem_malloc(sizeof(tSirP2PNoaAttr));
WMA_LOGD("Received update NoA event");
if (!noa_attr) {
WMA_LOGE("Failed to allocate memory for tSirP2PNoaAttr");
return;
}
- adf_os_mem_set(noa_attr, 0, sizeof(tSirP2PNoaAttr));
+ vos_mem_zero(noa_attr, sizeof(tSirP2PNoaAttr));
noa_attr->index = noa_ie->index;
noa_attr->oppPsFlag = noa_ie->oppPS;
@@ -12688,11 +12688,18 @@ static int wma_process_receive_filter_clear_filter_req(tp_wma_handle wma_handle,
static void wma_data_tx_ack_work_handler(struct work_struct *ack_work)
{
- struct wma_tx_ack_work_ctx *work = container_of(ack_work,
- struct wma_tx_ack_work_ctx, ack_cmp_work);
- tp_wma_handle wma_handle = work->wma_handle;
- pWDAAckFnTxComp ack_cb =
- wma_handle->umac_data_ota_ack_cb;
+ struct wma_tx_ack_work_ctx *work;
+ tp_wma_handle wma_handle;
+ pWDAAckFnTxComp ack_cb;
+
+ if (vos_is_load_unload_in_progress(VOS_MODULE_ID_WDA, NULL)) {
+ WMA_LOGE("%s: Driver load/unload in progress", __func__);
+ return;
+ }
+
+ work = container_of(ack_work, struct wma_tx_ack_work_ctx, ack_cmp_work);
+ wma_handle = work->wma_handle;
+ ack_cb = wma_handle->umac_data_ota_ack_cb;
WMA_LOGD("Data Tx Ack Cb Status %d",
work->status);
@@ -14575,19 +14582,28 @@ static int wma_scan_event_callback(WMA_HANDLE handle, u_int8_t *data,
static void wma_mgmt_tx_ack_work_handler(struct work_struct *ack_work)
{
- struct wma_tx_ack_work_ctx *work = container_of(ack_work,
- struct wma_tx_ack_work_ctx, ack_cmp_work);
- pWDAAckFnTxComp ack_cb =
- work->wma_handle->umac_ota_ack_cb[work->sub_type];
+ struct wma_tx_ack_work_ctx *work;
+ tp_wma_handle wma_handle;
+ pWDAAckFnTxComp ack_cb;
+
+ if (vos_is_load_unload_in_progress(VOS_MODULE_ID_WDA, NULL)) {
+ WMA_LOGE("%s: Driver load/unload in progress", __func__);
+ return;
+ }
+
+ work = container_of(ack_work, struct wma_tx_ack_work_ctx, ack_cmp_work);
+ wma_handle = work->wma_handle;
+ ack_cb = wma_handle->umac_ota_ack_cb[work->sub_type];
WMA_LOGD("Tx Ack Cb SubType %d Status %d",
work->sub_type, work->status);
/* Call the Ack Cb registered by UMAC */
- ack_cb((tpAniSirGlobal)(work->wma_handle->mac_context),
+ ack_cb((tpAniSirGlobal)(wma_handle->mac_context),
work->status ? 0 : 1);
adf_os_mem_free(work);
+ wma_handle->ack_work_ctx = NULL;
}
/**