On 02/09/2012 09:27 AM, Vasanthakumar Thiagarajan wrote: > From: Raja Mani <rmani@xxxxxxxxxxxxxxxx> > > The commit "ath6kl: Use a mutex_lock to avoid > race in diabling and handling irq" introduces a > state where ath6kl_sdio_irq_handler() would be waiting > to claim the sdio function for receive indefinitely > when things happen in the following order. > > ath6kl_sdio_irq_handler() > - aquires mtx_irq > - sdio_release_host() > ath6kl_sdio_irq_disable() > - sdio_claim_host() > - sleep on mtx_irq > ath6kl_hif_intr_bh_handler() > - (indefinitely) wait for the sdio > function to be released to exclusively claim > it again for receive operation. > > Fix this by replacing the mtx_irq with an atomic > variable and a wait_queue. > > Signed-off-by: Raja Mani <rmani@xxxxxxxxxxxxxxxx> > Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@xxxxxxxxxxxxxxxx> I would really like to avoid using atomic variable if at all possible. I was trying to think other options and what if we take in ath6kl_sdio_irq_disable() mtx_irq before calling sdio_claim_host(). Wouldn't that solve the deadlock? Kalle -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html