Browse Source

qcacmn: Use the correct dp_peer find API for unmap & delete peer

Use __dp_peer_find_by_id, as this will return the peer, even if
delete is in progress. This is needed, if the FW has crashed and
there is no response expected

Change-Id: I0f77184860622b06f793fcfd321547ea41e958cd
CRs-Fixed: 2392817
Vinay Adella 6 years ago
parent
commit
5dc5551bde
1 changed files with 29 additions and 18 deletions
  1. 29 18
      dp/wifi3.0/dp_main.c

+ 29 - 18
dp/wifi3.0/dp_main.c

@@ -4405,26 +4405,37 @@ static void dp_vdev_flush_peers(struct cdp_vdev *vdev_handle, bool unmap_only)
 	qdf_spin_unlock_bh(&soc->peer_ref_mutex);
 
 	for (i = 0; i < j ; i++) {
-		peer = dp_peer_find_by_id(soc, peer_ids[i]);
-		if (peer) {
-			dp_info("peer: %pM is getting flush",
-				peer->mac_addr.raw);
+		if (unmap_only) {
+			peer = __dp_peer_find_by_id(soc, peer_ids[i]);
+
+			if (peer) {
+				dp_rx_peer_unmap_handler(soc, peer_ids[i],
+							 vdev->vdev_id,
+							 peer->mac_addr.raw,
+							 0);
+			}
+		} else {
+			peer = dp_peer_find_by_id(soc, peer_ids[i]);
+
+			if (peer) {
+				dp_info("peer: %pM is getting flush",
+					peer->mac_addr.raw);
 
-			if (!unmap_only)
 				dp_peer_delete_wifi3(peer, 0);
-			/*
-			 * we need to call dp_peer_unref_del_find_by_id()
-			 * to remove additional ref count incremented
-			 * by dp_peer_find_by_id() call.
-			 *
-			 * Hold the ref count while executing
-			 * dp_peer_delete_wifi3() call.
-			 *
-			 */
-			dp_peer_unref_del_find_by_id(peer);
-			dp_rx_peer_unmap_handler(soc, peer_ids[i],
-						 vdev->vdev_id,
-						 peer->mac_addr.raw, 0);
+				/*
+				 * we need to call dp_peer_unref_del_find_by_id
+				 * to remove additional ref count incremented
+				 * by dp_peer_find_by_id() call.
+				 *
+				 * Hold the ref count while executing
+				 * dp_peer_delete_wifi3() call.
+				 *
+				 */
+				dp_peer_unref_del_find_by_id(peer);
+				dp_rx_peer_unmap_handler(soc, peer_ids[i],
+							 vdev->vdev_id,
+							 peer->mac_addr.raw, 0);
+			}
 		}
 	}