patch "iio: adc: stm32-adc: fix stopping dma" added to staging-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
iio: adc: stm32-adc: fix stopping dma
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From e6afcf6c598d6f3a0c9c408bfeddb3f5730608b0 Mon Sep 17 00:00:00 2001
From: Fabrice Gasnier <[email protected]>
Date: Fri, 25 Oct 2019 17:04:20 +0200
Subject: iio: adc: stm32-adc: fix stopping dma
There maybe a race when using dmaengine_terminate_all(). The predisable routine may call iio_triggered_buffer_predisable() prior to a pending DMA callback.
Adopt dmaengine_terminate_sync() to ensure there's no pending DMA request before calling iio_triggered_buffer_predisable().
--- drivers/iio/adc/stm32-adc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/iio/adc/stm32-adc.c +2 -2
@@ -1399,7 +1399,7 @@ static int stm32_adc_dma_start(struct iio_dev *indio_dev) cookie =dmaengine_submit (desc); ret =dma_submit_error (cookie);if (ret) { -dmaengine_terminate_all (adc->dma_chan); +dmaengine_terminate_sync (adc->dma_chan);return ret; }
@@ -1477,7 +1477,7 @@ static void __stm32_adc_buffer_predisable(struct iio_dev *indio_dev)stm32_adc_conv_irq_disable (adc);if (adc->dma_chan) -dmaengine_terminate_all (adc->dma_chan); +dmaengine_terminate_sync (adc->dma_chan);if (stm32_adc_set_trig (indio_dev,NULL ))dev_err (&indio_dev->dev,"Can't clear trigger\n" );
Signature · 1 line
2.23.0