aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPyun YongHyeon <yongari@FreeBSD.org>2006-08-22 02:32:48 +0000
committerPyun YongHyeon <yongari@FreeBSD.org>2006-08-22 02:32:48 +0000
commitc68ea28fe143dfeb6aad5cdc58bb9c9f5ea47d56 (patch)
treeb0f3b04383680160c0f347c48594bca39f32bc1a
parent4c5876d2ad9d99137124e0122eda1e22e9ebf574 (diff)
Notes
-rw-r--r--sys/dev/em/if_em.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c
index 340520ad55c31..400d0e3663448 100644
--- a/sys/dev/em/if_em.c
+++ b/sys/dev/em/if_em.c
@@ -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");