diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 1e982e0349bc..0ed7d4024fac 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -2972,7 +2972,6 @@ static enum blk_eh_timer_return mmc_blk_cmdq_req_timed_out(struct request *req) struct mmc_request *mrq = &mq_rq->cmdq_req.mrq; struct mmc_cmdq_req *cmdq_req = &mq_rq->cmdq_req; - host->cmdq_ops->dumpstate(host); if (cmdq_req->cmdq_req_flags & DCMD) mrq->cmd->error = -ETIMEDOUT; else @@ -2997,6 +2996,10 @@ static void mmc_blk_cmdq_err(struct mmc_queue *mq) struct mmc_cmdq_context_info *ctx_info = &host->cmdq_ctx; pm_runtime_get_sync(&card->dev); + mmc_host_clk_hold(host); + host->cmdq_ops->dumpstate(host); + mmc_host_clk_release(host); + err = mmc_cmdq_halt(host, true); if (err) { pr_err("halt: failed: %d\n", err); diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 57961a498a1d..a55facf12e1f 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1547,6 +1547,9 @@ int mmc_cmdq_wait_for_dcmd(struct mmc_host *host, mmc_hostname(host), cmd->opcode, cmd->error); err = cmd->error; + mmc_host_clk_hold(host); + host->cmdq_ops->dumpstate(host); + mmc_host_clk_release(host); } return err; }