]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
spi: dw: fix race between IRQ handler and error handler on SMP
authorPeng Yang <pyangyyd@gmail.com>
Mon, 8 Jun 2026 09:58:49 +0000 (17:58 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 9 Jun 2026 23:07:39 +0000 (00:07 +0100)
commit3c60184e39b57e5efe664fe8540cdbc1bc7ea899
tree9f1e83fec35e132bd02065e5b1edaf4085b7fa93
parent5ac5ec84734fd338867055d4d7b650f18a023cb0
spi: dw: fix race between IRQ handler and error handler on SMP

On SMP systems, dw_spi_handle_err() can be called from the SPI core
kthread while the IRQ handler is still accessing the FIFO on another
CPU. Resetting the chip via dw_spi_reset_chip() during an active FIFO
read/write causes a bus error.

Fix this by calling disable_irq() before the chip reset, which masks
the IRQ and waits for any in-flight handler to complete via
synchronize_irq(). This ensures no handler is accessing the FIFO when
the reset occurs.

Signed-off-by: Peng Yang <pyangyyd@amazon.com>
Suggested-by: Jonathan Chocron <jonnyc@amazon.com>
Link: https://patch.msgid.link/20260608095849.3446-1-pyangyyd@amazon.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-dw-core.c