浏览代码

ath9k: Process BB watchdog events in the tasklet

Move the BB processing code to the tasklet and avoid
doing it in the ISR, there is no real benefit and this
makes the ISR less heavy.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Sujith Manoharan 12 年之前
父节点
当前提交
0c75997758
共有 1 个文件被更改,包括 6 次插入8 次删除
  1. 6 8
      drivers/net/wireless/ath/ath9k/main.c

+ 6 - 8
drivers/net/wireless/ath/ath9k/main.c

@@ -457,6 +457,11 @@ void ath9k_tasklet(unsigned long data)
 
 
 	if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
 	if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
 	    (status & ATH9K_INT_BB_WATCHDOG)) {
 	    (status & ATH9K_INT_BB_WATCHDOG)) {
+		spin_lock(&common->cc_lock);
+		ath_hw_cycle_counters_update(common);
+		ar9003_hw_bb_watchdog_dbg_info(ah);
+		spin_unlock(&common->cc_lock);
+
 		if (ar9003_hw_bb_watchdog_check(ah)) {
 		if (ar9003_hw_bb_watchdog_check(ah)) {
 			type = RESET_TYPE_BB_WATCHDOG;
 			type = RESET_TYPE_BB_WATCHDOG;
 			ath9k_queue_reset(sc, type);
 			ath9k_queue_reset(sc, type);
@@ -593,15 +598,8 @@ irqreturn_t ath_isr(int irq, void *dev)
 		goto chip_reset;
 		goto chip_reset;
 
 
 	if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
 	if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
-	    (status & ATH9K_INT_BB_WATCHDOG)) {
-
-		spin_lock(&common->cc_lock);
-		ath_hw_cycle_counters_update(common);
-		ar9003_hw_bb_watchdog_dbg_info(ah);
-		spin_unlock(&common->cc_lock);
-
+	    (status & ATH9K_INT_BB_WATCHDOG))
 		goto chip_reset;
 		goto chip_reset;
-	}
 
 
 #ifdef CONFIG_ATH9K_WOW
 #ifdef CONFIG_ATH9K_WOW
 	if (status & ATH9K_INT_BMISS) {
 	if (status & ATH9K_INT_BMISS) {