]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
staging: mt7621-mmc: Only unmap_sg if mapped
authorGeorge Hilliard <thirtythreeforty@gmail.com>
Tue, 19 Mar 2019 02:20:12 +0000 (20:20 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Mar 2019 07:23:18 +0000 (08:23 +0100)
A failure while processing the start command could cause dma_unmap_sg()
to be called without first calling dma_map_sg().

Since calling dma_unmap_sg() is only needed when data != NULL, move the
unmap call into the corresponding if {} block.

Signed-off-by: George Hilliard <thirtythreeforty@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/mt7621-mmc/sd.c

index a53006674178817c0efc46bca0545aec881c8cee..40f23e200c7a39fdf57b200fa11540e7641da583 100644 (file)
@@ -686,7 +686,7 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq)
 
                /* then wait command done */
                if (msdc_command_resp(host, cmd, 1, CMD_TIMEOUT) != 0)
-                       goto done;
+                       goto unmap;
 
                /* for read, the data coming too fast, then CRC error
                 *  start DMA no business with CRC.
@@ -724,18 +724,17 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq)
                /* Last: stop transfer */
                if (data->stop) {
                        if (msdc_do_command(host, data->stop, 0, CMD_TIMEOUT) != 0)
-                               goto done;
+                               goto unmap;
                }
-       }
 
-done:
-       if (data) {
+unmap:
                host->data = NULL;
                dma_unmap_sg(mmc_dev(mmc), data->sg, data->sg_len,
                             mmc_get_dma_dir(data));
                host->blksz = 0;
        }
 
+done:
        if (mrq->cmd->error)
                host->error = 0x001;
        if (mrq->data && mrq->data->error)