It seems that em(4) misses Tx completion interrupts under certain

conditions. The cause of missing Tx completion interrupts comes from
Tx interrupt moderation mechanism(delayed interrupts) or chipset bug.
If Tx interrupt moderation mechanism is the cause of false watchdog
timeout error we should have to fix all device drivers that have Tx
interrupt moderation capability. We may need more investigation
for this issue. Anyway, the fix is the same for both cases.

This should fix occasional watchdog timeout errors seen on a few
systems.

Reported by:	-net, Patrick M. Hausen < hausen AT punkt DOT de >
Tested by:	Patrick M. Hausen < hausen AT punkt DOT de >
This commit is contained in:
Pyun YongHyeon 2006-08-22 02:32:48 +00:00
parent 4c5876d2ad
commit c68ea28fe1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=161521

View File

@ -946,6 +946,18 @@ em_watchdog(struct ifnet *ifp)
return;
}
/*
* Reclaim first as there is a possibility of losing Tx completion
* interrupts. Possible cause of missing Tx completion interrupts
* comes from Tx interrupt moderation mechanism(delayed interrupts)
* or chipset bug.
*/
em_txeof(adapter);
if (adapter->num_tx_desc_avail == adapter->num_tx_desc) {
EM_UNLOCK(adapter);
return;
}
if (em_check_for_link(&adapter->hw) == 0)
device_printf(adapter->dev, "watchdog timeout -- resetting\n");