]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: fix dma_free_coherent() pointer
authorThomas Fourier <fourier.thomas@gmail.com>
Tue, 6 Jan 2026 08:49:04 +0000 (09:49 +0100)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 9 Jan 2026 15:43:48 +0000 (07:43 -0800)
dma_alloc_coherent() allocates a DMA mapped buffer and stores the
addresses in XXX_unaligned fields.  Those should be reused when freeing
the buffer rather than the aligned addresses.

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20260106084905.18622-2-fourier.thomas@gmail.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/ce.c

index 9a63608838ace31587691dd53c1d4aa8f081cb6f..4aea58446838186026afba321d492576fa1061ff 100644 (file)
@@ -984,8 +984,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
                        dma_free_coherent(ab->dev,
                                          pipe->src_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
-                                         pipe->src_ring->base_addr_owner_space,
-                                         pipe->src_ring->base_addr_ce_space);
+                                         pipe->src_ring->base_addr_owner_space_unaligned,
+                                         pipe->src_ring->base_addr_ce_space_unaligned);
                        kfree(pipe->src_ring);
                        pipe->src_ring = NULL;
                }
@@ -995,8 +995,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
                        dma_free_coherent(ab->dev,
                                          pipe->dest_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
-                                         pipe->dest_ring->base_addr_owner_space,
-                                         pipe->dest_ring->base_addr_ce_space);
+                                         pipe->dest_ring->base_addr_owner_space_unaligned,
+                                         pipe->dest_ring->base_addr_ce_space_unaligned);
                        kfree(pipe->dest_ring);
                        pipe->dest_ring = NULL;
                }
@@ -1007,8 +1007,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
                        dma_free_coherent(ab->dev,
                                          pipe->status_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
-                                         pipe->status_ring->base_addr_owner_space,
-                                         pipe->status_ring->base_addr_ce_space);
+                                         pipe->status_ring->base_addr_owner_space_unaligned,
+                                         pipe->status_ring->base_addr_ce_space_unaligned);
                        kfree(pipe->status_ring);
                        pipe->status_ring = NULL;
                }