On Fri, Jan 21, 2011 at 2:33 PM, Nicolas Pitre <nico@xxxxxxxxxxx> wrote: > On Fri, 21 Jan 2011, zhangfei gao wrote: > >> >From b7be39e0bbac3950057078ac66900ebc0871f77e Mon Sep 17 00:00:00 2001 >> From: Zhangfei Gao <zhangfei.gao@xxxxxxxxxxx> >> Date: Fri, 21 Jan 2011 18:02:47 -0500 >> Subject: [PATCH] mmc: clear all interrupt in suspend before free_irq >> >> When debugging wifi host sleep, race condition about >> SDHCI_INT_CARD_INT happens. >> Host free_irq in suspend and request_irq when resume back. >> However SDHCI_INT_CARD_INT is not cleared, so interrupt will >> immediately happen after request_irq. >> mmc_signal_sdio_irq will be called and wakeup sdio_irq_thread. >> As a result irq_handler in sdio driver is called even before host resume back. >> >> The correct case is mmc_sdio_resume calls mmc_signal_sdio_irq to >> wakeup sdio_irq_thread >> >> Signed-off-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxxx> > > That makes sense, as long as the masking of interrupts doesn't prevent > a SDIO card interrupt from waking up the host system. Thanks Nicolas for comments Masking interrupt does not impact wake up cpu. 1. irq is already freed in suspend, and request again when resume backed 2. cpu is wake up first, then irq service is handled, so irq does not impact cpu wake up or not. 3. mmc_signal_sdio_irq is serviced in mmc_sdio_resume. > > >> --- >> drivers/mmc/host/sdhci.c | 1 + >> 1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c >> index aacd78c..97074ae 100644 >> --- a/drivers/mmc/host/sdhci.c >> +++ b/drivers/mmc/host/sdhci.c >> @@ -1707,6 +1707,7 @@ int sdhci_suspend_host(struct sdhci_host *host, >> pm_message_t state) >> ret = mmc_suspend_host(host->mmc); >> if (ret) >> return ret; >> + sdhci_clear_set_irqs(host, SDHCI_INT_ALL_MASK, 0); >> >> free_irq(host->irq, host); >> >> -- >> 1.7.0.4 >> > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html