summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSujith Reddy Thumma <sthumma@codeaurora.org>2011-04-28 18:29:34 +0530
committerSubhash Jadavani <subhashj@codeaurora.org>2016-05-31 15:20:53 -0700
commit54e1258f91fde23794e86aa36b3ff92c2bdb7de9 (patch)
tree5138a343cec6ed2e3425749ec8e9d9589a40acc9 /drivers
parent267e3b25f4327741a6790bc957b99afd1e4c9e4b (diff)
mmc: core: Claim host while freeing card
When SD/MMC card is removed without unmounting and then reinserted again while gendisk is freed. Partition invalidation and deletion may take more than 10secs during which SDCC controller can suspend due to runtime pm functionality. Once the block layer activity is done it claims host to detach card from MMC bus which triggers SDCC resume. As the host->card is NULL already there is a BUG_ON hit in mmc_sd_resume(). Fix this by claiming host even before we free host->card. CRs-Fixed: 284262 Signed-off-by: Sujith Reddy Thumma <sthumma@codeaurora.org> (cherry picked from commit 5eed6a9778440ef512f597b43368337a7ef9438b) Change-Id: I6b58aab1865a93a025fd9912200ab0beea21be92 Signed-off-by: Shruthi Krishna <skrish@codeaurora.org> Signed-off-by: David Brown <davidb@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/core/mmc.c3
-rw-r--r--drivers/mmc/core/sd.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index fd910a73d8be..d9b64b50ce4b 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1827,7 +1827,10 @@ static void mmc_remove(struct mmc_host *host)
BUG_ON(!host->card);
mmc_remove_card(host->card);
+
+ mmc_claim_host(host);
host->card = NULL;
+ mmc_release_host(host);
}
/*
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index c1e68f40e0b2..bd5e43a67c8b 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -1110,7 +1110,10 @@ static void mmc_sd_remove(struct mmc_host *host)
BUG_ON(!host->card);
mmc_remove_card(host->card);
+
+ mmc_claim_host(host);
host->card = NULL;
+ mmc_release_host(host);
}
/*