]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath10k: fix dma_free_coherent() pointer
authorThomas Fourier <fourier.thomas@gmail.com>
Mon, 5 Jan 2026 21:04:38 +0000 (22:04 +0100)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 9 Jan 2026 15:43:47 +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: 2a1e1ad3fd37 ("ath10k: Add support for 64 bit ce descriptor")
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/20260105210439.20131-2-fourier.thomas@gmail.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath10k/ce.c

index 7bbda46cfd93c362b0d8c53dc5e8ad7e8621cacd..82f120ee1c66d5ac27a03e5fcb5134365eb428ed 100644 (file)
@@ -1727,8 +1727,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id)
                                  (ce_state->src_ring->nentries *
                                   sizeof(struct ce_desc) +
                                   CE_DESC_RING_ALIGN),
-                                 ce_state->src_ring->base_addr_owner_space,
-                                 ce_state->src_ring->base_addr_ce_space);
+                                 ce_state->src_ring->base_addr_owner_space_unaligned,
+                                 ce_state->src_ring->base_addr_ce_space_unaligned);
                kfree(ce_state->src_ring);
        }
 
@@ -1737,8 +1737,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id)
                                  (ce_state->dest_ring->nentries *
                                   sizeof(struct ce_desc) +
                                   CE_DESC_RING_ALIGN),
-                                 ce_state->dest_ring->base_addr_owner_space,
-                                 ce_state->dest_ring->base_addr_ce_space);
+                                 ce_state->dest_ring->base_addr_owner_space_unaligned,
+                                 ce_state->dest_ring->base_addr_ce_space_unaligned);
                kfree(ce_state->dest_ring);
        }
 
@@ -1758,8 +1758,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id)
                                  (ce_state->src_ring->nentries *
                                   sizeof(struct ce_desc_64) +
                                   CE_DESC_RING_ALIGN),
-                                 ce_state->src_ring->base_addr_owner_space,
-                                 ce_state->src_ring->base_addr_ce_space);
+                                 ce_state->src_ring->base_addr_owner_space_unaligned,
+                                 ce_state->src_ring->base_addr_ce_space_unaligned);
                kfree(ce_state->src_ring);
        }
 
@@ -1768,8 +1768,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id)
                                  (ce_state->dest_ring->nentries *
                                   sizeof(struct ce_desc_64) +
                                   CE_DESC_RING_ALIGN),
-                                 ce_state->dest_ring->base_addr_owner_space,
-                                 ce_state->dest_ring->base_addr_ce_space);
+                                 ce_state->dest_ring->base_addr_owner_space_unaligned,
+                                 ce_state->dest_ring->base_addr_ce_space_unaligned);
                kfree(ce_state->dest_ring);
        }