qcacmn: Remove TDLS mgmt tx command from active list

If bss peer is freed after posting TDLS mgmt request command
to serialization component. Free the tdls mgmt req command
from active list.

Change-Id: I6bf2c3518dfc64052470375e4018e56abdcfcabb
CRs-Fixed: 2333288
This commit is contained in:
Bala Venkatesh 2018-10-15 14:31:36 +05:30 • committed by nshrivas
commit 20a776c863
3 changed files with 21 additions and 4 deletions

View file

@ -97,7 +97,7 @@ static char *tdls_get_ser_cmd_str(enum wlan_serialization_cmd_type type)
}
}
static void
void
tdls_release_serialization_command(struct wlan_objmgr_vdev *vdev,
enum wlan_serialization_cmd_type type)
{

View file

@ -291,6 +291,19 @@ QDF_STATUS tdls_process_add_peer_rsp(struct tdls_add_sta_rsp *rsp);
void tdls_reset_nss(struct tdls_soc_priv_obj *tdls_soc,
uint8_t action_code);
/**
* tdls_release_serialization_command() - TDLS wrapper to
* relases serialization command.
* @vdev: Object manager vdev
* @type: command to release.
*
* Return: None
*/
void
tdls_release_serialization_command(struct wlan_objmgr_vdev *vdev,
enum wlan_serialization_cmd_type type);
/**
* tdls_set_cap() - set TDLS capability type
* @tdls_vdev: tdls vdev object

View file

@ -206,7 +206,6 @@ tdls_internal_send_mgmt_tx_done(struct tdls_action_frame_request *req,
indication.status = status;
indication.vdev = req->vdev;
tdls_soc_obj = wlan_vdev_get_tdls_soc_obj(req->vdev);
if (tdls_soc_obj && tdls_soc_obj->tdls_event_cb)
tdls_soc_obj->tdls_event_cb(tdls_soc_obj->tdls_evt_cb_data,
@ -272,8 +271,8 @@ static QDF_STATUS tdls_activate_send_mgmt_request(
peer = wlan_vdev_get_bsspeer(action_req->vdev);
if (QDF_STATUS_SUCCESS != wlan_objmgr_peer_try_get_ref(peer,
WLAN_TDLS_SB_ID)) {
status = wlan_objmgr_peer_try_get_ref(peer, WLAN_TDLS_SB_ID);
if (QDF_IS_STATUS_ERROR(status)) {
qdf_mem_free(tdls_mgmt_req);
goto release_mgmt_ref;
}
@ -315,6 +314,11 @@ release_mgmt_ref:
/*update tdls nss infornation based on action code */
tdls_reset_nss(tdls_soc_obj, action_req->chk_frame->action_code);
if (QDF_IS_STATUS_ERROR(status)) {
tdls_internal_send_mgmt_tx_done(action_req, status);
tdls_release_serialization_command(action_req->vdev,
WLAN_SER_CMD_TDLS_SEND_MGMT);
}
return status;
}