浏览代码

zd1211rw: detect stalled beacon interrupt faster

As USB_INT_ID_RETRY_FAILED can override USB_INT_ID_REGS, beacon interrupt
(CR_INTERRUPT) might be lost. Problem is that when device trigger CR_INTERRUPT
it disables HW interrupt. Now if USB_INT_ID_REGS with CR_INTERRUPT gets lost,
beacon interrupt stays disabled until beacon watchdog notices the stall. This
happen very often on heavy TX. Improve watchdog to trigger earlier, after three
missing beacon interrupts.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Jussi Kivilinna 14 年之前
父节点
当前提交
55f7782e14
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/net/wireless/zd1211rw/zd_mac.c

+ 2 - 1
drivers/net/wireless/zd1211rw/zd_mac.c

@@ -1429,7 +1429,8 @@ static void beacon_watchdog_handler(struct work_struct *work)
 	spin_lock_irq(&mac->lock);
 	spin_lock_irq(&mac->lock);
 	interval = mac->beacon.interval;
 	interval = mac->beacon.interval;
 	period = mac->beacon.period;
 	period = mac->beacon.period;
-	timeout = mac->beacon.last_update + msecs_to_jiffies(interval) + HZ;
+	timeout = mac->beacon.last_update +
+			msecs_to_jiffies(interval * 1024 / 1000) * 3;
 	spin_unlock_irq(&mac->lock);
 	spin_unlock_irq(&mac->lock);
 
 
 	if (interval > 0 && time_is_before_jiffies(timeout)) {
 	if (interval > 0 && time_is_before_jiffies(timeout)) {