[PATCH] 2.6.15: via-rhine + link loss + autoneg off == trouble



Hi,

2.6.15 still exhibits the via rhine "no tx" syndrome.

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 is true!

> On Friday 11 November 2005 13:32, Jeff Garzik wrote:
> > As I've explained many times at this point, force_media means that link
> > is always on, and mii_link_ok() should not be called.
>
> Sorry, seems like I missed your mails...
>
> > The only bug, it seems, is that the "if (mii->force_media)" branch
> > should make sure to call netif_carrier_on()
>
> Should also work.

Please find patch attached.
--
vda
--- linux-2.6.15.org/drivers/net/mii.c	Fri Dec 30 14:17:47 2005+++ linux-2.6.15/drivers/net/mii.c	Sat Jan  7 18:15:27 2006
@@ -267,8 +267,10 @@ unsigned int mii_check_media (struct mii
 	int lpa2 = 0;
 
 	/* if forced media, go no further */
-	if (mii->force_media)
+	if (mii->force_media) {
+		netif_carrier_on(mii->dev);
 		return 0; /* duplex did not change */
+	}
 
 	/* check current and old link status */
 	old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0;


Relevant Pages

  • knoppix may ping everything but cant load a page
    ... net works well only when duplex is set to half. ... using either mii-tool and ethtool. ... Mii-tool says there are no active mii ... ethtool can't get full information from eth0 (only some ...
    (comp.os.linux.networking)
  • RE: RTL8139 Full Duplex with a non-modular kernel
    ... kryten:~# ethtool -s eth0 speed 100 duplex full autoneg off ... eth0: ... about the duplex setting) but I'm curious about the duplex setup. ... RTL8139 Full Duplex with a non-modular kernel ...
    (Debian-User)
  • Re: On-board ethernet - VT6102 Rhine-II - and slow connection
    ... [duplex half|full] ... After some playing with ethtool I found out that the display from ... Advertised link modes: 10baseT/Half 10baseT/Full ... Advertised auto-negotiation: Yes ...
    (Fedora)
  • RE: RTL8139 Full Duplex with a non-modular kernel
    ... with ethtool - ... eth0: ... the switch shows the link at 100MB (is only a cheapo switch, ... about the duplex setting) but I'm curious about the duplex setup. ...
    (Fedora)
  • Re: Keeping card in 100Mbit fuul duplex
    ... > If i remove the networkcable or reboot my card always goes into 100Mbit ... > fix the cable problem? ... Is there no way to put in Full duplex for all ... The system reads this file on system startup so you shouldn't have any more ...
    (Fedora)