* via-rhine + link loss + autoneg off == trouble
@ 2005-08-11 10:50 Denis Vlasenko
2005-08-13 18:34 ` Roger Luethi
0 siblings, 1 reply; 2+ messages in thread
From: Denis Vlasenko @ 2005-08-11 10:50 UTC (permalink / raw)
To: rl, David S. Miller, Jeff Garzik; +Cc: linux-net, linux-kernel
I think I finally know what's going on.
Again, the recipe:
* have via-rhine NIC
* unplug network cable
* reboot box
* force HDX (I do in with ethtool -s if autoneg off duplex half)
* plug cable back
* kernel still thinks that carrier is off despite "ethtool if"
saying that link is detected.
Why:
...
if (intr_status & IntrLinkChange)
rhine_check_media(dev, 0);
...
static void rhine_check_media(struct net_device *dev, unsigned int init_media)
{
struct rhine_private *rp = netdev_priv(dev);
void __iomem *ioaddr = rp->base;
mii_check_media(&rp->mii_if, debug, init_media);
...
unsigned int mii_check_media (struct mii_if_info *mii,
unsigned int ok_to_print,
unsigned int init_media)
{
unsigned int old_carrier, new_carrier;
int advertise, lpa, media, duplex;
int lpa2 = 0;
/* if forced media, go no further */
if (mii->force_media) <============================ HERE
return 0; /* duplex did not change */
/* check current and old link status */
old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0;
new_carrier = (unsigned int) mii_link_ok(mii);
/* if carrier state did not change, this is a "bounce",
* just exit as everything is already set correctly
*/
if ((!init_media) && (old_carrier == new_carrier))
return 0; /* duplex did not change */
/* no carrier, nothing much to do */
if (!new_carrier) {
netif_carrier_off(mii->dev);
if (ok_to_print)
printk(KERN_INFO "%s: link down\n", mii->dev->name);
return 0; /* duplex did not change */
}
/*
* we have carrier, see who's on the other end
*/
netif_carrier_on(mii->dev);
...
We can never reach netif_carrier_on if mii->force_media == TRUE!
If I disable that "if(...) return 0;" it works.
Instrumented log:
17:54:20.07751 kern.info: qdisc_restart: start, q->dequeue=c03e86c6 <== noop_dequeue
17:54:21.07736 kern.info: qdisc_restart: start, q->dequeue=c03e86c6
17:54:23.14445 kern.info: rhine_check_media(init_media:0)
17:54:23.14454 kern.info: mii_check_media
17:54:23.14457 kern.info: mii_check_media: mii->force_media == TRUE, bailing DISABLED --vda
17:54:23.14462 kern.info: mii_check_media: old_carrier:0 new_carrier:1
17:54:23.14466 kern.info: mii_check_media: netif_carrier_on
17:54:23.14469 kern.info: if: link up, 10Mbps, half-duplex, lpa 0x0000
17:54:23.14474 kern.info: dev_activate(if);
17:54:23.14477 kern.info: dev_activate(): dev->qdisc = dev->qdisc_sleeping
17:54:24.64489 kern.info: pfifo_fast_enqueue returns 0
17:54:24.64496 kern.info: pfifo_fast_dequeue returns a skb
17:54:24.64499 kern.info: pfifo_fast_dequeue returns NULL
17:54:24.64584 kern.info: pfifo_fast_enqueue returns 0
17:54:24.64588 kern.info: qdisc_restart: start, q->dequeue=c03e87b6 <== pfifo_fast_dequeue
17:54:24.64597 kern.info: pfifo_fast_dequeue returns a skb
17:54:24.64601 kern.info: qdisc_restart: skb!=NULL
--
vda
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: via-rhine + link loss + autoneg off == trouble
2005-08-11 10:50 via-rhine + link loss + autoneg off == trouble Denis Vlasenko
@ 2005-08-13 18:34 ` Roger Luethi
0 siblings, 0 replies; 2+ messages in thread
From: Roger Luethi @ 2005-08-13 18:34 UTC (permalink / raw)
To: Denis Vlasenko, Jeff Garzik; +Cc: David S. Miller, linux-net, linux-kernel
Jeff, can you tune in for a moment?
First of all, many thanks to vda for tracking this down, and to everyone
else who helped with it.
I had a look at my code and at 8139cp (which is one of only a handful
of drivers that have been converted to use the generic MII stuff).
Turns out 8139cp doesn't seem to do anything to address the problem
vda described, either, so it is equally affected. Is this something we
should fix in mii.c, or is mii_check_media working as designed? Btw,
I'd be thrilled if someone wrote a few lines per function in mii.c:
purpose, preconditions, side effects, something along these lines.
Roger
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-08-13 18:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-11 10:50 via-rhine + link loss + autoneg off == trouble Denis Vlasenko
2005-08-13 18:34 ` Roger Luethi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox