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
This commit is contained in:
Rakesh Pillai
2023-01-06 15:19:24 +05:30
committed by Madan Koyyalamudi
parent 8762881511
commit d7593bcef6
3 changed files with 46 additions and 5 deletions

View File

@@ -1934,6 +1934,7 @@ dp_mlo_peer_find_hash_find_be(struct dp_soc *soc,
} else { } else {
vdev = NULL; vdev = NULL;
} }
/* search mld peer table if no link peer for given mac address */ /* search mld peer table if no link peer for given mac address */
index = dp_mlo_peer_find_hash_index(mld_hash_obj, mac_addr); index = dp_mlo_peer_find_hash_index(mld_hash_obj, mac_addr);
qdf_spin_lock_bh(&mld_hash_obj->mld_peer_hash_lock); 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, TAILQ_REMOVE(&mld_hash_obj->mld_peer_hash.bins[index], peer,
hash_list_elem); 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); dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
qdf_spin_unlock_bh(&mld_hash_obj->mld_peer_hash_lock); qdf_spin_unlock_bh(&mld_hash_obj->mld_peer_hash_lock);
} }
static void 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) if (!mld_hash_obj)
return; 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); index = dp_mlo_peer_find_hash_index(mld_hash_obj, &peer->mac_addr);
qdf_spin_lock_bh(&mld_hash_obj->mld_peer_hash_lock); 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, TAILQ_INSERT_TAIL(&mld_hash_obj->mld_peer_hash.bins[index], peer,
hash_list_elem); hash_list_elem);
qdf_spin_unlock_bh(&mld_hash_obj->mld_peer_hash_lock); 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) void dp_print_mlo_ast_stats_be(struct dp_soc *soc)

View File

@@ -8265,8 +8265,8 @@ QDF_STATUS dp_peer_mlo_setup(
if (!setup_info || !setup_info->mld_peer_mac) if (!setup_info || !setup_info->mld_peer_mac)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
dp_info("link peer:" QDF_MAC_ADDR_FMT "mld peer:" QDF_MAC_ADDR_FMT dp_info("link peer: " QDF_MAC_ADDR_FMT "mld peer: " QDF_MAC_ADDR_FMT
"assoc_link %d, primary_link %d", "first_link %d, primary_link %d",
QDF_MAC_ADDR_REF(peer->mac_addr.raw), QDF_MAC_ADDR_REF(peer->mac_addr.raw),
QDF_MAC_ADDR_REF(setup_info->mld_peer_mac), QDF_MAC_ADDR_REF(setup_info->mld_peer_mac),
setup_info->is_first_link, 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, &reo_dest, &hash_based,
&lmac_peer_id_msb); &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, 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" * There are corner cases where the AD1 = AD2 = "VAPs address"

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * 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 * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * 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; int i;
struct dp_peer_link_info *link_peer_info; struct dp_peer_link_info *link_peer_info;
bool action_done = false;
qdf_spin_lock_bh(&mld_peer->link_peers_info_lock); qdf_spin_lock_bh(&mld_peer->link_peers_info_lock);
for (i = 0; i < DP_MAX_MLO_LINKS; i++) { 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 = link_peer_info->chip_id =
dp_mlo_get_chip_id(link_peer->vdev->pdev->soc); dp_mlo_get_chip_id(link_peer->vdev->pdev->soc);
mld_peer->num_links++; mld_peer->num_links++;
action_done = true;
break; break;
} }
} }
@@ -1332,6 +1334,14 @@ void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
if (i == DP_MAX_MLO_LINKS) if (i == DP_MAX_MLO_LINKS)
dp_err("fail to add link peer" QDF_MAC_ADDR_FMT "to mld peer", dp_err("fail to add link peer" QDF_MAC_ADDR_FMT "to mld peer",
QDF_MAC_ADDR_REF(link_peer->mac_addr.raw)); 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; int i;
struct dp_peer_link_info *link_peer_info; struct dp_peer_link_info *link_peer_info;
uint8_t num_links; uint8_t num_links;
bool action_done = false;
qdf_spin_lock_bh(&mld_peer->link_peers_info_lock); qdf_spin_lock_bh(&mld_peer->link_peers_info_lock);
for (i = 0; i < DP_MAX_MLO_LINKS; i++) { 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->mac_addr)) {
link_peer_info->is_valid = false; link_peer_info->is_valid = false;
mld_peer->num_links--; mld_peer->num_links--;
action_done = true;
break; break;
} }
} }
@@ -1366,6 +1378,15 @@ uint8_t dp_mld_peer_del_link_peer(struct dp_peer *mld_peer,
if (i == DP_MAX_MLO_LINKS) if (i == DP_MAX_MLO_LINKS)
dp_err("fail to del link peer" QDF_MAC_ADDR_FMT "to mld peer", dp_err("fail to del link peer" QDF_MAC_ADDR_FMT "to mld peer",
QDF_MAC_ADDR_REF(link_peer->mac_addr.raw)); 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; return num_links;
} }
@@ -1589,6 +1610,9 @@ void dp_peer_mlo_delete(struct dp_peer *peer)
struct dp_peer *ml_peer; struct dp_peer *ml_peer;
struct dp_soc *soc; 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 */ /* MLO connection link peer */
if (IS_MLO_DP_LINK_PEER(peer)) { if (IS_MLO_DP_LINK_PEER(peer)) {
ml_peer = peer->mld_peer; ml_peer = peer->mld_peer;