Kaynağa Gözat

qcacmn: Handle mlo setup soc down from detach path

mlo setup soc down indication can be called from soc_stop and detach
path. Add logic to handle multiple calls by ignoring down if the state
is already cleaned up.

Change-Id: I6f5c11cc30f38423661063d2834a5b4efa088a49
CRs-Fixed: 3450300
Kiran Venkatappa 2 yıl önce
ebeveyn
işleme
bd5b5ef599
1 değiştirilmiş dosya ile 31 ekleme ve 22 silme
  1. 31 22
      umac/mlo_mgr/src/wlan_mlo_mgr_setup.c

+ 31 - 22
umac/mlo_mgr/src/wlan_mlo_mgr_setup.c

@@ -295,6 +295,10 @@ void mlo_setup_update_total_socs(uint8_t grp_id, uint8_t tot_socs)
 
 	mlo_ctx->setup_info[grp_id].tot_socs = tot_socs;
 	mlo_ctx->setup_info[grp_id].ml_grp_id = grp_id;
+	mlo_ctx->setup_info[grp_id].tot_links = 0;
+	qdf_info("Grp_id %d Total MLO socs = %d links = %d",
+		 grp_id, mlo_ctx->setup_info[grp_id].tot_socs,
+		 mlo_ctx->setup_info[grp_id].tot_links);
 }
 
 qdf_export_symbol(mlo_setup_update_total_socs);
@@ -547,6 +551,8 @@ void mlo_setup_update_num_links(struct wlan_objmgr_psoc *psoc,
 	}
 
 	mlo_ctx->setup_info[grp_id].tot_links += num_links;
+	qdf_info("Grp_id %d Total MLO links = %d",
+		 grp_id, mlo_ctx->setup_info[grp_id].tot_links);
 }
 
 qdf_export_symbol(mlo_setup_update_num_links);
@@ -668,9 +674,9 @@ void mlo_setup_link_ready(struct wlan_objmgr_pdev *pdev, uint8_t grp_id)
 	}
 	setup_info->valid_link_bitmap |= (1 << link_id);
 
-	mlo_debug("Pdev updated to Grp id %d mld link %d num_links %d  hw link id %d Valid link bitmap %d",
-		  grp_id, link_idx, setup_info->num_links,
-		  link_id, setup_info->valid_link_bitmap);
+	qdf_info("Pdev updated to Grp id %d mld link %d num_links %d  hw link id %d Valid link bitmap %d",
+		 grp_id, link_idx, setup_info->num_links,
+		 link_id, setup_info->valid_link_bitmap);
 
 	qdf_assert_always(link_idx < MAX_MLO_LINKS);
 
@@ -689,7 +695,7 @@ void mlo_setup_link_ready(struct wlan_objmgr_pdev *pdev, uint8_t grp_id)
 			qdf_assert_always(0);
 		}
 
-		mlo_debug("Trigger MLO Setup request");
+		qdf_info("Trigger MLO Setup request");
 		if (tx_ops && tx_ops->mops.target_if_mlo_setup_req) {
 			tx_ops->mops.target_if_mlo_setup_req(
 					setup_info->pdev_list,
@@ -785,16 +791,18 @@ static void mlo_setup_link_down(struct wlan_objmgr_psoc *psoc,
 		return;
 	}
 
-	setup_info->pdev_list[link_idx] = NULL;
-	setup_info->state[link_idx] = MLO_LINK_UNINITIALIZED;
-	setup_info->num_links--;
+	if (setup_info->pdev_list[link_idx]) {
+		setup_info->pdev_list[link_idx] = NULL;
+		setup_info->state[link_idx] = MLO_LINK_UNINITIALIZED;
+		setup_info->num_links--;
 
-	link_id = wlan_mlo_get_pdev_hw_link_id(pdev);
-	if (link_id == INVALID_HW_LINK_ID) {
-		mlo_err("Invalid HW link id for the pdev");
-		return;
+		link_id = wlan_mlo_get_pdev_hw_link_id(pdev);
+		if (link_id == INVALID_HW_LINK_ID) {
+			mlo_err("Invalid HW link id for the pdev");
+			return;
+		}
+		setup_info->valid_link_bitmap &= ~(1 << link_id);
 	}
-	setup_info->valid_link_bitmap &= ~(1 << link_id);
 
 	mlo_debug("Pdev link down grp_id %d link_idx %d num_links %d",
 		  grp_id, link_idx, setup_info->num_links);
@@ -851,16 +859,17 @@ void mlo_setup_update_soc_down(struct wlan_objmgr_psoc *psoc, uint8_t grp_id)
 		return;
 	}
 
-	soc = setup_info->curr_soc_list[chip_idx];
-	cdp_soc_mlo_soc_teardown(wlan_psoc_get_dp_handle(soc),
-				 setup_info->dp_handle,
-				 false);
+	if (setup_info->curr_soc_list[chip_idx]) {
+		soc = setup_info->curr_soc_list[chip_idx];
+		cdp_soc_mlo_soc_teardown(wlan_psoc_get_dp_handle(soc),
+					 setup_info->dp_handle, false);
 
-	setup_info->curr_soc_list[chip_idx] = NULL;
-	setup_info->num_soc--;
+		setup_info->curr_soc_list[chip_idx] = NULL;
+		setup_info->num_soc--;
 
-	if (!setup_info->num_soc)
-		mlo_dp_ctxt_detach(soc, grp_id, setup_info->dp_handle);
+		if (!setup_info->num_soc)
+			mlo_dp_ctxt_detach(soc, grp_id, setup_info->dp_handle);
+	}
 
 	mlo_debug("Soc down, mlo group %d num soc %d num links %d",
 		  grp_id, setup_info->num_soc,
@@ -907,7 +916,7 @@ void mlo_link_teardown_complete(struct wlan_objmgr_pdev *pdev, uint8_t grp_id)
 		if (setup_info->state[link_idx] != MLO_LINK_TEARDOWN)
 			return;
 
-	mlo_debug("Teardown complete");
+	qdf_info("Teardown complete");
 
 	qdf_event_set(&setup_info->event);
 }
@@ -987,7 +996,7 @@ QDF_STATUS mlo_link_teardown_link(struct wlan_objmgr_psoc *psoc,
 			MLO_MGR_TEARDOWN_TIMEOUT);
 
 	if (status != QDF_STATUS_SUCCESS) {
-		qdf_debug("Teardown timeout");
+		qdf_info("Teardown timeout");
 		mlo_force_teardown(grp_id);
 	}