ソースを参照

qcacld-3.0: Handle bss peer add failure in vdev state machine

In case bss peer add failure vdev state machine is in
substate  WLAN_VDEV_SS_START_START_PROGRESS and thus
WLAN_VDEV_SM_EV_CONNECTION_FAIL will not be handled and thus vdev
SM will not move to init state and pe session is not deleted.

This lead to vdev ref leak for the ref taken by pe create session.

Fix this by sending WLAN_VDEV_SM_EV_START_REQ_FAIL event when
vdev SM is in WLAN_VDEV_SS_START_START_PROGRESS state and continue
cleanup.

Change-Id: I4c559333a6bd018e3382f9781883acf314434cf2
CRs-Fixed: 2502817
Abhishek Singh 6 年 前
コミット
449b59f69c
1 ファイル変更20 行追加0 行削除
  1. 20 0
      mlme/core/src/wlan_mlme_vdev_mgr_interface.c

+ 20 - 0
mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -154,6 +154,25 @@ static QDF_STATUS sta_mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme,
 					    event_data);
 }
 
+/**
+ * sta_mlme_vdev_start_req_failed() - MLME start fail callback
+ * @vdev_mlme: vdev mlme object
+ * @event_data_len: event data length
+ * @event_data: event data
+ *
+ * This function is called to send the vdev stop to firmware
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS sta_mlme_vdev_start_req_failed(struct vdev_mlme_obj *vdev_mlme,
+						 uint16_t data_len,
+						 void *data)
+{
+	mlme_legacy_debug("vdev id = %d ",
+			  vdev_mlme->vdev->vdev_objmgr.vdev_id);
+	return lim_sta_mlme_vdev_req_fail(vdev_mlme, data_len, data);
+}
+
 /**
  * sta_mlme_vdev_start_connection() - MLME vdev start callback
  * @vdev_mlme: vdev mlme object
@@ -962,6 +981,7 @@ static struct vdev_mlme_ops sta_mlme_ops = {
 	.mlme_vdev_start_send = sta_mlme_vdev_start_send,
 	.mlme_vdev_restart_send = sta_mlme_vdev_restart_send,
 	.mlme_vdev_start_continue = sta_mlme_start_continue,
+	.mlme_vdev_start_req_failed = sta_mlme_vdev_start_req_failed,
 	.mlme_vdev_sta_conn_start = sta_mlme_vdev_start_connection,
 	.mlme_vdev_up_send = sta_mlme_vdev_up_send,
 	.mlme_vdev_notify_up_complete = sta_mlme_vdev_notify_up_complete,