提交 3b91e550 编写于 作者: P Pierre Ossman

mmc: Flush pending detects on host removal

Make sure we kill of any pending detection runs when the host
is removed instead of when it is freed. Also add some debugging
to make sure the driver doesn't queue up more detection after it
has removed the host.
Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
上级 1c6a0718
......@@ -1550,6 +1550,12 @@ static void mmc_setup(struct mmc_host *host)
*/
void mmc_detect_change(struct mmc_host *host, unsigned long delay)
{
#ifdef CONFIG_MMC_DEBUG
mmc_claim_host(host);
BUG_ON(host->removed);
mmc_release_host(host);
#endif
mmc_schedule_delayed_work(&host->detect, delay);
}
......@@ -1690,6 +1696,14 @@ void mmc_remove_host(struct mmc_host *host)
{
struct list_head *l, *n;
#ifdef CONFIG_MMC_DEBUG
mmc_claim_host(host);
host->removed = 1;
mmc_release_host(host);
#endif
mmc_flush_scheduled_work();
list_for_each_safe(l, n, &host->cards) {
struct mmc_card *card = mmc_list_to_card(l);
......@@ -1710,7 +1724,6 @@ EXPORT_SYMBOL(mmc_remove_host);
*/
void mmc_free_host(struct mmc_host *host)
{
mmc_flush_scheduled_work();
mmc_free_host_sysfs(host);
}
......
......@@ -147,6 +147,9 @@ struct mmc_host {
struct mmc_card *card_selected; /* the selected MMC card */
struct delayed_work detect;
#ifdef CONFIG_MMC_DEBUG
unsigned int removed:1; /* host is being removed */
#endif
unsigned long private[0] ____cacheline_aligned;
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册