From 600068da8c2bd577e462c3223d9736123ed6a342 Mon Sep 17 00:00:00 2001 From: Asutosh Das Date: Wed, 8 Jan 2014 17:54:31 +0530 Subject: [PATCH] mmc: block: stop bkops during shutdown [ 42.885198] SysRq : Emergency Remount R/O [ 43.003988] mmc0: mmc_bus_shutdown: invoked ### [ 43.033289] mmc0: mmc_bus_shutdown: done ### [ 43.118486] mmc0: sdhci_request: sending cmd8 after bus shutdown !!! [ 43.147955] [] (sdhci_request+0x4c/0x260) from [] (mmc_start_request+0x27c/0x2b0) [ 43.157152] [] (mmc_start_request+0x27c/0x2b0) from [] (mmc_wait_for_req+0x6c/0x13c) [ 43.166618] [] (mmc_wait_for_req+0x6c/0x13c) from [] (mmc_send_cxd_data+0xe0/0x114) [ 43.175991] [] (mmc_send_cxd_data+0xe0/0x114) from [] (mmc_send_ext_csd+0x1c/0x20) [ 43.185277] [] (mmc_send_ext_csd+0x1c/0x20) from [] (mmc_read_bkops_status+0x98/0xdc) [ 43.194823] [] (mmc_read_bkops_status+0x98/0xdc) from [] (mmc_start_bkops+0x168/0x324) [ 43.204461] [] (mmc_start_bkops+0x168/0x324) from [] (process_one_work+0x200/0x400) [ 43.213835] [] (process_one_work+0x200/0x400) from [] (worker_thread+0x184/0x2a4) [ 43.223039] [] (worker_thread+0x184/0x2a4) from [] (kthread+0x80/0x90) [ 43.231286] [] (kthread+0x80/0x90) from [] (kernel_thread_exit+0x0/0x8) [ 45.648206] wcnss crash shutdown 0 [ 45.650599] Rebooting in 5 seconds.. In the above log, it is seen that the bkops thread runs after mmc_bus_shutdown is completed and sends CMD8. Hence, cancel bkops work during shutdown to prevent sending commands after mmc bus is shutdown. CRs-fixed: 593813 Change-Id: I3e8e9eb228bd03603d04561eb478d60664f50aaa Signed-off-by: Asutosh Das --- drivers/mmc/card/block.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index ff3e4ac2e85..f4493a1c77c 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -3160,6 +3160,9 @@ static void mmc_blk_shutdown(struct mmc_card *card) /* send power off notification */ if (mmc_card_mmc(card)) { mmc_rpm_hold(card->host, &card->dev); + mmc_claim_host(card->host); + mmc_stop_bkops(card); + mmc_release_host(card->host); mmc_send_long_pon(card); mmc_rpm_release(card->host, &card->dev); }