This patch uses jiffies for checking timeout instead of loop count. Because the previous patch which is adjusting interval time changes the timeout value. Besides using jiffies is more clearly for checking timeout instead of counting loop. Signed-off-by: Huijin Park <huijin.park@xxxxxxxxxxx> diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 61b4ffdc89ce..f48216d65d2c 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c @@ -176,14 +176,16 @@ int mmc_go_idle(struct mmc_host *host) int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr) { struct mmc_command cmd = {}; - int i, err = 0; + int err = 0; int interval = 1, interval_max = 10; + unsigned long timeout; cmd.opcode = MMC_SEND_OP_COND; cmd.arg = mmc_host_is_spi(host) ? 0 : ocr; cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR; - for (i = 100; i; i--) { + timeout = jiffies + msecs_to_jiffies(1000); + while (true) { err = mmc_wait_for_cmd(host, &cmd, 0); if (err) break; @@ -197,7 +199,12 @@ int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr) break; } - err = -ETIMEDOUT; + if (time_after(jiffies, timeout)) { + pr_err("%s: Card stuck being busy! %s\n", + mmc_hostname(host), __func__); + err = -ETIMEDOUT; + break; + } mmc_delay(interval); if (interval < interval_max) -- 2.17.1