aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe.h
diff options
context:
space:
mode:
authorJohn Fastabend <john.r.fastabend@intel.com>2010-02-03 09:23:32 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-03 22:39:56 -0500
commit10eec95569513206877769ad9336591c08015cfe (patch)
treec372678363eb4d192a138fa11d2abf08a10b1897 /drivers/net/ixgbe/ixgbe.h
parent9c119ba54c0fcae72881948af3d37b47a2f8e1f9 (diff)
ixgbe: only process one ixgbe_watchdog_task at a time.
Processing multiple ixgbe_watchdog_task calls may cause the link_up variable and IXGBE_FLAG_NEED_LINK_UPDATE flag to be set incorrectly. In the worse case this is causing the netif_carrier_off to be called inappropriately which results in an interface that can't be brought up. Although schedule_work() will only schedule the task if it is not already on the work queue the WORK_STRUCT_PENDING bits are cleared just before calling the work function. This allows WORK_STRUCT_PENDING to be cleared, the work function to start and meanwhile schedule another task. This patch adds a mutex to the watchdog task. This bug is actualized by changing DCB settings or doing extended cable pull or reset tests. Signed-off-by: John Fastabend <john.r.fastabend@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/ixgbe/ixgbe.h')
-rw-r--r--drivers/net/ixgbe/ixgbe.h17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h
index e576fb4740bc..55a319e3a57a 100644
--- a/drivers/net/ixgbe/ixgbe.h
+++ b/drivers/net/ixgbe/ixgbe.h
@@ -341,15 +341,14 @@ struct ixgbe_adapter {
341#define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19) 341#define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19)
342#define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20) 342#define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20)
343#define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22) 343#define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22)
344#define IXGBE_FLAG_IN_WATCHDOG_TASK (u32)(1 << 23) 344#define IXGBE_FLAG_IN_SFP_LINK_TASK (u32)(1 << 23)
345#define IXGBE_FLAG_IN_SFP_LINK_TASK (u32)(1 << 24) 345#define IXGBE_FLAG_IN_SFP_MOD_TASK (u32)(1 << 24)
346#define IXGBE_FLAG_IN_SFP_MOD_TASK (u32)(1 << 25) 346#define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 25)
347#define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 26) 347#define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 26)
348#define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 27) 348#define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 27)
349#define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 28) 349#define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 28)
350#define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 29) 350#define IXGBE_FLAG_SRIOV_CAPABLE (u32)(1 << 29)
351#define IXGBE_FLAG_SRIOV_CAPABLE (u32)(1 << 30) 351#define IXGBE_FLAG_SRIOV_ENABLED (u32)(1 << 30)
352#define IXGBE_FLAG_SRIOV_ENABLED (u32)(1 << 31)
353 352
354 u32 flags2; 353 u32 flags2;
355#define IXGBE_FLAG2_RSC_CAPABLE (u32)(1) 354#define IXGBE_FLAG2_RSC_CAPABLE (u32)(1)