]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer
authorBreno Leitao <leitao@debian.org>
Mon, 26 Jan 2026 17:50:30 +0000 (09:50 -0800)
committerMark Brown <broonie@kernel.org>
Fri, 30 Jan 2026 13:53:16 +0000 (13:53 +0000)
Protect the curr_xfer clearing in tegra_qspi_non_combined_seq_xfer()
with the spinlock to prevent a race with the interrupt handler that
reads this field to check if a transfer is in progress.

Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
Signed-off-by: Breno Leitao <leitao@debian.org>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/20260126-tegra_xfer-v2-5-6d2115e4f387@debian.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-tegra210-quad.c

index 669e01d3f56a6d9f467edc193b39a7d39ab2d0ef..79aeb80aa4a709aedad0ae125d307471a0b3ff97 100644 (file)
@@ -1288,6 +1288,7 @@ static int tegra_qspi_non_combined_seq_xfer(struct tegra_qspi *tqspi,
        struct spi_transfer *transfer;
        bool is_first_msg = true;
        int ret = 0, val = 0;
+       unsigned long flags;
 
        msg->status = 0;
        msg->actual_length = 0;
@@ -1368,7 +1369,9 @@ static int tegra_qspi_non_combined_seq_xfer(struct tegra_qspi *tqspi,
                msg->actual_length += xfer->len + dummy_bytes;
 
 complete_xfer:
+               spin_lock_irqsave(&tqspi->lock, flags);
                tqspi->curr_xfer = NULL;
+               spin_unlock_irqrestore(&tqspi->lock, flags);
 
                if (ret < 0) {
                        tegra_qspi_transfer_end(spi);