diff options
-rw-r--r-- | drivers/net/e1000e/ethtool.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index 3d73f2070b94..67e06fd9fc45 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c | |||
@@ -190,6 +190,17 @@ static int e1000_get_settings(struct net_device *netdev, | |||
190 | static u32 e1000_get_link(struct net_device *netdev) | 190 | static u32 e1000_get_link(struct net_device *netdev) |
191 | { | 191 | { |
192 | struct e1000_adapter *adapter = netdev_priv(netdev); | 192 | struct e1000_adapter *adapter = netdev_priv(netdev); |
193 | struct e1000_mac_info *mac = &adapter->hw.mac; | ||
194 | |||
195 | /* | ||
196 | * If the link is not reported up to netdev, interrupts are disabled, | ||
197 | * and so the physical link state may have changed since we last | ||
198 | * looked. Set get_link_status to make sure that the true link | ||
199 | * state is interrogated, rather than pulling a cached and possibly | ||
200 | * stale link state from the driver. | ||
201 | */ | ||
202 | if (!netif_carrier_ok(netdev)) | ||
203 | mac->get_link_status = 1; | ||
193 | 204 | ||
194 | return e1000_has_link(adapter); | 205 | return e1000_has_link(adapter); |
195 | } | 206 | } |