nve(4) timeout fix

Nathan Whitehorn nathanw at uchicago.edu
Thu Apr 27 14:10:58 UTC 2006


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);



More information about the freebsd-amd64 mailing list