浏览代码

qcacld-3.0: Delete vdev object before sme close session

- Flush the active scan list during sme close
session
- Close sme session before deleting the vdev
object.

Change-Id: I8dd8fc794231a613e72089a01ddee5796b56abb7
CRs-Fixed: 2103543
Sandeep Puligilla 7 年之前
父节点
当前提交
ef41536a85
共有 4 个文件被更改,包括 20 次插入8 次删除
  1. 7 8
      core/hdd/src/wlan_hdd_main.c
  2. 2 0
      core/sme/inc/csr_internal.h
  3. 2 0
      core/sme/src/csr/csr_api_roam.c
  4. 9 0
      core/sme/src/csr/csr_util.c

+ 7 - 8
core/hdd/src/wlan_hdd_main.c

@@ -3214,13 +3214,6 @@ int hdd_vdev_destroy(hdd_adapter_t *adapter)
 		return -EINVAL;
 	}
 	status = ucfg_reg_11d_vdev_delete_update(adapter->hdd_vdev);
-	/* do vdev logical destroy via objmgr */
-	errno = hdd_objmgr_destroy_vdev(adapter);
-	if (errno) {
-		hdd_err("failed to destroy objmgr vdev: %d", errno);
-		return errno;
-	}
-
 	/*
 	 * In SSR case, there is no need to destroy vdev in firmware since
 	 * it has already asserted. vdev can be released directly.
@@ -3249,8 +3242,14 @@ int hdd_vdev_destroy(hdd_adapter_t *adapter)
 		clear_bit(SME_SESSION_OPENED, &adapter->event_flags);
 		return -ETIMEDOUT;
 	}
-
 release_vdev:
+	/* do vdev logical destroy via objmgr */
+	errno = hdd_objmgr_destroy_vdev(adapter);
+	if (errno) {
+		hdd_err("failed to destroy objmgr vdev: %d", errno);
+		return errno;
+	}
+
 	/* now that sme session is closed, allow physical vdev destroy */
 	errno = hdd_objmgr_release_vdev(adapter);
 	if (errno) {

+ 2 - 0
core/sme/inc/csr_internal.h

@@ -1445,6 +1445,8 @@ void purge_sme_session_active_cmd_list(struct sAniSirGlobal *mac_ctx,
 		uint32_t session_id);
 void purge_sme_session_pending_scan_cmd_list(struct sAniSirGlobal *mac_ctx,
 		uint32_t session_id);
+void purge_sme_session_active_scan_cmd_list(struct sAniSirGlobal *mac_ctx,
+		uint32_t session_id);
 bool csr_wait_for_connection_update(tpAniSirGlobal mac,
 		bool do_release_reacquire_lock);
 enum tQDF_ADAPTER_MODE csr_get_session_persona(tpAniSirGlobal pmac,

+ 2 - 0
core/sme/src/csr/csr_api_roam.c

@@ -16530,6 +16530,8 @@ QDF_STATUS csr_roam_close_session(tpAniSirGlobal pMac, uint32_t sessionId,
 	purge_sme_session_active_cmd_list(pMac, sessionId);
 	purge_sme_session_pending_scan_cmd_list(pMac,
 			sessionId);
+	purge_sme_session_active_scan_cmd_list(pMac,
+			sessionId);
 	status = csr_issue_del_sta_for_session_req(pMac,
 			sessionId,
 			pSession->selfMacAddr.bytes,

+ 9 - 0
core/sme/src/csr/csr_util.c

@@ -350,6 +350,15 @@ const char *get_e_csr_roam_result_str(eCsrRoamResult val)
 	}
 }
 
+void purge_sme_session_active_scan_cmd_list(struct sAniSirGlobal *mac_ctx,
+				uint32_t session_id)
+{
+	uint8_t vdev_id = session_id;
+
+	wlan_serialization_purge_cmd_list_by_vdev_id(mac_ctx->psoc, vdev_id,
+			true, false, false, false, false);
+}
+
 void purge_sme_session_pending_scan_cmd_list(struct sAniSirGlobal *mac_ctx,
 				uint32_t session_id)
 {