diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/pci/if_em.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/pci/if_em.c b/sys/dev/pci/if_em.c index e08be39ead7..41704fa5e2b 100644 --- a/sys/dev/pci/if_em.c +++ b/sys/dev/pci/if_em.c @@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE. ***************************************************************************/ -/* $OpenBSD: if_em.c,v 1.148 2006/09/17 20:26:14 brad Exp $ */ +/* $OpenBSD: if_em.c,v 1.149 2006/09/17 21:35:58 brad Exp $ */ /* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */ #include <dev/pci/if_em.h> @@ -588,6 +588,14 @@ em_watchdog(struct ifnet *ifp) return; } + /* + * Reclaim first as there is a possibility of losing Tx completion + * interrupts. + */ + em_txeof(sc); + if (sc->num_tx_desc_avail == sc->num_tx_desc) + return; + printf("%s: watchdog timeout -- resetting\n", sc->sc_dv.dv_xname); em_init(sc); |