Date: Thu, 27 Apr 2006 17:28:57 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-amd64@freebsd.org Subject: Re: nve(4) timeout fix Message-ID: <200604271728.59430.jhb@freebsd.org> In-Reply-To: <4450D0E8.4000403@uchicago.edu> References: <20060427120035.D7FA016A43B@hub.freebsd.org> <4450D0E8.4000403@uchicago.edu>
index | next in thread | previous in thread | raw e-mail
On Thursday 27 April 2006 10:10, Nathan Whitehorn wrote:
> 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);
I would just remove the second NVE_UNLOCK and remove the NVE_LOCK
right after the device_printf() so you don't unlock the mutex
just to turn around and lock it again.
--
John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604271728.59430.jhb>
