lkml.org 
[lkml]   [2011]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectFlow-control representation in ethtool (mii.c fix?)
From
Date
Hello, All.

I was dealing with flow-control on my ethernet card:
eth0: RTL8168d/8111d
# uname -r
2.6.35-28-generic-pae (Ubuntu 10.10 current kernel)

And found following problem:

~# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: No
...
Link partner advertised pause frame use: No

As you can see no pause frame is advertised. But mii-tool shows
different result:
~# mii-tool eth0
eth0: negotiated 100baseTx-FD flow-control, link ok

And the same shows remote embedded device whith which I work.

Inspection of kernel sources shows that GSET ethtool command leads
r8169.c to call mii_ethtool_gset(). And looking there I found that this
function simply ignore Pause-related settings. Searching kernel sources
shows that a lot of ethernet drivers use this function
(grep -R mii_ethtool_gset drivers/net/*)

In latest kernel (2.6.38.4) I also see that this thing doesn't fixed. So
I'd like to know is there some background behind this current design or
not. If not I suggest simple patch attached to this mail. I've test it
on kernel 2.6.38.4 and it works for me:

Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
....

--
Artem Polyakov.
diff -Naur linux-2.6.38.4_old/drivers/net/mii.c linux-2.6.38.4_new/drivers/net/mii.c
--- linux-2.6.38.4_old/drivers/net/mii.c 2011-04-22 04:34:46.000000000 +0700
+++ linux-2.6.38.4_new/drivers/net/mii.c 2011-04-25 22:55:40.342981965 +0700
@@ -49,6 +49,10 @@
result |= ADVERTISED_100baseT_Half;
if (advert & ADVERTISE_100FULL)
result |= ADVERTISED_100baseT_Full;
+ if (advert & ADVERTISE_PAUSE_CAP)
+ result |= ADVERTISED_Pause;
+ if (advert & ADVERTISE_PAUSE_ASYM)
+ result |= ADVERTISED_Asym_Pause;

return result;
}
\
 
 \ /
  Last update: 2011-04-26 18:03    [W:0.032 / U:0.796 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site