summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2018-11-15 16:08:32 -0800
committerMark Brown <broonie@kernel.org>2018-11-15 16:08:32 -0800
commitd57e79601bc587f140a9bbb102493ad86f648ae0 (patch)
tree789d5a095ea43bf5633917bca6a878a89976f37b /drivers
parent7986e2273c1ed987ff34f1c318d5a2b18e8c0fee (diff)
spi: Fix core transfer waits after slave support
The refactoring done as part of adding the core support for handling waiting for slave transfer dropped a conditional which meant that we started waiting for completion of all transfers, not just those that the controller asked for. This caused hangs and massive delays on platforms that don't need the core delay. Re-add the delay to fix this. Fixes: 810923f3bf06c11 (spi: Deal with slaves that return from transfer_one() unfinished) Reported-by: Tony Lindgren <tony@atomide.com> Tested-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/spi/spi.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 498d3b9bf3ae..430ad637c643 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1114,9 +1114,11 @@ static int spi_transfer_one_message(struct spi_controller *ctlr,
goto out;
}
- ret = spi_transfer_wait(ctlr, msg, xfer);
- if (ret < 0)
- msg->status = ret;
+ if (ret > 0) {
+ ret = spi_transfer_wait(ctlr, msg, xfer);
+ if (ret < 0)
+ msg->status = ret;
+ }
} else {
if (xfer->len)
dev_err(&msg->spi->dev,