Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6cc47b1 authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville
Browse files

ath9k: Handle FATAL interrupts correctly



When a FATAL interrupt is received, a full chip reset is
required, which is done in the main tasklet. But since
the reset routine is scheduled as a work item, make sure
that interrupts are not enabled in the tasklet before the
reset is done.

Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8a5b7ab3
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -362,6 +362,13 @@ void ath9k_tasklet(unsigned long data)
			type = RESET_TYPE_BB_WATCHDOG;

		ath9k_queue_reset(sc, type);

		/*
		 * Increment the ref. counter here so that
		 * interrupts are enabled in the reset routine.
		 */
		atomic_inc(&ah->intr_ref_cnt);
		ath_dbg(common, ANY, "FATAL: Skipping interrupts\n");
		goto out;
	}

@@ -400,10 +407,9 @@ void ath9k_tasklet(unsigned long data)

	ath9k_btcoex_handle_interrupt(sc, status);

out:
	/* re-enable hardware interrupt */
	ath9k_hw_enable_interrupts(ah);

out:
	spin_unlock(&sc->sc_pcu_lock);
	ath9k_ps_restore(sc);
}