[PATCH] spi: don't lock the bus in __spi_pump_messages if it is already locked
Heiko Stübner
heiko at sntech.de
Thu Mar 17 16:18:19 PDT 2016
External users may use spi_bus_lock to get exclusive access. This will
also grab the bus_lock_mutex and may therefore result in a deadlock if
__spi_pump_messages also tries to get the mutex.
Fixes: 49023d2e4ead ("spi: core: Fix deadlock when sending messages")
Signed-off-by: Heiko Stuebner <heiko at sntech.de>
---
drivers/spi/spi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index de2f2f9..62f962b 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1160,7 +1160,7 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread,
}
}
- if (!bus_locked)
+ if (!bus_locked && !master->bus_lock_flag)
mutex_lock(&master->bus_lock_mutex);
trace_spi_message_start(master->cur_msg);
@@ -1192,7 +1192,7 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread,
}
out:
- if (!bus_locked)
+ if (!bus_locked && !master->bus_lock_flag)
mutex_unlock(&master->bus_lock_mutex);
/* Prod the scheduler in case transfer_one() was busy waiting */
--
2.6.4
More information about the Linux-rockchip
mailing list