Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 May 2004 22:18:24 +0300
From:      Sven Petai <hadara@bsd.ee>
To:        freebsd-current@freebsd.org
Cc:        John Angelmo <john@veidit.net>
Subject:   Re: re driver problem
Message-ID:  <200405262218.24586.hadara@bsd.ee>
In-Reply-To: <20040517201611.GC88080@cserv62.csub.edu>
References:  <40A10AC8.6080406@veidit.net> <40A1F7C9.1010801@veidit.net> <20040517201611.GC88080@cserv62.csub.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 17 May 2004 23:16, Russell Jackson wrote:
> On Wed, May 12, 2004 at 12:09:13PM +0200, John Angelmo wrote:
> > S?ren Schmidt wrote:
> > >Thats a known problem, its been like this for ages...
> > >
> > >I hacked rl to take the card instead, works like a charm...
> >
> > How did you do that? do you have a patch for it? perhaps we can replace
> > re with a hacked rl?
> >
> > /John
>
> I'd also be interested in a patch.

hi

following patch seems to fix the longstanding "re0: watchdog timeout" problem 
( at least on my laptop). I haven't done much testing yet but it survived 3 
cvsups without problems, without it I got first timeout in ~30 seconds, so 
let me know if it works/doesn't work for your systems....

Sven Petai

--- sys/dev/re/if_re.c.orig     Wed May 26 21:33:53 2004
+++ sys/dev/re/if_re.c  Wed May 26 21:42:05 2004
@@ -1727,7 +1727,9 @@
        if (idx != sc->rl_ldata.rl_tx_considx) {
                sc->rl_ldata.rl_tx_considx = idx;
                ifp->if_flags &= ~IFF_OACTIVE;
-               ifp->if_timer = 0;
+               /* reset the timer only if TX buffer is empty */
+               if (idx == sc->rl_ldata.rl_tx_prodidx)
+                       ifp->if_timer = 0;
        }
 
        /*
@@ -1736,8 +1738,10 @@
         * interrupt that will cause us to re-enter this routine.
         * This is done in case the transmitter has gone idle.
         */
-       if (sc->rl_ldata.rl_tx_free != RL_TX_DESC_CNT)
-                CSR_WRITE_4(sc, RL_TIMERCNT, 1);
+       if (sc->rl_ldata.rl_tx_free != RL_TX_DESC_CNT) {
+               CSR_WRITE_4(sc, RL_TIMERCNT, 1);
+               ifp->if_timer = 5;      
+       }
 
        return;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405262218.24586.hadara>