On 02/01/17 20:23, Gabriel Krisman Bertazi wrote: > One of our kernelCI boxes hanged at boot because a faulty eSDHC device > was triggering spurious CARD_INT interrupts for SD cards, causing CMD52 > reads, which are not allowed for SD devices. This adds a sanity check > to the interruption path, preventing that illegal command from getting > sent to SD devices. > > This quirk allows that particular machine to resume boot despite the > faulty hardware, instead of getting hung dealing with thousands of > mishandled interrupts. > > Signed-off-by: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxxxx> > CC: Adrian Hunter <adrian.hunter@xxxxxxxxx> > CC: Ulf Hansson <ulf.hansson@xxxxxxxxxx> > CC: linux-mmc@xxxxxxxxxxxxxxx > --- > drivers/mmc/host/sdhci.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index 23909804ffb8..43913876581e 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -2665,6 +2665,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) > { > irqreturn_t result = IRQ_NONE; > struct sdhci_host *host = dev_id; > + struct mmc_host *mmc = host->mmc; > u32 intmask, mask, unexpected = 0; > int max_loops = 16; > > @@ -2733,7 +2734,9 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) > if (intmask & SDHCI_INT_RETUNE) > mmc_retune_needed(host->mmc); > > - if (intmask & SDHCI_INT_CARD_INT) { > + if (intmask & SDHCI_INT_CARD_INT && mmc->card && > + (mmc->card->type == MMC_TYPE_SDIO || > + mmc->card->type == MMC_TYPE_SD_COMBO)) { We shouldn't have to look at the card type. But if the interrupt is not enabled, then we shouldn't process it. What about: if (intmask & SDHCI_INT_CARD_INT && (host->ier & SDHCI_INT_CARD_INT)) { > sdhci_enable_sdio_irq_nolock(host, false); > host->thread_isr |= SDHCI_INT_CARD_INT; > result = IRQ_WAKE_THREAD; > -- 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