diff options
author | Don Skidmore <donald.c.skidmore@intel.com> | 2010-06-11 09:20:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-13 21:20:52 -0400 |
commit | d08935c274b7e552e47633cf0cbd74b6e953d228 (patch) | |
tree | 531cbcadc890a3b13fb3a829431fd4b72618b48c /drivers/net/ixgbe/ixgbe_main.c | |
parent | e8d15e6460cb0eea00f2574a80d94496943403ba (diff) |
ixgbe: fix for race with 8259(8|9) during shutdown
There is a small window where the watchdog could be running as the
interface is brought down on a NIC with two ports wired back to back.
If ixgbe_update_status is then called can lead to a panic. This patch
allows the update to bail if we are in that condition.
This issue was orignally reported and fix proposed by Akihiko Saitou.
CC: Akihiko Saitou <asaitou@users.sourceforge.net>
Signed-off-by: Don Skidmore <donald.c.skidmore@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_main.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index b2af2f67f604..ce30c62a97f7 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -5282,6 +5282,10 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter) | |||
5282 | u32 i, missed_rx = 0, mpc, bprc, lxon, lxoff, xon_off_tot; | 5282 | u32 i, missed_rx = 0, mpc, bprc, lxon, lxoff, xon_off_tot; |
5283 | u64 non_eop_descs = 0, restart_queue = 0; | 5283 | u64 non_eop_descs = 0, restart_queue = 0; |
5284 | 5284 | ||
5285 | if (test_bit(__IXGBE_DOWN, &adapter->state) || | ||
5286 | test_bit(__IXGBE_RESETTING, &adapter->state)) | ||
5287 | return; | ||
5288 | |||
5285 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { | 5289 | if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { |
5286 | u64 rsc_count = 0; | 5290 | u64 rsc_count = 0; |
5287 | u64 rsc_flush = 0; | 5291 | u64 rsc_flush = 0; |