[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <zp3pagbojmu67o4sjm65a44ovvui5uvybs32nayvhtewfbm4el@n5lro4v5iq36>
Date: Wed, 2 Jul 2025 19:08:13 +0200
From: Andi Shyti <andi.shyti@...nel.org>
To: Clément Le Goffic <clement.legoffic@...s.st.com>
Cc: Pierre-Yves MORDRET <pierre-yves.mordret@...s.st.com>,
Alain Volmat <alain.volmat@...s.st.com>, Maxime Coquelin <mcoquelin.stm32@...il.com>,
Alexandre Torgue <alexandre.torgue@...s.st.com>, Sumit Semwal <sumit.semwal@...aro.org>,
Christian König <christian.koenig@....com>, M'boumba Cedric Madianga <cedric.madianga@...il.com>,
Wolfram Sang <wsa@...nel.org>, Pierre-Yves MORDRET <pierre-yves.mordret@...com>,
linux-i2c@...r.kernel.org, linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, linux-media@...r.kernel.org,
dri-devel@...ts.freedesktop.org, linaro-mm-sig@...ts.linaro.org
Subject: Re: [PATCH v3 2/3] i2c: stm32f7: unmap DMA mapped buffer
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@...s.st.com>
> Signed-off-by: Clément Le Goffic <clement.legoffic@...s.st.com>
> ---
> 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.
Andi
> f7_msg->result = -ETIMEDOUT;
> }
> }
>
> --
> 2.43.0
>
Powered by blists - more mailing lists