From 20a776c8633ea45d0abd62c36ffe57d0d258ac53 Mon Sep 17 00:00:00 2001 From: Bala Venkatesh Date: Mon, 15 Oct 2018 14:31:36 +0530 Subject: [PATCH] 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 --- umac/tdls/core/src/wlan_tdls_cmds_process.c | 2 +- umac/tdls/core/src/wlan_tdls_cmds_process.h | 13 +++++++++++++ umac/tdls/core/src/wlan_tdls_mgmt.c | 10 +++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/umac/tdls/core/src/wlan_tdls_cmds_process.c b/umac/tdls/core/src/wlan_tdls_cmds_process.c index ded673c0b5fd..8c9f985a5e72 100644 --- a/umac/tdls/core/src/wlan_tdls_cmds_process.c +++ b/umac/tdls/core/src/wlan_tdls_cmds_process.c @@ -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) { diff --git a/umac/tdls/core/src/wlan_tdls_cmds_process.h b/umac/tdls/core/src/wlan_tdls_cmds_process.h index da14cfa6ab9f..bebf1b099f54 100644 --- a/umac/tdls/core/src/wlan_tdls_cmds_process.h +++ b/umac/tdls/core/src/wlan_tdls_cmds_process.h @@ -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 diff --git a/umac/tdls/core/src/wlan_tdls_mgmt.c b/umac/tdls/core/src/wlan_tdls_mgmt.c index e60d2824c655..8b051ac36871 100644 --- a/umac/tdls/core/src/wlan_tdls_mgmt.c +++ b/umac/tdls/core/src/wlan_tdls_mgmt.c @@ -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; }