• R
    ath6kl: Fix random system lockup · d1f41597
    Raja Mani 提交于
    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: NRaja Mani <rmani@qca.qualcomm.com>
    Signed-off-by: NVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
    Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
    d1f41597
sdio.c 36.1 KB