diff options
author | Bruce Allan <bruce.w.allan@intel.com> | 2009-11-20 18:24:30 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-21 14:34:01 -0500 |
commit | b16a002e3da0357771433aa58a2521da00aa792a (patch) | |
tree | 96382b6d6cbbfa8d7aa392a3cba0edce6b25be07 /drivers/net/e1000e | |
parent | bb436b20fe0ea4231a233aae7f0f7de3a3f2f5c3 (diff) |
e1000e: Incorrect MII Link beat reporting.
The driver was only updating MII stats when an LSC up was detected and
the interface had not already been reported up to netdev. This meant
MII stats returned in response to an SIOCGMIIREG ioctl would always
show a link up if it had ever been up. This was misleading the networking
daemon guessnet, which uses this ioctl, into making improper network port
selections.
This fix adds a call to e1000_phy_read_status() to actively read the
mii stats before responding to the SIOCGMIIREG ioctl.
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/e1000e')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index e819f1997550..ff9f9f1725e3 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -4320,6 +4320,8 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, | |||
4320 | data->phy_id = adapter->hw.phy.addr; | 4320 | data->phy_id = adapter->hw.phy.addr; |
4321 | break; | 4321 | break; |
4322 | case SIOCGMIIREG: | 4322 | case SIOCGMIIREG: |
4323 | e1000_phy_read_status(adapter); | ||
4324 | |||
4323 | switch (data->reg_num & 0x1F) { | 4325 | switch (data->reg_num & 0x1F) { |
4324 | case MII_BMCR: | 4326 | case MII_BMCR: |
4325 | data->val_out = adapter->phy_regs.bmcr; | 4327 | data->val_out = adapter->phy_regs.bmcr; |