patch "iio: adc: nxp-sar-adc: Fix DMA channel leak in trigger mode" added to char-misc-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: adc: nxp-sar-adc: Fix DMA channel leak in trigger mode
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-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 2452969ca1081fea6bd9ab7ad5e168a5d11f28ec Mon Sep 17 00:00:00 2001
From: Felix Gu <[email protected]>
Date: Sun, 22 Feb 2026 17:45:39 +0800
Subject: iio: adc: nxp-sar-adc: Fix DMA channel leak in trigger mode
The DMA channel was requested in nxp_sar_adc_buffer_postenable() but was only released in nxp_sar_adc_buffer_software_do_predisable(). This caused a DMA channel resource leak when operating in trigger mode.
Fix this by moving dma_request_chan() from nxp_sar_adc_buffer_postenable() into nxp_sar_adc_buffer_software_do_postenable(), ensuring the DMA channel is only requested in software mode.
--- drivers/iio/adc/nxp-sar-adc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/iio/adc/nxp-sar-adc.c +5 -4
@@ -718,6 +718,10 @@ static int nxp_sar_adc_buffer_software_do_postenable(struct iio_dev *indio_dev)struct nxp_sar_adc *info =iio_priv (indio_dev);int ret; + info->dma_chan =dma_request_chan (indio_dev->dev.parent,"rx" ); +if (IS_ERR (info->dma_chan)) +return PTR_ERR (info->dma_chan); +nxp_sar_adc_dma_channels_enable (info, *indio_dev->active_scan_mask);nxp_sar_adc_dma_cfg (info, true);
@@ -738,6 +742,7 @@ static int nxp_sar_adc_buffer_software_do_postenable(struct iio_dev *indio_dev) out_dma_channels_disable:nxp_sar_adc_dma_cfg (info, false);nxp_sar_adc_dma_channels_disable (info, *indio_dev->active_scan_mask); +dma_release_channel (info->dma_chan);return ret; }
@@ -765,10 +770,6 @@ static int nxp_sar_adc_buffer_postenable(struct iio_dev *indio_dev)unsigned long channel;int ret; - info->dma_chan =dma_request_chan (indio_dev->dev.parent,"rx" ); -if (IS_ERR (info->dma_chan)) -return PTR_ERR (info->dma_chan); - info->channels_used =0 ;/*
Signature · 1 line
2.53.0