From: Ben Greear <greearb@xxxxxxxxxxxxxxx> In case where the system is sluggish, we should probably break out early. Maybe this will fix issues where the OS thinks the IRQ handler is not responding and disables the IRQ because 'nobody cared' Signed-off-by: Ben Greear <greearb@xxxxxxxxxxxxxxx> --- drivers/net/wireless/ath/ath9k/recv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index b90ea2b..274814c 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c @@ -1084,6 +1084,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) dma_addr_t new_buf_addr; unsigned int budget = 512; struct ieee80211_hdr *hdr; + unsigned long expires_jiffies = jiffies + 5; if (edma) dma_type = DMA_BIDIRECTIONAL; @@ -1241,6 +1242,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) if (!budget--) break; + + if (time_is_before_jiffies(expires_jiffies)) + break; } while (1); if (!(ah->imask & ATH9K_INT_RXEOL)) { -- 2.4.11