qcacld-2.0: Check if vdev is created before LL stats query
Link Layer(LL) stats query is received in host in a corner/race condition between the events "change iface" and "start ap" in HDD where vdev is not created yet ie.as part of "change iface" in HDD, host does close session (VDEV DELETE) and as part of start ap, host invokes open session(VDEV CREATE). It leads to an exception issue in firmware since FW receives REQUEST_LINK_STATS WMI for a deleted VDEV. This fix adds a boolean variable vdev_active to vdev structure(wma_txrx_node), which is set to true once vdev is created. vdev_active is checked for TRUE before sending LL stats query to FW with WMI command. Change-Id: Ifcc986c3352e4e66da35b8d6c489d98dbe61401d CRs-Fixed: 987734
This commit is contained in:
parent
528d045c0a
commit
2017373446
|
@ -8421,6 +8421,8 @@ static ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle,
|
|||
self_sta_req->sessionId);
|
||||
goto end;
|
||||
}
|
||||
|
||||
wma_handle->interfaces[self_sta_req->sessionId].vdev_active = TRUE;
|
||||
wma_handle->interfaces[self_sta_req->sessionId].handle = txrx_vdev_handle;
|
||||
|
||||
wma_handle->interfaces[self_sta_req->sessionId].ptrn_match_enable =
|
||||
|
@ -25928,6 +25930,11 @@ static VOS_STATUS wma_process_ll_stats_getReq
|
|||
return VOS_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!wma->interfaces[getReq->staId].vdev_active) {
|
||||
WMA_LOGE("%s: vdev not created yet", __func__);
|
||||
return VOS_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
len = sizeof(*cmd);
|
||||
buf = wmi_buf_alloc(wma->wmi_handle, len);
|
||||
|
||||
|
|
|
@ -536,6 +536,7 @@ struct wma_txrx_node {
|
|||
tANI_U8 vht_capable;
|
||||
tANI_U8 ht_capable;
|
||||
A_UINT32 mhz; /* channel frequency in KHZ */
|
||||
bool vdev_active;
|
||||
v_BOOL_t vdev_up;
|
||||
u_int64_t tsfadjust;
|
||||
void *addBssStaContext;
|
||||
|
|
Loading…
Reference in New Issue