summaryrefslogtreecommitdiff
path: root/drivers/spi/spi.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2016-02-15 21:28:02 +0300
committerMark Brown <broonie@kernel.org>2016-02-18 20:41:44 +0300
commit628269704f19fcfc765499b7158effccfc79b6cf (patch)
treec4d5f2000c5e0bb167e435589bce9500180e8839 /drivers/spi/spi.c
parent556351f14e74db4cd3ddde386457edce7bf0b27f (diff)
downloadlinux-628269704f19fcfc765499b7158effccfc79b6cf.tar.xz
spi: Add cond_resched() in main message processing loop
When a controller has only PIO support it is very likely that we will run into use cases where we spend a very large amount of time consuming CPU. Code that does this should call cond_resched() every once in a while to give other tasks more of a chance to run so do that in the main SPI loop, the overhead is negligable if it's not needed. Suggested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r--drivers/spi/spi.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index dcc6f6e92668..0b2bbf144460 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1184,6 +1184,9 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread)
return;
}
mutex_unlock(&master->bus_lock_mutex);
+
+ /* Prod the scheduler in case transfer_one() was busy waiting */
+ cond_resched();
}
/**