]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Add helper to free DP link peer
authorPavankumar Nandeshwar <quic_pnandesh@quicinc.com>
Mon, 3 Nov 2025 11:21:03 +0000 (16:51 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Wed, 5 Nov 2025 15:16:54 +0000 (07:16 -0800)
Introduce ath12k_dp_link_peer_free() to wrap cleanup steps required before
freeing a DP link peer. This avoids code duplication and ensures consistent
teardown across multiple call flows.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Pavankumar Nandeshwar <quic_pnandesh@quicinc.com>
Signed-off-by: Ripan Deuri <quic_rdeuri@quicinc.com>
Reviewed-by: Karthikeyan Periyasamy <karthikeyan.periyasamy@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20251103112111.2260639-5-quic_rdeuri@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_peer.c
drivers/net/wireless/ath/ath12k/dp_peer.h
drivers/net/wireless/ath/ath12k/mac.c
drivers/net/wireless/ath/ath12k/peer.c

index 8961c4635ed0b55c3222eda3724a40d3eda5934e..0ad01f7414cd63f545e88da623286f205c75a918 100644 (file)
@@ -9,6 +9,14 @@
 #include "debug.h"
 #include "debugfs.h"
 
+void ath12k_dp_link_peer_free(struct ath12k_dp_link_peer *peer)
+{
+       list_del(&peer->list);
+
+       kfree(peer->peer_stats.rx_stats);
+       kfree(peer);
+}
+
 struct ath12k_dp_link_peer *
 ath12k_dp_link_peer_find_by_vdev_and_addr(struct ath12k_dp *dp,
                                          int vdev_id, const u8 *addr)
@@ -140,10 +148,7 @@ void ath12k_dp_link_peer_unmap_event(struct ath12k_base *ab, u16 peer_id)
        ath12k_dbg(ab, ATH12K_DBG_DP_HTT, "htt peer unmap vdev %d peer %pM id %d\n",
                   peer->vdev_id, peer->addr, peer_id);
 
-       list_del(&peer->list);
-
-       kfree(peer->peer_stats.rx_stats);
-       kfree(peer);
+       ath12k_dp_link_peer_free(peer);
        wake_up(&ab->peer_mapping_wq);
 
 exit:
index f9be27d86545341fb6a4d1461f459e2ee71c352a..20294ff0951310ddd7d9b3ba699e51ccf95f13cb 100644 (file)
@@ -178,4 +178,5 @@ struct ath12k_dp_peer *ath12k_dp_peer_find_by_peerid(struct ath12k_pdev_dp *dp_p
                                                     u16 peer_id);
 struct ath12k_dp_link_peer *
 ath12k_dp_link_peer_find_by_peerid(struct ath12k_pdev_dp *dp_pdev, u16 peer_id);
+void ath12k_dp_link_peer_free(struct ath12k_dp_link_peer *peer);
 #endif
index 4972367dd1ba267b7feae85406ad54c500b2a086..c40c55344e6484e89c5f175b542e263aedfb265d 100644 (file)
@@ -1213,10 +1213,7 @@ void ath12k_mac_peer_cleanup_all(struct ath12k *ar)
        synchronize_rcu();
 
        list_for_each_entry_safe(peer, tmp, &peers, list) {
-               list_del(&peer->list);
-
-               kfree(peer->peer_stats.rx_stats);
-               kfree(peer);
+               ath12k_dp_link_peer_free(peer);
        }
 
        ar->num_peers = 0;
@@ -6377,10 +6374,8 @@ static void ath12k_mac_station_post_remove(struct ath12k *ar,
                ath12k_warn(ar->ab, "Found peer entry %pM n vdev %i after it was supposedly removed\n",
                            vif->addr, arvif->vdev_id);
                peer->sta = NULL;
-               list_del(&peer->list);
 
-               kfree(peer->peer_stats.rx_stats);
-               kfree(peer);
+               ath12k_dp_link_peer_free(peer);
                ar->num_peers--;
        }
 
index 9c100ecea798e3f9a536c907a6cdf89898ffae70..c2fb5bbd6ceaed893f3192e65a1b9625b666d8d0 100644 (file)
@@ -50,10 +50,7 @@ void ath12k_peer_cleanup(struct ath12k *ar, u32 vdev_id)
                ath12k_warn(ab, "removing stale peer %pM from vdev_id %d\n",
                            peer->addr, vdev_id);
 
-               list_del(&peer->list);
-
-               kfree(peer->peer_stats.rx_stats);
-               kfree(peer);
+               ath12k_dp_link_peer_free(peer);
                ar->num_peers--;
        }