浏览代码

qcacmn: Improve ml_peer_count handling

Make ml_peer_count as qdf_atomic_t to handle the concurrency issues.

Change-Id: I96f2e3d5e17225d0354a1fd2e2b3a55c21d4a2fc
CRs-Fixed: 3500440
Krunalsinh Padhar 2 年之前
父节点
当前提交
674d313577

+ 8 - 9
umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h

@@ -409,7 +409,7 @@ struct wlan_objmgr_vdev_objmgr {
 	struct wlan_objmgr_pdev *wlan_pdev;
 	uint16_t wlan_peer_count;
 #ifdef WLAN_FEATURE_11BE_MLO
-	uint16_t wlan_ml_peer_count;
+	qdf_atomic_t wlan_ml_peer_count;
 #endif
 	uint16_t max_peer_count;
 	uint32_t c_flags;
@@ -1609,7 +1609,7 @@ static inline uint16_t wlan_vdev_get_legacy_peer_count(
 					struct wlan_objmgr_vdev *vdev)
 {
 	return vdev->vdev_objmgr.wlan_peer_count -
-	       vdev->vdev_objmgr.wlan_ml_peer_count;
+	       qdf_atomic_read(&vdev->vdev_objmgr.wlan_ml_peer_count);
 }
 #else
 static inline uint16_t wlan_vdev_get_legacy_peer_count(
@@ -2193,18 +2193,17 @@ static inline struct wlan_mlo_dev_context *wlan_vdev_get_mlo_dev_ctx(
 }
 
 /**
- * wlan_objmgr_vdev_set_ml_peer_count() - set ml_peer_count value
+ * wlan_objmgr_vdev_init_ml_peer_count() - initialize ml_peer_count
  * @vdev: vdev object pointer
- * @ml_peer_count: ml peer count to be set
  *
  * Return: void
  */
 static inline void
-wlan_objmgr_vdev_set_ml_peer_count(struct wlan_objmgr_vdev *vdev,
-				   uint16_t ml_peer_count)
+wlan_objmgr_vdev_init_ml_peer_count(struct wlan_objmgr_vdev *vdev)
 {
-	vdev->vdev_objmgr.wlan_ml_peer_count = ml_peer_count;
+	qdf_atomic_init(&vdev->vdev_objmgr.wlan_ml_peer_count);
 }
+
 #else
 static inline
 QDF_STATUS wlan_vdev_get_bss_peer_mld_mac(struct wlan_objmgr_vdev *vdev,
@@ -2214,10 +2213,10 @@ QDF_STATUS wlan_vdev_get_bss_peer_mld_mac(struct wlan_objmgr_vdev *vdev,
 }
 
 static inline void
-wlan_objmgr_vdev_set_ml_peer_count(struct wlan_objmgr_vdev *vdev,
-				   uint16_t ml_peer_count)
+wlan_objmgr_vdev_init_ml_peer_count(struct wlan_objmgr_vdev *vdev)
 {
 }
+
 #endif
 
 /**

+ 1 - 1
umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c

@@ -225,7 +225,7 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
 
 	/* peer count to 0 */
 	vdev->vdev_objmgr.wlan_peer_count = 0;
-	wlan_objmgr_vdev_set_ml_peer_count(vdev, 0);
+	wlan_objmgr_vdev_init_ml_peer_count(vdev);
 	qdf_atomic_init(&vdev->vdev_objmgr.ref_cnt);
 	vdev->vdev_objmgr.print_cnt = 0;
 	wlan_objmgr_vdev_get_ref(vdev, WLAN_OBJMGR_ID);

+ 2 - 2
umac/mlo_mgr/src/wlan_mlo_mgr_peer.c

@@ -717,7 +717,7 @@ static QDF_STATUS mlo_peer_attach_link_peer(
 			break;
 		}
 		peer_entry->link_peer = link_peer;
-		vdev->vdev_objmgr.wlan_ml_peer_count++;
+		qdf_atomic_inc(&vdev->vdev_objmgr.wlan_ml_peer_count);
 		qdf_copy_macaddr(&peer_entry->link_addr,
 				 (struct qdf_mac_addr *)&link_peer->macaddr[0]);
 
@@ -830,7 +830,7 @@ static QDF_STATUS mlo_peer_detach_link_peer(
 		}
 		vdev =  wlan_peer_get_vdev(link_peer);
 		if (vdev)
-			vdev->vdev_objmgr.wlan_ml_peer_count--;
+			qdf_atomic_dec(&vdev->vdev_objmgr.wlan_ml_peer_count);
 
 		wlan_objmgr_peer_release_ref(link_peer, WLAN_MLO_MGR_ID);
 		peer_entry->link_peer = NULL;