From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: John Fastabend <john.r.fastabend@intel.com>,
netdev@vger.kernel.org, gospo@redhat.com, bphilips@novell.com,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Subject: [net-next-2.6 06/16] ixgbe: DCB, only reprogram HW if the FCoE priority is changed
Date: Tue, 8 Feb 2011 04:29:17 -0800 [thread overview]
Message-ID: <1297168167-15755-7-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1297168167-15755-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: John Fastabend <john.r.fastabend@intel.com>
If the FCoE priority is not changing do not set the RESET and
APP_UPCHG bits. This causes unneeded HW resets and which can
cause unneeded LLDP frames and negotiations.
The current check is not sufficient because the FCoE priority
can change twice during a negotiation which results in the
bits being set. This occurs when the switch changes the
priority or when the link is reset with switches that do not
include the APP priority until after PFC has been negotiated.
This results in set_app being called with the local APP
priority. Then the negotiation completes and set_app
is called again with the peer APP priority. The check
fails so the device is reset and the above occurs again
resulting in an endless loop of resets.
By only resetting the device if the APP priority has really
changed we short circuit the loop.
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ixgbe/ixgbe_dcb_nl.c | 38 ++++++++++++++++++++++++++------------
1 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ixgbe/ixgbe_dcb_nl.c
index bf566e8..4805835 100644
--- a/drivers/net/ixgbe/ixgbe_dcb_nl.c
+++ b/drivers/net/ixgbe/ixgbe_dcb_nl.c
@@ -353,6 +353,7 @@ static void ixgbe_dcbnl_get_pfc_cfg(struct net_device *netdev, int priority,
static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
{
struct ixgbe_adapter *adapter = netdev_priv(netdev);
+ bool do_reset;
int ret;
if (!adapter->dcb_set_bitmap)
@@ -368,7 +369,9 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
* Only take down the adapter if the configuration change
* requires a reset.
*/
- if (adapter->dcb_set_bitmap & BIT_RESETLINK) {
+ do_reset = adapter->dcb_set_bitmap & (BIT_RESETLINK | BIT_APP_UPCHG);
+
+ if (do_reset) {
while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state))
msleep(1);
@@ -408,7 +411,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
}
}
- if (adapter->dcb_set_bitmap & BIT_RESETLINK) {
+ if (do_reset) {
if (adapter->dcb_set_bitmap & BIT_APP_UPCHG) {
ixgbe_init_interrupt_scheme(adapter);
if (netif_running(netdev))
@@ -430,7 +433,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
if (adapter->dcb_cfg.pfc_mode_enable)
adapter->hw.fc.current_mode = ixgbe_fc_pfc;
- if (adapter->dcb_set_bitmap & BIT_RESETLINK)
+ if (do_reset)
clear_bit(__IXGBE_RESETTING, &adapter->state);
adapter->dcb_set_bitmap = 0x00;
return ret;
@@ -568,18 +571,29 @@ static u8 ixgbe_dcbnl_setapp(struct net_device *netdev,
case DCB_APP_IDTYPE_ETHTYPE:
#ifdef IXGBE_FCOE
if (id == ETH_P_FCOE) {
- u8 tc;
- struct ixgbe_adapter *adapter;
+ u8 old_tc;
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
- adapter = netdev_priv(netdev);
- tc = adapter->fcoe.tc;
+ /* Get current programmed tc */
+ old_tc = adapter->fcoe.tc;
rval = ixgbe_fcoe_setapp(adapter, up);
- if ((!rval) && (tc != adapter->fcoe.tc) &&
- (adapter->flags & IXGBE_FLAG_DCB_ENABLED) &&
- (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)) {
+
+ if (rval ||
+ !(adapter->flags & IXGBE_FLAG_DCB_ENABLED) ||
+ !(adapter->flags & IXGBE_FLAG_FCOE_ENABLED))
+ break;
+
+ /* The FCoE application priority may be changed multiple
+ * times in quick sucession with switches that build up
+ * TLVs. To avoid creating uneeded device resets this
+ * checks the actual HW configuration and clears
+ * BIT_APP_UPCHG if a HW configuration change is not
+ * need
+ */
+ if (old_tc == adapter->fcoe.tc)
+ adapter->dcb_set_bitmap &= ~BIT_APP_UPCHG;
+ else
adapter->dcb_set_bitmap |= BIT_APP_UPCHG;
- adapter->dcb_set_bitmap |= BIT_RESETLINK;
- }
}
#endif
break;
--
1.7.4
next prev parent reply other threads:[~2011-02-08 12:29 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-08 12:29 [net-next-2.6 00/16][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 01/16] e1000e: replace unbounded sprintf with snprintf Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 02/16] e1000e: use correct pointer when memcpy'ing a 2-dimensional array Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 03/16] e1000e: do not wakeup Tx queue until ready Jeff Kirsher
2011-02-08 20:21 ` David Miller
2011-02-08 20:52 ` Allan, Bruce W
2011-02-08 12:29 ` [net-next-2.6 04/16] e1000e: return appropriate errors for 'ethtool -r' Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 05/16] igb: Enable PF side of SR-IOV support for i350 devices Jeff Kirsher
2011-02-08 12:29 ` Jeff Kirsher [this message]
2011-02-08 12:29 ` [net-next-2.6 07/16] ixgbe: DCB, remove round robin mode on 82598 devices Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 08/16] ixgbe: DCB, abstract out dcb_config from DCB hardware configuration Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 09/16] ixgbe: DCB, implement 802.1Qaz routines Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 10/16] ixgbe: DCB, do not reset on CEE pg changes Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 11/16] ixgbe: DCB, remove RESET bit it is no longer needed Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 12/16] ixgbe: dcb, use hardware independent routines Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 13/16] ixgbe: fix namespace issue with ixgbe_dcb_txq_to_tc Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 14/16] ixgbe: cleanup namespace complaint by removing little used function Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 15/16] ixgbe: cleanup ixgbe_init_mbx_params_pf namespace issue Jeff Kirsher
2011-02-08 12:29 ` [net-next-2.6 16/16] ixgbe: Adding 100MB FULL support in ethtool Jeff Kirsher
2011-02-11 15:55 ` [net-next-2.6 00/16][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
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=1297168167-15755-7-git-send-email-jeffrey.t.kirsher@intel.com \
--to=jeffrey.t.kirsher@intel.com \
--cc=bphilips@novell.com \
--cc=davem@davemloft.net \
--cc=gospo@redhat.com \
--cc=john.r.fastabend@intel.com \
--cc=netdev@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).