]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: Refactor RX TID buffer cleanup into helper function
authorNithyanantham Paramasivam <nithyanantham.paramasivam@oss.qualcomm.com>
Wed, 6 Aug 2025 11:17:46 +0000 (16:47 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 22 Sep 2025 20:41:44 +0000 (13:41 -0700)
Introduce ath12k_dp_rx_tid_cleanup() to handle RX TID buffer
unmapping and freeing. This replaces duplicated cleanup logic
across multiple code paths.

This improves code maintainability and avoids redundancy in
buffer cleanup operations.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-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: Nithyanantham Paramasivam <nithyanantham.paramasivam@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250806111750.3214584-4-nithyanantham.paramasivam@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_rx.c

index 8c61c7f3bbdc9bb8e81a4e3801fd71c25a726619..d1022c7938dba62e106414237241e2105ad37c0e 100644 (file)
@@ -584,6 +584,17 @@ static int ath12k_dp_rx_pdev_srng_alloc(struct ath12k *ar)
        return 0;
 }
 
+static void ath12k_dp_rx_tid_cleanup(struct ath12k_base *ab,
+                                    struct ath12k_reoq_buf *tid_qbuf)
+{
+       if (tid_qbuf->vaddr) {
+               dma_unmap_single(ab->dev, tid_qbuf->paddr_aligned,
+                                tid_qbuf->size, DMA_BIDIRECTIONAL);
+               kfree(tid_qbuf->vaddr);
+               tid_qbuf->vaddr = NULL;
+       }
+}
+
 void ath12k_dp_rx_reo_cmd_list_cleanup(struct ath12k_base *ab)
 {
        struct ath12k_dp *dp = &ab->dp;
@@ -593,9 +604,7 @@ void ath12k_dp_rx_reo_cmd_list_cleanup(struct ath12k_base *ab)
        spin_lock_bh(&dp->reo_cmd_lock);
        list_for_each_entry_safe(cmd, tmp, &dp->reo_cmd_list, list) {
                list_del(&cmd->list);
-               dma_unmap_single(ab->dev, cmd->data.qbuf.paddr_aligned,
-                                cmd->data.qbuf.size, DMA_BIDIRECTIONAL);
-               kfree(cmd->data.qbuf.vaddr);
+               ath12k_dp_rx_tid_cleanup(ab, &cmd->data.qbuf);
                kfree(cmd);
        }
 
@@ -603,9 +612,7 @@ void ath12k_dp_rx_reo_cmd_list_cleanup(struct ath12k_base *ab)
                                 &dp->reo_cmd_cache_flush_list, list) {
                list_del(&cmd_cache->list);
                dp->reo_cmd_cache_flush_count--;
-               dma_unmap_single(ab->dev, cmd_cache->data.qbuf.paddr_aligned,
-                                cmd_cache->data.qbuf.size, DMA_BIDIRECTIONAL);
-               kfree(cmd_cache->data.qbuf.vaddr);
+               ath12k_dp_rx_tid_cleanup(ab, &cmd_cache->data.qbuf);
                kfree(cmd_cache);
        }
        spin_unlock_bh(&dp->reo_cmd_lock);
@@ -620,10 +627,7 @@ static void ath12k_dp_reo_cmd_free(struct ath12k_dp *dp, void *ctx,
                ath12k_warn(dp->ab, "failed to flush rx tid hw desc, tid %d status %d\n",
                            rx_tid->tid, status);
 
-       dma_unmap_single(dp->ab->dev, rx_tid->qbuf.paddr_aligned, rx_tid->qbuf.size,
-                        DMA_BIDIRECTIONAL);
-       kfree(rx_tid->qbuf.vaddr);
-       rx_tid->qbuf.vaddr = NULL;
+       ath12k_dp_rx_tid_cleanup(dp->ab, &rx_tid->qbuf);
 }
 
 static int ath12k_dp_reo_cmd_send(struct ath12k_base *ab, struct ath12k_dp_rx_tid *rx_tid,
@@ -766,10 +770,7 @@ static void ath12k_dp_rx_tid_del_func(struct ath12k_dp *dp, void *ctx,
 
        return;
 free_desc:
-       dma_unmap_single(ab->dev, rx_tid->qbuf.paddr_aligned, rx_tid->qbuf.size,
-                        DMA_BIDIRECTIONAL);
-       kfree(rx_tid->qbuf.vaddr);
-       rx_tid->qbuf.vaddr = NULL;
+       ath12k_dp_rx_tid_cleanup(ab, &rx_tid->qbuf);
 }
 
 static int ath12k_dp_rx_tid_delete_handler(struct ath12k_base *ab,
@@ -856,10 +857,7 @@ void ath12k_dp_rx_peer_tid_delete(struct ath12k *ar,
        if (ret) {
                ath12k_err(ar->ab, "failed to send HAL_REO_CMD_UPDATE_RX_QUEUE cmd, tid %d (%d)\n",
                           tid, ret);
-               dma_unmap_single(ar->ab->dev, rx_tid->qbuf.paddr_aligned,
-                                rx_tid->qbuf.size, DMA_BIDIRECTIONAL);
-               kfree(rx_tid->qbuf.vaddr);
-               rx_tid->qbuf.vaddr = NULL;
+               ath12k_dp_rx_tid_cleanup(ar->ab, &rx_tid->qbuf);
        }
 
        if (peer->mlo)