All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Vlasenko <vda@ilport.com.ua>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] 2.6.15: via-rhine + link loss + autoneg off == trouble
Date: Sat, 7 Jan 2006 18:20:15 +0200	[thread overview]
Message-ID: <200601071820.16092.vda@ilport.com.ua> (raw)

[-- Attachment #1: Type: text/plain, Size: 2490 bytes --]

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

[-- Attachment #2: linux-2.6.15.fix_no_tx_syndrome.diff --]
[-- Type: text/x-diff, Size: 465 bytes --]

--- 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;

             reply	other threads:[~2006-01-07 16:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-07 16:20 Denis Vlasenko [this message]
2006-01-07 18:47 ` [PATCH] 2.6.15: via-rhine + link loss + autoneg off == trouble Lee Revell
2006-01-07 21:04   ` Roger Luethi
2006-01-08 17:57     ` Denis Vlasenko
2006-01-08 18:03       ` Roger Luethi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200601071820.16092.vda@ilport.com.ua \
    --to=vda@ilport.com.ua \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.