summaryrefslogtreecommitdiff
path: root/drivers/net/igbvf/netdev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-12-12 11:39:09 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2009-12-12 11:39:09 -0800
commit5de76b18d1a7193c49c1a4ee72261421a17de57c (patch)
treecd349813d06b8da020aaec0dcc33d499dd80fad5 /drivers/net/igbvf/netdev.c
parent8d0e7fb9d1581c4543ea917c2ea1a50db607a344 (diff)
parente1187b3be72be59625e445b186007e6eae27fef1 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: be2net: fix error in rx completion processing. igbvf: avoid reset storms due to mailbox issues igb: fix handling of mailbox collisions between PF/VF usb: remove rare pm primitive for conversion to new API
Diffstat (limited to 'drivers/net/igbvf/netdev.c')
-rw-r--r--drivers/net/igbvf/netdev.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c
index a127620dc653..e9dd95f136aa 100644
--- a/drivers/net/igbvf/netdev.c
+++ b/drivers/net/igbvf/netdev.c
@@ -1469,6 +1469,8 @@ static void igbvf_reset(struct igbvf_adapter *adapter)
memcpy(netdev->perm_addr, adapter->hw.mac.addr,
netdev->addr_len);
}
+
+ adapter->last_reset = jiffies;
}
int igbvf_up(struct igbvf_adapter *adapter)
@@ -1812,11 +1814,15 @@ static bool igbvf_has_link(struct igbvf_adapter *adapter)
s32 ret_val = E1000_SUCCESS;
bool link_active;
+ /* If interface is down, stay link down */
+ if (test_bit(__IGBVF_DOWN, &adapter->state))
+ return false;
+
ret_val = hw->mac.ops.check_for_link(hw);
link_active = !hw->mac.get_link_status;
/* if check for link returns error we will need to reset */
- if (ret_val)
+ if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ)))
schedule_work(&adapter->reset_task);
return link_active;