소스 검색

Merge "qcacld-3.0: Destroy pdev as part of module stop" into wlan-cld3.driver.lnx.2.0

CNSS_WLAN Service 7 년 전
부모
커밋
92b3539c7b
1개의 변경된 파일20개의 추가작업 그리고 26개의 파일을 삭제
  1. 20 26
      core/hdd/src/wlan_hdd_main.c

+ 20 - 26
core/hdd/src/wlan_hdd_main.c

@@ -1676,22 +1676,13 @@ void hdd_update_tgt_cfg(void *context, void *param)
 	struct cds_config_info *cds_cfg = cds_get_ini_config();
 	uint8_t antenna_mode;
 
-	/* Reuse same pdev for module start/stop or SSR */
-	if (((hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) ||
-		(hdd_get_conparam() == QDF_GLOBAL_MONITOR_MODE) ||
-	    !cds_is_driver_loading()) && (hdd_ctx->hdd_pdev != NULL)) {
-		hdd_debug("Reuse pdev for module start/stop or SSR pdev_id = %u",
-			hdd_ctx->hdd_pdev->pdev_objmgr.wlan_pdev_id);
-		/* Restore pdev to MAC/WMA contexts */
-		sme_store_pdev(hdd_ctx->hHal, hdd_ctx->hdd_pdev);
+	ret = hdd_objmgr_create_and_store_pdev(hdd_ctx);
+	if (ret) {
+		hdd_err("Failed to create pdev; errno:%d", ret);
+		QDF_BUG(0);
 	} else {
-		ret = hdd_objmgr_create_and_store_pdev(hdd_ctx);
-		if (ret) {
-			hdd_err("pdev creation fails!");
-			QDF_BUG(0);
-		} else
-			hdd_debug("New pdev has been created with pdev_id = %u",
-				hdd_ctx->hdd_pdev->pdev_objmgr.wlan_pdev_id);
+		hdd_debug("New pdev has been created with pdev_id = %u",
+			hdd_ctx->hdd_pdev->pdev_objmgr.wlan_pdev_id);
 	}
 
 	if (cds_cfg) {
@@ -2479,6 +2470,7 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx,
 
 post_disable:
 	cds_post_disable();
+	hdd_objmgr_release_and_destroy_pdev(hdd_ctx);
 
 cds_txrx_free:
 	cds_dp_close(hdd_ctx->hdd_psoc);
@@ -6173,10 +6165,6 @@ static void hdd_wlan_exit(struct hdd_context *hdd_ctx)
 	mutex_destroy(&hdd_ctx->avoid_freq_lock);
 #endif
 
-	driver_status = hdd_objmgr_release_and_destroy_pdev(hdd_ctx);
-	if (driver_status)
-		hdd_err("Pdev delete failed");
-
 	driver_status = hdd_objmgr_release_and_destroy_psoc(hdd_ctx);
 	if (driver_status)
 		hdd_err("Psoc delete failed");
@@ -9916,6 +9904,19 @@ int hdd_wlan_stop_modules(struct hdd_context *hdd_ctx, bool ftm_mode)
 		QDF_ASSERT(0);
 	}
 
+	ret = hdd_objmgr_release_and_destroy_pdev(hdd_ctx);
+	if (ret) {
+		hdd_err("Failed to destroy pdev; errno:%d", ret);
+		QDF_ASSERT(0);
+	}
+
+	/*
+	 * Reset total mac phy during module stop such that during
+	 * next module start same psoc is used to populate new service
+	 * ready data
+	 */
+	hdd_ctx->hdd_psoc->total_mac_phy = 0;
+
 	qdf_status = cds_dp_close(hdd_ctx->hdd_psoc);
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 		hdd_warn("Failed to stop CDS DP: %d", qdf_status);
@@ -9957,12 +9958,6 @@ int hdd_wlan_stop_modules(struct hdd_context *hdd_ctx, bool ftm_mode)
 	/* Once the firmware sequence is completed reset this flag */
 	hdd_ctx->imps_enabled = false;
 	hdd_ctx->driver_status = DRIVER_MODULES_CLOSED;
-	/*
-	 * Reset total mac phy during module stop such that during
-	 * next module start same psoc is used to populate new service
-	 * ready data
-	 */
-	hdd_ctx->hdd_psoc->total_mac_phy = 0;
 
 done:
 	hdd_ctx->stop_modules_in_progress = false;
@@ -10257,7 +10252,6 @@ err_wiphy_unregister:
 
 err_stop_modules:
 	hdd_wlan_stop_modules(hdd_ctx, false);
-	hdd_objmgr_release_and_destroy_pdev(hdd_ctx);
 
 err_hdd_free_psoc:
 	hdd_green_ap_deinit(hdd_ctx);