On Mon, 30 May 2011, Per Forlin wrote: > Hi Daniel, > > > > > On 29 May 2011 15:26, Daniel Drake <dsd <at> laptop.org> wrote: > > > Hi, > > > > > > The following commit in 2.6.39 causes instant death for libertas_sdio > > > when it receives its first interrupt during initialization: > > > > > > commit 06e8935febe687e2a561707d4c7ca4245d261dbe > > > > The crash happens on this line of code in if_sdio_interrupt: > > > > cause = sdio_readb(card->func, IF_SDIO_H_INT_STATUS, &ret); > > > > card is NULL here > Thanks for you detailed report. It fails due to sdio_get_drvdata() returns NULL. > > I am thinking of if the timing has changed due to this "single irq" patch or if > the functionality is broken. > To answer that I have a question on the if_sdio.c in libertas. > > if_sdio.c > sdio_claim_host(); > sdio_claim_irq() > ... > sdio_release_host() > sdio_set_drvdata(func, card) This looks wrong to me. the driver must be ready to receive interrupts the moment it registers for it, or make sure the hardware is not generating any. > Just a sanity question, can the interrupt occur before sdio_set_drvdata()? What might be happening here is that for some reasons the card is asserting the interrupt line, but none of the function bits in CCCR_INTx is set. Nicolas -- 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