diff options
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
| -rw-r--r-- | drivers/mmc/host/sdhci.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 9e15f41f87b..5d20661bc35 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1334,6 +1334,13 @@ static void sdhci_tasklet_finish(unsigned long param)  	host = (struct sdhci_host*)param; +        /* +         * If this tasklet gets rescheduled while running, it will +         * be run again afterwards but without any active request. +         */ +	if (!host->mrq) +		return; +  	spin_lock_irqsave(&host->lock, flags);  	del_timer(&host->timer); @@ -1345,7 +1352,7 @@ static void sdhci_tasklet_finish(unsigned long param)  	 * upon error conditions.  	 */  	if (!(host->flags & SDHCI_DEVICE_DEAD) && -		(mrq->cmd->error || +	    ((mrq->cmd && mrq->cmd->error) ||  		 (mrq->data && (mrq->data->error ||  		  (mrq->data->stop && mrq->data->stop->error))) ||  		   (host->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST))) {  |