Date: Thu, 27 Apr 2006 09:10:48 -0500 From: Nathan Whitehorn <nathanw@uchicago.edu> To: freebsd-amd64@freebsd.org Subject: nve(4) timeout fix Message-ID: <4450D0E8.4000403@uchicago.edu> In-Reply-To: <20060427120035.D7FA016A43B@hub.freebsd.org> References: <20060427120035.D7FA016A43B@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Also on the subject of nVidia NICs, I've fixed the device timeout problem on nve(4). It appears that some revisions of the hardware don't send interrupts on tx completion, which caused watchdog timeouts under low load. We should take this hardware quirk into account for the nfe port as well. -Nathan --- if_nve_original.c Wed Apr 26 22:23:14 2006 +++ if_nve.c Wed Apr 26 21:52:34 2006 @@ -1270,6 +1270,18 @@ nve_watchdog(struct ifnet *ifp) { struct nve_softc *sc = ifp->if_softc; + + NVE_LOCK(sc); + /* Check for lost interrupts -- happens on nForce4 */ + sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX); + sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX); + sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX); + + if (sc->pending_txs == 0) { + NVE_UNLOCK(sc); + return; /* Problem went away */ + } + NVE_UNLOCK(sc); device_printf(sc->dev, "device timeout (%d)\n", sc->pending_txs);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4450D0E8.4000403>