NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/18414: tlp driver can "collect" ~10 packets in 1.6 before sending them



The following reply was made to PR kern/18414; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: kern/18414: tlp driver can "collect" ~10 packets in 1.6 before 
sending them
Date: Mon, 10 Mar 2008 08:14:35 +0000

 Oh, no.
 
 I had this problem years ago, tracked it down, wrote up what was going
 on... and then forgot about it, so it never got fixed. Later on when I
 found the writeup again, I searched the PR database without finding
 anything, concluded nobody else had the same kind of weirdly mangled
 tulip I did (which isn't entirely implausible) and let it slide.
 Several times, actually. I just found it this time completely by
 accident.
 
 Ironically, the writeup is dated the same day as this PR. Here goes:
 
    I built a current kernel again for my home box last night, and the
    tulip driver still doesn't go.
 
    It produces the curious symptom that, if ping is running, once
    every ten seconds a burst of packets gets through.
 
    The card is an 82C115 pass 2.5, and, as far as I can tell, probes
    and attaches correctly.
 
    What seems to be happening is that the link autonegotiation never
    completes. In tlp_2114x_nway_status (around line 5250 of tulip.c,
    version 1.119), it checks to see if autonegotiation is enabled, and
    if so, does this:
 
                if ((siastat & SIASTAT_ANS) != SIASTAT_ANS_FLPGOOD) {
                        /* Erg, still trying, I guess... */
                        mii->mii_media_active |= IFM_NONE;
                        return;
                }
 
    My card seems to always remain "still trying" forever. This means that
    it never gets to the code that raises IFM_ACTIVE in mii_media_status,
    which correspondingly means that TULIPF_LINK_UP never gets raised
    either, which causes tlp_start to abort near the top.
 
    (It sends occasionally anyway, because the test that causes tlp_start
    to abort only operates if the send queue is less than ten packets
    long. The driver then transmits even though it thinks it doesn't have
    link, which may or may not be a problem in its own right.)
 
    Turning off the autonegotiation bit (SIATXRX_ANE) during card
    initialization doesn't appear to work, or maybe I did it wrong, but
    bypassing the entire autonegotiation branch of code in
    tlp_2114x_nway_status seems to make everything run more or less ok.
 
    This is presumably not the correct solution, but hopefully someone who
    actually knows the hardware can take over from this point. (I'd be
    happy to run further experiments.)
 
 
 I do still have (and use) the card and can post the hack I've been
 carrying for the last five years if anyone wants it.
 
 -- 
 David A. Holland
 dholland%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index