qcacld-3.0: Self peer req is not handled properly causes P2P failure
1) When wma_self_peer_remove() API returns failure, driver triggers recovery without checking if driver unload is in progress which may cause driver to go in bad state. 2) when wma_self_peer_remove() API returns success, driver releases the memory accidently as part of I14895b0d3a19b3aaea2299311cc021ea14408f1e Fix 1st condition by checking if driver unload is in progress. If driver in unloading then just release the memory and return failure. If driver is not unloading then just trigger SSR recovery, so FW can recover silently. Fix 2nd condition by checking the return status and release the memory up on failure status code. CRs-Fixed: 2197657 Change-Id: Ia08dbdac66d8641d22f6a82c29ab1a5b99309214
This commit is contained in:
parent
1b5debddcc
commit
40c5e4425a
@ -530,7 +530,7 @@ static QDF_STATUS wma_self_peer_remove(tp_wma_handle wma_handle,
|
||||
if (!peer) {
|
||||
WMA_LOGE("%s Failed to find peer %pM", __func__,
|
||||
del_sta_self_req_param->self_mac_addr);
|
||||
qdf_status = QDF_STATUS_SUCCESS;
|
||||
qdf_status = QDF_STATUS_E_FAULT;
|
||||
goto error;
|
||||
}
|
||||
wma_remove_peer(wma_handle,
|
||||
@ -793,8 +793,16 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle,
|
||||
if ((status != QDF_STATUS_SUCCESS) && generateRsp) {
|
||||
WMA_LOGE("can't remove selfpeer, send rsp session: %d",
|
||||
vdev_id);
|
||||
goto send_fail_rsp;
|
||||
} else {
|
||||
if (!cds_is_driver_unloading()) {
|
||||
WMA_LOGE("Trigger recovery for session: %d",
|
||||
vdev_id);
|
||||
goto send_fail_rsp;
|
||||
} else {
|
||||
WMA_LOGE("driver unload, free mem vdev_id: %d",
|
||||
vdev_id);
|
||||
goto send_rsp;
|
||||
}
|
||||
} else if (status != QDF_STATUS_SUCCESS) {
|
||||
WMA_LOGE("can't remove selfpeer, free msg session: %d",
|
||||
vdev_id);
|
||||
qdf_mem_free(pdel_sta_self_req_param);
|
||||
|
Loading…
Reference in New Issue
Block a user