The boot time failure in tulip

From: Pete Zaitcev <zaitcev@redhat.com>
Date: 2004-11-01 16:27:57

I have finally figured how the failure develops. I poked Jeff about it before,
but nothing could be done because it looked impossible to reproduce without
reboots. Just asking for negotiation with mii-tool would always yield a
working link. Also, this only happens with a dumb hub (tried several), but
works dandy when talking to a switch.

So, here's the deal. The Fedora startup has a segment which works like this:

           ip link set dev $1 up >/dev/null 2>&1
           timeout=0
           while [ $timeout -le 10 ]; do
                check_mii_tool $1
                m=$?
                check_ethtool $1
                e=$?
                if [ $m -eq 1 ] || [ $e -eq 1 ] ; then
                    return 1
                fi
                if [ $m -eq 2 ] && [ $e -eq 2 ] ; then
                    return 1
                fi
                usleep 500000
                timeout=$((timeout+1))
           done

It appears that the negotiation will not happen after "ip link set ... up"
if we keep beating the interface with mii-tool (despite the 0.5s delay).
Weird, huh?

It's enough to fix things if a 3s delay is inserted after the ip ... up.

I think the bug here is that polling with mii-tool disrupts the
autonegotiation. It is ok to return failure after a reset, but
eventually this has to resolve itself despite the polling.

I suspect that 3c59x has the same failure as well. But I haven't played
with it much.

-- Pete
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help