]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
spi: Don't mark message DMA mapped when no transfer in it is
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 22 May 2024 17:09:49 +0000 (20:09 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:28:46 +0000 (13:28 +0200)
[ Upstream commit 9f788ba457b45b0ce422943fcec9fa35c4587764 ]

There is no need to set the DMA mapped flag of the message if it has
no mapped transfers. Moreover, it may give the code a chance to take
the wrong paths, i.e. to exercise DMA related APIs on unmapped data.
Make __spi_map_msg() to bail earlier on the above mentioned cases.

Fixes: 99adef310f68 ("spi: Provide core support for DMA mapping transfers")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://msgid.link/r/20240522171018.3362521-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/spi/spi.c

index b18ae50db1f5297a3f2aceaa14cb37346ed1e7d7..0f9410ed48290f75c8dd224dbf7c7713a0a4876c 100644 (file)
@@ -931,6 +931,7 @@ static int __spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg)
        else
                rx_dev = ctlr->dev.parent;
 
+       ret = -ENOMSG;
        list_for_each_entry(xfer, &msg->transfers, transfer_list) {
                if (!ctlr->can_dma(ctlr, msg->spi, xfer))
                        continue;
@@ -954,6 +955,9 @@ static int __spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg)
                        }
                }
        }
+       /* No transfer has been mapped, bail out with success */
+       if (ret)
+               return 0;
 
        ctlr->cur_msg_mapped = true;