Skip site navigation (1)Skip section navigation (2)
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>