mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
spi: Fix zero length xfer bug
This fixes a bug for messages containing both zero length and unidirectional xfers. The function spi_map_msg will allocate dummy tx and/or rx buffers for use with unidirectional transfers when the hardware can only do a bidirectional transfer. That dummy buffer will be used in place of a NULL buffer even when the xfer length is 0. Then in the function __spi_map_msg, if he hardware can dma, the zero length xfer will have spi_map_buf called on the dummy buffer. Eventually, __sg_alloc_table is called and returns -EINVAL because nents == 0. This fix prevents the error by not using the dummy buffer when the xfer length is zero. Signed-off-by: Chris Lesiak <chris.lesiak@licor.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0e836c3bea
commit
5442dcaa0d
1 changed files with 2 additions and 0 deletions
|
@ -1039,6 +1039,8 @@ static int spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg)
|
||||||
if (max_tx || max_rx) {
|
if (max_tx || max_rx) {
|
||||||
list_for_each_entry(xfer, &msg->transfers,
|
list_for_each_entry(xfer, &msg->transfers,
|
||||||
transfer_list) {
|
transfer_list) {
|
||||||
|
if (!xfer->len)
|
||||||
|
continue;
|
||||||
if (!xfer->tx_buf)
|
if (!xfer->tx_buf)
|
||||||
xfer->tx_buf = ctlr->dummy_tx;
|
xfer->tx_buf = ctlr->dummy_tx;
|
||||||
if (!xfer->rx_buf)
|
if (!xfer->rx_buf)
|
||||||
|
|
Loading…
Reference in a new issue