mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
spi: rzv2h-rspi: Fix DMA transfer error handling for signal interruption
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: fa08b56686 ("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>
This commit is contained in:
parent
eeda4e1e6d
commit
7fc2c3dcae
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user