summaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorPierre Ossman <drzeus@drzeus.cx>2007-04-28 17:30:50 +0200
committerPierre Ossman <drzeus@drzeus.cx>2007-05-01 13:04:18 +0200
commitb5af25bee2de2f6cd1ac74ba737cbc4f3d303e5d (patch)
treeac3659c18e19c3b487806b5ca468fe8e8826f9f2 /drivers/mmc
parentmmc: allow suspended block driver to be removed (diff)
downloadlinux-b5af25bee2de2f6cd1ac74ba737cbc4f3d303e5d.tar.xz
linux-b5af25bee2de2f6cd1ac74ba737cbc4f3d303e5d.zip
mmc: remove card upon suspend
Suspending MMC/SD cards (versus removing and readding them) is an inherently unsafe operation and has even been broken for some time. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/mmc.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 0242c6a21daf..94c04725726d 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1738,10 +1738,17 @@ EXPORT_SYMBOL(mmc_free_host);
*/
int mmc_suspend_host(struct mmc_host *host, pm_message_t state)
{
- mmc_claim_host(host);
- mmc_deselect_cards(host);
+ struct list_head *l, *n;
+
+ mmc_flush_scheduled_work();
+
+ list_for_each_safe(l, n, &host->cards) {
+ struct mmc_card *card = mmc_list_to_card(l);
+
+ mmc_remove_card(card);
+ }
+
mmc_power_off(host);
- mmc_release_host(host);
return 0;
}