{
int ret = 0;
bool cmdq_mode = !!mmc_card_cmdq(card);
+ struct mmc_host *host = card->host;
+ struct mmc_cmdq_context_info *ctx = &host->cmdq_ctx;
if (!(card->host->caps2 & MMC_CAP2_CMD_QUEUE) ||
!card->ext_csd.cmdq_support ||
__func__, ret, MMC_CARD_CMDQ_BLK_SIZE);
goto out;
}
+
+ } else {
+ if (!test_bit(CMDQ_STATE_HALT, &ctx->curr_state)) {
+ ret = mmc_cmdq_halt(host, true);
+ if (ret) {
+ pr_err("%s: halt: failed: %d\n",
+ mmc_hostname(host), ret);
+ goto out;
+ }
+ }
}
ret = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
{
if (((req->cmd_flags & (REQ_FLUSH | REQ_DISCARD)) &&
test_bit(CMDQ_STATE_DCMD_ACTIVE, &ctx->curr_state)) ||
- mmc_host_halt(host) ||
+ (!host->card->part_curr && mmc_host_halt(host)) ||
test_bit(CMDQ_STATE_ERR, &ctx->curr_state)) {
pr_debug("%s: %s: skip pulling reqs: state: %lu\n",
mmc_hostname(host), __func__, ctx->curr_state);