Browse Source

qcacld-3.0: Pass ml sta vdev id in link set request

Currently, vdev in link set active request is added
without any check whether it is ml sta vdev or not
due to which may cause issue of empty event for that
particular vdev when sap/p2p vdev is added instead of
ml sta vdev in request.

Fix is to add ml sta vdev in link set request to avoid
mismatch with fw link down and expected vdev down from
host to avoid empty event failure

Change-Id: If99b305c267f094913b8d9ce96a330eed47d0214
CRs-Fixed: 3221818
Sheenam Monga 2 years ago
parent
commit
15dc5ca2ff
1 changed files with 23 additions and 11 deletions
  1. 23 11
      components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c

+ 23 - 11
components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c

@@ -4351,7 +4351,7 @@ policy_mgr_fill_ml_active_link_vdev_bitmap(struct mlo_link_set_active_req *req,
 /**
  * policy_mgr_mlo_sta_set_link() - Set links for MLO STA
  *
- * @vdev: vdev object
+ * @psoc: psoc object
  * @reason: Reason for which link is forced
  * @mode: Force reason
  * @num_mlo_vdev: number of mlo vdev
@@ -4362,19 +4362,18 @@ policy_mgr_fill_ml_active_link_vdev_bitmap(struct mlo_link_set_active_req *req,
  * Return: void
  */
 static void
-policy_mgr_mlo_sta_set_link(struct wlan_objmgr_vdev *vdev,
+policy_mgr_mlo_sta_set_link(struct wlan_objmgr_psoc *psoc,
 			    enum mlo_link_force_reason reason,
 			    enum mlo_link_force_mode mode,
 			    uint8_t num_mlo_vdev, uint8_t *mlo_vdev_lst)
 {
 	struct mlo_link_set_active_req *req;
 	QDF_STATUS status;
-	struct wlan_objmgr_psoc *psoc;
 	struct policy_mgr_psoc_priv_obj *pm_ctx;
+	struct wlan_objmgr_vdev *vdev;
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		policy_mgr_err("Psoc is Null");
+	if (!num_mlo_vdev) {
+		policy_mgr_err("invalid 0 num_mlo_vdev");
 		return;
 	}
 
@@ -4388,6 +4387,18 @@ policy_mgr_mlo_sta_set_link(struct wlan_objmgr_vdev *vdev,
 	if (!req)
 		return;
 
+	/*
+	 * Use one of the ML vdev as, if called from disconnect the caller vdev
+	 * may get deleted, and thus flush serialization command.
+	 */
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, mlo_vdev_lst[0],
+						    WLAN_POLICY_MGR_ID);
+	if (!vdev) {
+		policy_mgr_err("vdev %d: invalid vdev", mlo_vdev_lst[0]);
+		qdf_mem_free(req);
+		return;
+	}
+
 	policy_mgr_set_link_in_progress(pm_ctx, true);
 
 	policy_mgr_debug("vdev %d: mode %d num_mlo_vdev %d reason %d",
@@ -4418,6 +4429,7 @@ policy_mgr_mlo_sta_set_link(struct wlan_objmgr_vdev *vdev,
 		qdf_mem_free(req);
 		policy_mgr_set_link_in_progress(pm_ctx, false);
 	}
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
 }
 
 uint32_t
@@ -4891,7 +4903,7 @@ policy_mgr_ml_sta_concurency_on_connect(struct wlan_objmgr_psoc *psoc,
 		}
 	}
 
-	policy_mgr_mlo_sta_set_link(vdev, MLO_LINK_FORCE_REASON_CONNECT,
+	policy_mgr_mlo_sta_set_link(psoc, MLO_LINK_FORCE_REASON_CONNECT,
 				    mode, affected_links, ml_vdev_lst);
 }
 
@@ -5327,7 +5339,7 @@ policy_mgr_handle_sap_cli_go_ml_sta_up_csa(struct wlan_objmgr_psoc *psoc,
 		return;
 	}
 
-	policy_mgr_mlo_sta_set_link(vdev, MLO_LINK_FORCE_REASON_CONNECT,
+	policy_mgr_mlo_sta_set_link(psoc, MLO_LINK_FORCE_REASON_CONNECT,
 				    MLO_LINK_FORCE_MODE_ACTIVE_NUM,
 				    num_ml_sta, ml_sta_vdev_lst);
 
@@ -5341,7 +5353,7 @@ enable_link:
 	if (policy_mgr_sta_ml_link_enable_allowed(psoc, num_disabled_ml_sta,
 						  num_ml_sta, ml_freq_lst,
 						  ml_sta_vdev_lst))
-		policy_mgr_mlo_sta_set_link(vdev,
+		policy_mgr_mlo_sta_set_link(psoc,
 					    MLO_LINK_FORCE_REASON_DISCONNECT,
 					    MLO_LINK_FORCE_MODE_NO_FORCE,
 					    num_ml_sta, ml_sta_vdev_lst);
@@ -5466,7 +5478,7 @@ policy_mgr_handle_ml_sta_link_enable_on_sta_down(struct wlan_objmgr_psoc *psoc,
 		goto done;
 	}
 
-	policy_mgr_mlo_sta_set_link(vdev,
+	policy_mgr_mlo_sta_set_link(psoc,
 				    MLO_LINK_FORCE_REASON_DISCONNECT,
 				    MLO_LINK_FORCE_MODE_NO_FORCE,
 				    num_ml_sta, ml_sta_vdev_lst);
@@ -5545,7 +5557,7 @@ policy_mgr_re_enable_ml_sta_on_p2p_sap_sta_down(struct wlan_objmgr_psoc *psoc,
 		policy_mgr_debug("vdev %d: Affected link present, dont reanabe ML link",
 				 vdev_id);
 	else
-		policy_mgr_mlo_sta_set_link(vdev,
+		policy_mgr_mlo_sta_set_link(psoc,
 					    MLO_LINK_FORCE_REASON_DISCONNECT,
 					    MLO_LINK_FORCE_MODE_NO_FORCE,
 					    num_ml_sta, ml_sta_vdev_lst);