From ce23bb4afb655034489a20ba5fa844f4ea6adc05 Mon Sep 17 00:00:00 2001 From: Alexander Duyck Date: Fri, 11 Dec 2009 22:58:14 -0800 Subject: [PATCH] --- yaml --- r: 175607 b: refs/heads/master c: 7227909340477c1e5225bb2df76cdcc95b5e1da1 h: refs/heads/master i: 175605: 94f1709bdf3458dc4e18ed44804895764479d396 175603: 7e4530386baa7e48808451d3b811f8ef7cd8b0cc 175599: f9cfe1bf220a5d1fc2a9df23d0d59e4316d66a5d v: v3 --- [refs] | 2 +- trunk/drivers/net/igbvf/igbvf.h | 1 + trunk/drivers/net/igbvf/netdev.c | 8 +++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index b51bb061119d..1ae7a2a84484 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fef45f4ce221fc110f70716a00f40be697c5b254 +refs/heads/master: 7227909340477c1e5225bb2df76cdcc95b5e1da1 diff --git a/trunk/drivers/net/igbvf/igbvf.h b/trunk/drivers/net/igbvf/igbvf.h index 3d1ee7a8478e..a1774b29d222 100644 --- a/trunk/drivers/net/igbvf/igbvf.h +++ b/trunk/drivers/net/igbvf/igbvf.h @@ -276,6 +276,7 @@ struct igbvf_adapter { unsigned long led_status; unsigned int flags; + unsigned long last_reset; }; struct igbvf_info { diff --git a/trunk/drivers/net/igbvf/netdev.c b/trunk/drivers/net/igbvf/netdev.c index a127620dc653..e9dd95f136aa 100644 --- a/trunk/drivers/net/igbvf/netdev.c +++ b/trunk/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;