diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 047c20d8f2..53857e4a78 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/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) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 2a8cb8fd38..3c18d73a34 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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" diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index a846c77a55..da633b9d3f 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/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;