From OpenBSD, rev 1.72:

In nfe_start() do a fast return if IFF_OACTIVE is set, in
this case we need a Tx interrupt to clean up the DMA ring
before if_start can be properly called.
This commit is contained in:
cube 2007-09-24 13:11:08 +00:00
parent d32ed98975
commit 5b396aa2c0

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_nfe.c,v 1.17 2007/09/01 07:32:30 dyoung Exp $ */
/* $NetBSD: if_nfe.c,v 1.18 2007/09/24 13:11:08 cube Exp $ */
/* $OpenBSD: if_nfe.c,v 1.52 2006/03/02 09:04:00 jsg Exp $ */
/*-
@ -21,7 +21,7 @@
/* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.17 2007/09/01 07:32:30 dyoung Exp $");
__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.18 2007/09/24 13:11:08 cube Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@ -1090,6 +1090,9 @@ nfe_start(struct ifnet *ifp)
int old = sc->txq.queued;
struct mbuf *m0;
if ((ifp->if_flags & (IFF_OACTIVE | IFF_RUNNING)) != IFF_RUNNING)
return;
for (;;) {
IFQ_POLL(&ifp->if_snd, m0);
if (m0 == NULL)