summaryrefslogtreecommitdiff
path: root/staging/cli_ip.c
AgeCommit message (Expand)AuthorFilesLines
2013-05-13staging: add mausezahn staging directoryDaniel Borkmann1-0/+888
ect>mode:
authorMark Brown <broonie@kernel.org>2016-07-21 23:53:31 +0100
committerMark Brown <broonie@kernel.org>2016-07-25 11:47:52 +0100
commitef4d96ec4ad947360f48677b6007a4c77953b090 (patch)
tree3596ca87c41742a64b444d8c129389298fc30921
parentf4502dd1da9b060a49d539eb754ff86cb97b89f0 (diff)
spi: Split bus and I/O locking
The current SPI code attempts to use bus_lock_mutex for two purposes. One is to implement spi_bus_lock() which grants exclusive access to the bus. The other is to serialize access to the physical hardware. This duplicate purpose causes confusion which leads to cases where access is not locked when a caller holds the bus lock mutex. Fix this by splitting out the I/O functionality into a new io_mutex. This means taking both mutexes in the DMA path, replacing the existing mutex with the new I/O one in the message pump (the mutex now always being taken in the message pump) and taking the bus lock mutex in spi_sync(), allowing __spi_sync() to have no mutex handling. While we're at it hoist the mutex further up the message pump before we power up the device so that all power up/down of the block is covered by it and there are no races with in-line pumping of messages. Reported-by: Rich Felker <dalias@libc.org> Tested-by: Rich Felker <dalias@libc.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat