]> git.baikalelectronics.ru Git - kernel.git/commit
ath6kl: Fix random system lockup
authorRaja Mani <rmani@qca.qualcomm.com>
Thu, 9 Feb 2012 07:27:12 +0000 (12:57 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Thu, 1 Mar 2012 07:34:12 +0000 (09:34 +0200)
commit8df44054b51b132e730a4ffd289be114c0b6133b
treee9431ed202bf979681c027106e93b72b86db4ef4
parent759b5995242fc82704aa4b9d7b32469dac07e76d
ath6kl: Fix random system lockup

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.

kvalo: add ath6kl_sdio_is_on_irq() due to open parenthesis alignment

Signed-off-by: Raja Mani <rmani@qca.qualcomm.com>
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/sdio.c