Hi Clement,
On Mon, Jun 30, 2025 at 02:55:14PM +0200, Clément Le Goffic wrote:
Fix an issue where the mapped DMA buffer was not unmapped.
"Fix an issue..." is too generic. Can you be more specific? Where
was it mapped? Where was it left unmapped?
Please, do consider that the user needs to understand what
happens in the patch without needing to look into the patch.
Fixes: 7ecc8cfde553 ("i2c: i2c-stm32f7: Add DMA support")
Acked-by: Alain Volmat <alain.volmat@xxxxxxxxxxx>
Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
---
drivers/i2c/busses/i2c-stm32f7.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
index e4aaeb2262d0..042386b4cabe 100644
--- a/drivers/i2c/busses/i2c-stm32f7.c
+++ b/drivers/i2c/busses/i2c-stm32f7.c
@@ -1554,6 +1554,8 @@ static irqreturn_t stm32f7_i2c_handle_isr_errs(struct stm32f7_i2c_dev *i2c_dev,
if (i2c_dev->use_dma) {
stm32f7_i2c_disable_dma_req(i2c_dev);
dmaengine_terminate_async(dma->chan_using);
+ dma_unmap_single(i2c_dev->dev, dma->dma_buf, dma->dma_len,
+ dma->dma_data_dir);
}
i2c_dev->master_mode = false;
@@ -1622,6 +1624,8 @@ static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)
if (i2c_dev->use_dma) {
stm32f7_i2c_disable_dma_req(i2c_dev);
dmaengine_terminate_async(dma->chan_using);
+ dma_unmap_single(i2c_dev->dev, dma->dma_buf, dma->dma_len,
+ dma->dma_data_dir);
}
f7_msg->result = -ENXIO;
}
@@ -1642,6 +1646,8 @@ static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)
dev_dbg(i2c_dev->dev, "<%s>: Timed out\n", __func__);
stm32f7_i2c_disable_dma_req(i2c_dev);
dmaengine_terminate_async(dma->chan_using);
+ dma_unmap_single(i2c_dev->dev, dma->dma_buf, dma->dma_len,
+ dma->dma_data_dir);
Can't we use the dma_callback here, or similar? I see some
similar patterns and I think the code can be improved.