diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 71caa588a019..dafdbd99ce71 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -3570,6 +3570,10 @@ static int mmc_blk_cmdq_issue_rq(struct mmc_queue *mq, struct request *req) mmc_get_card(card); +#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME + if (mmc_bus_needs_resume(card->host)) + mmc_resume_bus(card->host); +#endif if (!card->host->cmdq_ctx.active_reqs && mmc_card_doing_bkops(card)) { ret = mmc_cmdq_halt(card->host, true); if (ret) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index bf369af5511d..b76bb7a74049 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -3051,6 +3051,7 @@ static inline void mmc_bus_put(struct mmc_host *host) int mmc_resume_bus(struct mmc_host *host) { unsigned long flags; + int err = 0; if (!mmc_bus_needs_resume(host)) return -EINVAL; @@ -3066,6 +3067,14 @@ int mmc_resume_bus(struct mmc_host *host) mmc_power_up(host, host->card->ocr); BUG_ON(!host->bus_ops->resume); host->bus_ops->resume(host); + if (mmc_card_cmdq(host->card)) { + err = mmc_cmdq_halt(host, false); + if (err) + pr_err("%s: %s: unhalt failed: %d\n", + mmc_hostname(host), __func__, err); + else + mmc_card_clr_suspended(host->card); + } } if (host->bus_ops->detect && !host->bus_dead)