mtd: rawnand: marvell: Fix error handle regarding dma_map_sg
authorJack Wang <jinpu.wang@ionos.com>
Fri, 19 Aug 2022 06:07:47 +0000 (08:07 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 21 Sep 2022 08:38:46 +0000 (10:38 +0200)
dma_map_sg return 0 on error, in case of error return -EIO,
also add the dma_unmap_sg as rollback on the following error.

Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Christophe Kerello <christophe.kerello@foss.st.com>
Cc: Cai Huoqing <cai.huoqing@linux.dev>
Cc: linux-mtd@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20220819060801.10443-6-jinpu.wang@ionos.com
drivers/mtd/nand/raw/marvell_nand.c

index 2455a58..d9f2f1d 100644 (file)
@@ -865,13 +865,19 @@ static int marvell_nfc_xfer_data_dma(struct marvell_nfc *nfc,
        marvell_nfc_enable_dma(nfc);
        /* Prepare the DMA transfer */
        sg_init_one(&sg, nfc->dma_buf, dma_len);
-       dma_map_sg(nfc->dma_chan->device->dev, &sg, 1, direction);
+       ret = dma_map_sg(nfc->dma_chan->device->dev, &sg, 1, direction);
+       if (!ret) {
+               dev_err(nfc->dev, "Could not map DMA S/G list\n");
+               return -ENXIO;
+       }
+
        tx = dmaengine_prep_slave_sg(nfc->dma_chan, &sg, 1,
                                     direction == DMA_FROM_DEVICE ?
                                     DMA_DEV_TO_MEM : DMA_MEM_TO_DEV,
                                     DMA_PREP_INTERRUPT);
        if (!tx) {
                dev_err(nfc->dev, "Could not prepare DMA S/G list\n");
+               dma_unmap_sg(nfc->dma_chan->device->dev, &sg, 1, direction);
                return -ENXIO;
        }