From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: Alan Brady <alan.brady@intel.com>,
netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next 14/14] i40e: prevent overlapping tx_timeout recover
Date: Wed, 14 Nov 2018 15:10:32 -0800 [thread overview]
Message-ID: <20181114231032.4013-15-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <20181114231032.4013-1-jeffrey.t.kirsher@intel.com>
From: Alan Brady <alan.brady@intel.com>
If a TX hang occurs, we attempt to recover by incrementally resetting.
If we're starved for CPU time, it's possible the reset doesn't actually
complete (or even fire) before another tx_timeout fires causing us to
fly through the different resets without actually doing them.
This adds a bit to set and check if a timeout recovery is already
pending and, if so, bail out of tx_timeout. The bit will get cleared at
the end of i40e_rebuild when reset is complete.
Signed-off-by: Alan Brady <alan.brady@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/i40e/i40e.h | 1 +
drivers/net/ethernet/intel/i40e/i40e_main.c | 5 +++++
2 files changed, 6 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index cda37d7ae5d6..8de9085bba9e 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -122,6 +122,7 @@ enum i40e_state_t {
__I40E_MDD_EVENT_PENDING,
__I40E_VFLR_EVENT_PENDING,
__I40E_RESET_RECOVERY_PENDING,
+ __I40E_TIMEOUT_RECOVERY_PENDING,
__I40E_MISC_IRQ_REQUESTED,
__I40E_RESET_INTR_RECEIVED,
__I40E_REINIT_REQUESTED,
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index d4461eec26bd..47f0fdadbac9 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -338,6 +338,10 @@ static void i40e_tx_timeout(struct net_device *netdev)
(pf->tx_timeout_last_recovery + netdev->watchdog_timeo)))
return; /* don't do any new action before the next timeout */
+ /* don't kick off another recovery if one is already pending */
+ if (test_and_set_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state))
+ return;
+
if (tx_ring) {
head = i40e_get_head(tx_ring);
/* Read interrupt register */
@@ -9631,6 +9635,7 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
clear_bit(__I40E_RESET_FAILED, pf->state);
clear_recovery:
clear_bit(__I40E_RESET_RECOVERY_PENDING, pf->state);
+ clear_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state);
}
/**
--
2.19.1
next prev parent reply other threads:[~2018-11-15 9:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-14 23:10 [net-next 00/14][pull request] 40GbE Intel Wired LAN Driver Updates 2018-11-14 Jeff Kirsher
2018-11-14 23:10 ` [net-next 01/14] i40e: Replace spin_is_locked() with lockdep Jeff Kirsher
2018-11-14 23:10 ` [net-next 02/14] i40e: Use a local variable for readability Jeff Kirsher
2018-11-14 23:10 ` [net-next 03/14] i40e: Add capability flag for stopping FW LLDP Jeff Kirsher
2018-11-14 23:10 ` [net-next 04/14] i40e: Replace strncpy with strlcpy to ensure null termination Jeff Kirsher
2018-11-14 23:10 ` [net-next 05/14] i40e: Protect access to VF control methods Jeff Kirsher
2018-11-14 23:10 ` [net-next 06/14] i40e: update driver version Jeff Kirsher
2018-11-14 23:10 ` [net-next 07/14] i40e: Allow disabling FW LLDP on X722 devices Jeff Kirsher
2018-11-14 23:10 ` [net-next 08/14] i40e: don't restart nway if autoneg not supported Jeff Kirsher
2018-11-14 23:10 ` [net-next 09/14] i40e: always set ks->base.speed in i40e_get_settings_link_up Jeff Kirsher
2018-11-14 23:10 ` [net-next 10/14] virtchnl: white space and reorder Jeff Kirsher
2018-11-14 23:10 ` [net-next 11/14] virtchnl: Fix off by one error Jeff Kirsher
2018-11-14 23:10 ` [net-next 12/14] i40e: Use correct shift for VLAN priority Jeff Kirsher
2018-11-14 23:10 ` [net-next 13/14] i40e: suppress bogus error message Jeff Kirsher
2018-11-14 23:10 ` Jeff Kirsher [this message]
2018-11-15 23:06 ` [net-next 00/14][pull request] 40GbE Intel Wired LAN Driver Updates 2018-11-14 David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181114231032.4013-15-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=alan.brady@intel.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=nhorman@redhat.com \
--cc=sassmann@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox