Răsfoiți Sursa

qcacmn: Add debug logs in MLD peer create/delete

Add debug logs in the MLD peer create/delete path
to help debug any issues with MLD peer leak.

Change-Id: I63126d9b86f3179a88809836371fc765d340b6d8
CRs-Fixed: 3379148
Rakesh Pillai 2 ani în urmă
părinte
comite
d7593bcef6
3 a modificat fișierele cu 46 adăugiri și 5 ștergeri
  1. 15 0
      dp/wifi3.0/be/dp_be.c
  2. 6 4
      dp/wifi3.0/dp_main.c
  3. 25 1
      dp/wifi3.0/dp_peer.h

+ 15 - 0
dp/wifi3.0/be/dp_be.c

@@ -1934,6 +1934,7 @@ dp_mlo_peer_find_hash_find_be(struct dp_soc *soc,
 	} else {
 		vdev = NULL;
 	}
+
 	/* search mld peer table if no link peer for given mac address */
 	index = dp_mlo_peer_find_hash_index(mld_hash_obj, mac_addr);
 	qdf_spin_lock_bh(&mld_hash_obj->mld_peer_hash_lock);
@@ -1995,8 +1996,11 @@ dp_mlo_peer_find_hash_remove_be(struct dp_soc *soc, struct dp_peer *peer)
 	TAILQ_REMOVE(&mld_hash_obj->mld_peer_hash.bins[index], peer,
 		     hash_list_elem);
 
+	dp_info("Peer %pK (" QDF_MAC_ADDR_FMT ") removed. (found %u)",
+		peer, QDF_MAC_ADDR_REF(peer->mac_addr.raw), found);
 	dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
 	qdf_spin_unlock_bh(&mld_hash_obj->mld_peer_hash_lock);
+
 }
 
 static void
@@ -2010,6 +2014,14 @@ dp_mlo_peer_find_hash_add_be(struct dp_soc *soc, struct dp_peer *peer)
 	if (!mld_hash_obj)
 		return;
 
+	if (dp_mlo_peer_find_hash_find_be(soc, (uint8_t *)&peer->mac_addr, 1,
+					  DP_MOD_ID_CONFIG, DP_VDEV_ALL)) {
+		dp_info("MLD peer %pK (" QDF_MAC_ADDR_FMT ") already in hash table",
+			peer, QDF_MAC_ADDR_REF(peer->mac_addr.raw));
+		dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
+		qdf_assert_always(0);
+	}
+
 	index = dp_mlo_peer_find_hash_index(mld_hash_obj, &peer->mac_addr);
 
 	qdf_spin_lock_bh(&mld_hash_obj->mld_peer_hash_lock);
@@ -2024,6 +2036,9 @@ dp_mlo_peer_find_hash_add_be(struct dp_soc *soc, struct dp_peer *peer)
 	TAILQ_INSERT_TAIL(&mld_hash_obj->mld_peer_hash.bins[index], peer,
 			  hash_list_elem);
 	qdf_spin_unlock_bh(&mld_hash_obj->mld_peer_hash_lock);
+
+	dp_info("Peer %pK (" QDF_MAC_ADDR_FMT ") added",
+		peer, QDF_MAC_ADDR_REF(peer->mac_addr.raw));
 }
 
 void dp_print_mlo_ast_stats_be(struct dp_soc *soc)

+ 6 - 4
dp/wifi3.0/dp_main.c

@@ -8265,8 +8265,8 @@ QDF_STATUS dp_peer_mlo_setup(
 	if (!setup_info || !setup_info->mld_peer_mac)
 		return QDF_STATUS_SUCCESS;
 
-	dp_info("link peer:" QDF_MAC_ADDR_FMT "mld peer:" QDF_MAC_ADDR_FMT
-		"assoc_link %d, primary_link %d",
+	dp_info("link peer: " QDF_MAC_ADDR_FMT "mld peer: " QDF_MAC_ADDR_FMT
+		"first_link %d, primary_link %d",
 		QDF_MAC_ADDR_REF(peer->mac_addr.raw),
 		QDF_MAC_ADDR_REF(setup_info->mld_peer_mac),
 		setup_info->is_first_link,
@@ -8542,9 +8542,11 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 				   &reo_dest, &hash_based,
 				   &lmac_peer_id_msb);
 
-	dp_info("pdev: %d vdev :%d opmode:%u hash-based-steering:%d default-reo_dest:%u",
+	dp_info("pdev: %d vdev :%d opmode:%u peer %pK (" QDF_MAC_ADDR_FMT ") "
+		"hash-based-steering:%d default-reo_dest:%u",
 		pdev->pdev_id, vdev->vdev_id,
-		vdev->opmode, hash_based, reo_dest);
+		vdev->opmode, peer,
+		QDF_MAC_ADDR_REF(peer->mac_addr.raw), hash_based, reo_dest);
 
 	/*
 	 * There are corner cases where the AD1 = AD2 = "VAPs address"

+ 25 - 1
dp/wifi3.0/dp_peer.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1311,6 +1311,7 @@ void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
 {
 	int i;
 	struct dp_peer_link_info *link_peer_info;
+	bool action_done = false;
 
 	qdf_spin_lock_bh(&mld_peer->link_peers_info_lock);
 	for (i = 0; i < DP_MAX_MLO_LINKS; i++) {
@@ -1324,6 +1325,7 @@ void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
 			link_peer_info->chip_id =
 				dp_mlo_get_chip_id(link_peer->vdev->pdev->soc);
 			mld_peer->num_links++;
+			action_done = true;
 			break;
 		}
 	}
@@ -1332,6 +1334,14 @@ void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
 	if (i == DP_MAX_MLO_LINKS)
 		dp_err("fail to add link peer" QDF_MAC_ADDR_FMT "to mld peer",
 		       QDF_MAC_ADDR_REF(link_peer->mac_addr.raw));
+	else
+		dp_peer_info("%s addition of link peer %pK (" QDF_MAC_ADDR_FMT ") "
+			     "to MLD peer %pK (" QDF_MAC_ADDR_FMT "), "
+			     "idx %u num_links %u",
+			     action_done ? "Successful" : "Failed",
+			     mld_peer, QDF_MAC_ADDR_REF(mld_peer->mac_addr.raw),
+			     link_peer, QDF_MAC_ADDR_REF(link_peer->mac_addr.raw),
+			     i, mld_peer->num_links);
 }
 
 /**
@@ -1348,6 +1358,7 @@ uint8_t dp_mld_peer_del_link_peer(struct dp_peer *mld_peer,
 	int i;
 	struct dp_peer_link_info *link_peer_info;
 	uint8_t num_links;
+	bool action_done = false;
 
 	qdf_spin_lock_bh(&mld_peer->link_peers_info_lock);
 	for (i = 0; i < DP_MAX_MLO_LINKS; i++) {
@@ -1357,6 +1368,7 @@ uint8_t dp_mld_peer_del_link_peer(struct dp_peer *mld_peer,
 					&link_peer_info->mac_addr)) {
 			link_peer_info->is_valid = false;
 			mld_peer->num_links--;
+			action_done = true;
 			break;
 		}
 	}
@@ -1366,6 +1378,15 @@ uint8_t dp_mld_peer_del_link_peer(struct dp_peer *mld_peer,
 	if (i == DP_MAX_MLO_LINKS)
 		dp_err("fail to del link peer" QDF_MAC_ADDR_FMT "to mld peer",
 		       QDF_MAC_ADDR_REF(link_peer->mac_addr.raw));
+	else
+		dp_peer_info("%s deletion of link peer %pK (" QDF_MAC_ADDR_FMT ") "
+			     "from MLD peer %pK (" QDF_MAC_ADDR_FMT "), "
+			     "idx %u num_links %u",
+			     action_done ? "Successful" : "Failed",
+			     mld_peer, QDF_MAC_ADDR_REF(mld_peer->mac_addr.raw),
+			     link_peer, QDF_MAC_ADDR_REF(link_peer->mac_addr.raw),
+			     i, mld_peer->num_links);
+
 
 	return num_links;
 }
@@ -1589,6 +1610,9 @@ void dp_peer_mlo_delete(struct dp_peer *peer)
 	struct dp_peer *ml_peer;
 	struct dp_soc *soc;
 
+	dp_info("peer " QDF_MAC_ADDR_FMT " type %d",
+		QDF_MAC_ADDR_REF(peer->mac_addr.raw), peer->peer_type);
+
 	/* MLO connection link peer */
 	if (IS_MLO_DP_LINK_PEER(peer)) {
 		ml_peer = peer->mld_peer;