Pārlūkot izejas kodu

qcacmn: Get the valid vdev in get_vdev_by_macaddr_from_pdev

In wlan_objmgr_get_vdev_by_macaddr_from_pdev driver checks the
first vdev matching the mac address and try to get ref and return
NULL if it fails.

In case if a vdev is logically deleted but not physically deleted
(some ref are pending) and a new vdev is added with same mac address
at the tail of the vdev list, the
wlan_objmgr_get_vdev_by_macaddr_from_pdev always return NULL cheking
for the logically deleted vdev, even when a valid vdev is present
after the logically deleted vdev.

Thus continue to next vdev if try get ref fails for the vdev.

Change-Id: Icd67ce8830460fca7bb4c19e81b2e9f764fb5dba
CRs-Fixed: 2580697
Abhinav Kumar 5 gadi atpakaļ
vecāks
revīzija
04b61d6e39

+ 7 - 8
umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c

@@ -711,14 +711,13 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev(
 	/* Iterate through pdev's vdev list, till vdev macaddr matches with
 	entry of vdev list */
 	while (vdev) {
-		if (WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr)
-					== QDF_STATUS_SUCCESS) {
-			if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) !=
-							QDF_STATUS_SUCCESS)
-				vdev = NULL;
-
-			wlan_pdev_obj_unlock(pdev);
-			return vdev;
+		if (QDF_IS_STATUS_SUCCESS(
+		    WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr))) {
+			if (QDF_IS_STATUS_SUCCESS(
+				wlan_objmgr_vdev_try_get_ref(vdev, dbg_id))) {
+				wlan_pdev_obj_unlock(pdev);
+				return vdev;
+			}
 		}
 		/* get next vdev */
 		vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);