Browse Source

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
Bala Venkatesh 6 years ago
parent
commit
fd4e3d3ee3
3 changed files with 21 additions and 4 deletions
  1. 1 1
      core/src/wlan_tdls_cmds_process.c
  2. 13 0
      core/src/wlan_tdls_cmds_process.h
  3. 7 3
      core/src/wlan_tdls_mgmt.c

+ 1 - 1
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)
 {

+ 13 - 0
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

+ 7 - 3
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;
 }