> Thanks for the patch, your problem is interesting, although why reseting 
> the phy has anything to do with mtu > 1500 not working I don't know.
>
> Also, what adapter (lspci -n) what are steps to reproduce, etc.

lspci -n
0000:0f:07.0 Class 0200: 8086:1076 (rev 05)
0000:10:08.0 Class 0200: 8086:1076 (rev 05)

To reproduce, boot the system with ifcfg-eth0 containing a line MTU='8232'
or any value bigger than 1500.  Alternatively, boot the system with a
standard MTU and then change with 'ifconfig eth0 mtu 8232'.  Once you do
this, the link light won't go on and nothing can ping across the link.  I'm
testing using a crossover cable if that makes any difference.  Once the
failure occurs, I must do an '/etc/rc.d/network restart' several times to
get the connection to work.

I found the issue by tracking code changes between linux kernel 2.6.7 and
2.6.11.  I narrowed down the changes to the e1000_main.c file and noticed
that the PHY was being powered on/off at times.  This is done in the
e1000_up and e1000_down routines.  I'm assuming that when I run ifconfig to
change the MTU that the adapter down/up routines are called.

In addition, subsequent testing has shown that the patch I sent doesn't work
100% of the time.  So I commented out the code block that does a power
down/up of the PHY and now it works 100% of the time.

> If you could, please try the latest driver off of sourceforge at 
> http://sf.net/projects/e1000, which will get us working off 
> of the same source base.

I'm going to try the latest driver you mentioned and let you know what
happens.

> when you do patches, please do then with diff -up, and specifiy the driver

> version you're patching, because I can't tell where in your driver you 
> made this change.

The driver version I patched was from the 2.6.11 kernel and is labelled
"5.6.10.1-k2-NAPI".  Here is the diff output that works for me right now.

@@ -283,6 +283,7 @@ e1000_up(struct e1000_adapter *adapter)
 
        /* hardware has been reset, we need to reload some things */
 
+#if 0
        /* Reset the PHY if it was previously powered down */
        if(adapter->hw.media_type == e1000_media_type_copper) {
                uint16_t mii_reg;
@@ -290,6 +291,7 @@ e1000_up(struct e1000_adapter *adapter)
                if(mii_reg & MII_CR_POWER_DOWN)
                        e1000_phy_reset(&adapter->hw);
        }
+#endif
 
        e1000_set_multi(netdev);
 
@@ -330,6 +332,7 @@ e1000_down(struct e1000_adapter *adapter
        e1000_clean_tx_ring(adapter);
        e1000_clean_rx_ring(adapter);
 
+#if 0
        /* If WoL is not enabled
         * Power down the PHY so no link is implied when interface is down
*/
        if(!adapter->wol && adapter->hw.media_type ==
e1000_media_type_copper) {
@@ -338,6 +341,7 @@ e1000_down(struct e1000_adapter *adapter
                mii_reg |= MII_CR_POWER_DOWN;
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, mii_reg);
        }
+#endif
 }
 
 void



Thanks for your help.
Russ


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to