diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2012-01-06 13:06:51 +0100 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2012-02-13 20:39:03 -0500 |
commit | e3de2be7368d2983bd7f7ddb6e9cf5ea32363128 (patch) | |
tree | 810c6a3d5fe404ebbe98f98561b1b9b49ac6e4fb /drivers/mmc/host/tmio_mmc_pio.c | |
parent | dd13b4ed4650bb3a7d6c86b549ab66a6aa0c00d8 (diff) | |
download | op-kernel-dev-e3de2be7368d2983bd7f7ddb6e9cf5ea32363128.zip op-kernel-dev-e3de2be7368d2983bd7f7ddb6e9cf5ea32363128.tar.gz |
mmc: tmio_mmc: fix card eject during IO with DMA
When DMA is in use and the card is ejected during IO, DMA transfers have to
be terminated, otherwise the dmaengine driver fails to operate properly,
when the card is re-inserted.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/tmio_mmc_pio.c')
-rw-r--r-- | drivers/mmc/host/tmio_mmc_pio.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c index abad01b..5f9ad74 100644 --- a/drivers/mmc/host/tmio_mmc_pio.c +++ b/drivers/mmc/host/tmio_mmc_pio.c @@ -41,8 +41,8 @@ #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/scatterlist.h> -#include <linux/workqueue.h> #include <linux/spinlock.h> +#include <linux/workqueue.h> #include "tmio_mmc.h" @@ -246,6 +246,7 @@ static void tmio_mmc_reset_work(struct work_struct *work) /* Ready for new calls */ host->mrq = NULL; + tmio_mmc_abort_dma(host); mmc_request_done(host->mmc, mrq); } @@ -272,6 +273,9 @@ static void tmio_mmc_finish_request(struct tmio_mmc_host *host) host->mrq = NULL; spin_unlock_irqrestore(&host->lock, flags); + if (mrq->cmd->error || (mrq->data && mrq->data->error)) + tmio_mmc_abort_dma(host); + mmc_request_done(host->mmc, mrq); } |