diff options
| author | Pyun YongHyeon <yongari@FreeBSD.org> | 2006-08-22 02:32:48 +0000 |
|---|---|---|
| committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2006-08-22 02:32:48 +0000 |
| commit | c68ea28fe143dfeb6aad5cdc58bb9c9f5ea47d56 (patch) | |
| tree | b0f3b04383680160c0f347c48594bca39f32bc1a | |
| parent | 4c5876d2ad9d99137124e0122eda1e22e9ebf574 (diff) | |
Notes
| -rw-r--r-- | sys/dev/em/if_em.c | 12 |
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"); |
