]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: rzv2h-rspi: Fix DMA transfer error handling for signal interruption
authorFelix Gu <ustc.gu@gmail.com>
Fri, 26 Jun 2026 16:02:29 +0000 (00:02 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 30 Jun 2026 18:58:20 +0000 (19:58 +0100)
wait_event_interruptible_timeout() can return a negative error code when
interrupted by a signal. The original code treated all non-zero return
values as success, which would incorrectly synchronize DMA channels and
return 0 instead of propagating the interruption error.

Fixes: fa08b566860b ("spi: rzv2h-rspi: add support for DMA mode")
Signed-off-by: Felix Gu <ustc.gu@gmail.com>
Reviewed-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Tested-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://patch.msgid.link/20260627-rspi-v1-1-170c93ee14da@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-rzv2h-rspi.c

index 694e5305c638cd7456a9465dc3c68e704d9d5d0c..3e0f1a584b921a8b1dd343d0b9f3ff1796966df4 100644 (file)
@@ -365,14 +365,14 @@ static int rzv2h_rspi_transfer_dma(struct rzv2h_rspi_priv *rspi,
        rzv2h_rspi_clear_all_irqs(rspi);
 
        ret = wait_event_interruptible_timeout(rspi->wait, rspi->dma_callbacked, HZ);
-       if (ret) {
+       if (ret > 0) {
                dmaengine_synchronize(rspi->controller->dma_tx);
                dmaengine_synchronize(rspi->controller->dma_rx);
                ret = 0;
        } else {
                dmaengine_terminate_sync(rspi->controller->dma_tx);
                dmaengine_terminate_sync(rspi->controller->dma_rx);
-               ret = -ETIMEDOUT;
+               ret = ret ?: -ETIMEDOUT;
        }
 
        enable_irq(rspi->irq_rx);