mmc: bcm2835: Properly handle dmaengine_prep_slave_sg
authorStefan Wahren <stefan.wahren@i2se.com>
Sun, 11 Nov 2018 20:23:59 +0000 (21:23 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Dec 2018 07:26:24 +0000 (08:26 +0100)
In case dmaengine_prep_slave_sg fails we need to call dma_unmap_sg.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Acked-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/bcm2835.c

index 7733dbd..5029352 100644 (file)
@@ -507,13 +507,16 @@ void bcm2835_prepare_dma(struct bcm2835_host *host, struct mmc_data *data)
        desc = dmaengine_prep_slave_sg(dma_chan, data->sg, sg_len, dir_slave,
                                       DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
 
-       if (desc) {
-               desc->callback = bcm2835_dma_complete;
-               desc->callback_param = host;
-               host->dma_desc = desc;
-               host->dma_chan = dma_chan;
-               host->dma_dir = dir_data;
+       if (!desc) {
+               dma_unmap_sg(dma_chan->device->dev, data->sg, sg_len, dir_data);
+               return;
        }
+
+       desc->callback = bcm2835_dma_complete;
+       desc->callback_param = host;
+       host->dma_desc = desc;
+       host->dma_chan = dma_chan;
+       host->dma_dir = dir_data;
 }
 
 static void bcm2835_start_dma(struct bcm2835_host *host)