mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
wifi: ath12k: Refactor RX TID buffer cleanup into helper function
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>
This commit is contained in:
parent
7c32476253
commit
f829a1f8f2
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user