All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alice Michael <alice.michael@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [next PATCH S72-V3 13/13] i40e: don't hold RTNL lock for the entire reset
Date: Wed,  7 Jun 2017 05:43:13 -0400	[thread overview]
Message-ID: <20170607094313.32060-13-alice.michael@intel.com> (raw)
In-Reply-To: <20170607094313.32060-1-alice.michael@intel.com>

From: Jacob Keller <jacob.e.keller@intel.com>

We recently refactored i40e_do_reset() and its friends to be able to
hold the RTNL lock only for the portions that actually need to be
protected. However, a separate refactoring added several new callers of
these functions during the PCIe error recovery and suspend/resume
cycles.

When merging the changes together, it was not noticed that we could
reduce the RTNL scope by letting the reset function handle the lock
itself, as previously it was not possible.

Fix this by replacing these call sites to indicate that the reset
function should handle its own lock. This enables multiple PFs to reset
or resume simultaneously without serializing the resets via the RTNL
lock. The end result is that on systems with lots of PFs and VFs the
resets don't stall waiting for each other to finish.

It is probable that we can also do the same for i40e_do_reset_safe, but
this author did not research that change carefully enough to be
confident.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 27 +++++++--------------------
 1 file changed, 7 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 6db448e..67b4e09 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -6565,9 +6565,7 @@ static void i40e_reset_subtask(struct i40e_pf *pf)
 	if (reset_flags &&
 	    !test_bit(__I40E_DOWN, pf->state) &&
 	    !test_bit(__I40E_CONFIG_BUSY, pf->state)) {
-		rtnl_lock();
-		i40e_do_reset(pf, reset_flags, true);
-		rtnl_unlock();
+		i40e_do_reset(pf, reset_flags, false);
 	}
 }
 
@@ -11905,11 +11903,8 @@ static pci_ers_result_t i40e_pci_error_detected(struct pci_dev *pdev,
 	}
 
 	/* shutdown all operations */
-	if (!test_bit(__I40E_SUSPENDED, pf->state)) {
-		rtnl_lock();
-		i40e_prep_for_reset(pf, true);
-		rtnl_unlock();
-	}
+	if (!test_bit(__I40E_SUSPENDED, pf->state))
+		i40e_prep_for_reset(pf, false);
 
 	/* Request a slot reset */
 	return PCI_ERS_RESULT_NEED_RESET;
@@ -11975,9 +11970,7 @@ static void i40e_pci_error_resume(struct pci_dev *pdev)
 	if (test_bit(__I40E_SUSPENDED, pf->state))
 		return;
 
-	rtnl_lock();
-	i40e_handle_reset_warning(pf, true);
-	rtnl_unlock();
+	i40e_handle_reset_warning(pf, false);
 }
 
 /**
@@ -12057,9 +12050,7 @@ static void i40e_shutdown(struct pci_dev *pdev)
 	if (pf->wol_en && (pf->flags & I40E_FLAG_WOL_MC_MAGIC_PKT_WAKE))
 		i40e_enable_mc_magic_wake(pf);
 
-	rtnl_lock();
-	i40e_prep_for_reset(pf, true);
-	rtnl_unlock();
+	i40e_prep_for_reset(pf, false);
 
 	wr32(hw, I40E_PFPM_APM,
 	     (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0));
@@ -12091,9 +12082,7 @@ static int i40e_suspend(struct pci_dev *pdev, pm_message_t state)
 	if (pf->wol_en && (pf->flags & I40E_FLAG_WOL_MC_MAGIC_PKT_WAKE))
 		i40e_enable_mc_magic_wake(pf);
 
-	rtnl_lock();
-	i40e_prep_for_reset(pf, true);
-	rtnl_unlock();
+	i40e_prep_for_reset(pf, false);
 
 	wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0));
 	wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0));
@@ -12139,9 +12128,7 @@ static int i40e_resume(struct pci_dev *pdev)
 	/* handling the reset will rebuild the device state */
 	if (test_and_clear_bit(__I40E_SUSPENDED, pf->state)) {
 		clear_bit(__I40E_DOWN, pf->state);
-		rtnl_lock();
-		i40e_reset_and_rebuild(pf, false, true);
-		rtnl_unlock();
+		i40e_reset_and_rebuild(pf, false, false);
 	}
 
 	return 0;
-- 
2.9.3


  parent reply	other threads:[~2017-06-07  9:43 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-07  9:43 [Intel-wired-lan] [next PATCH S72-V3 01/13] i40evf: assign num_active_queues inside i40evf_alloc_queues Alice Michael
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 02/13] i40e/i40evf: update WOL and I40E_AQC_ADDR_VALID_MASK flags Alice Michael
2017-06-08 18:22   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 03/13] i40e: use dev_dbg instead of dev_info when warning about missing routine Alice Michael
2017-06-08 18:24   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 04/13] i40e: comment that udp_port must be in host byte order Alice Michael
2017-06-08 18:28   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 05/13] i40e: Fix potential out of bound array access Alice Michael
2017-06-08 18:29   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 06/13] i40e: Support firmware CEE DCB UP to TC map re-definition Alice Michael
2017-06-12 16:51   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 07/13] i40e: Add message for unsupported MFP mode Alice Michael
2017-06-08 18:47   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 08/13] i40e: genericize the partition bandwidth control Alice Michael
2017-06-12 18:07   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 09/13] i40e: Add support for OEM firmware version Alice Michael
2017-06-14 14:24   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 10/13] i40e: fix disabling overflow promiscuous mode Alice Michael
2017-06-14 18:38   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 11/13] i40e: clear only cause_ena bit Alice Michael
2017-06-08 18:51   ` Bowers, AndrewX
2017-06-07  9:43 ` [Intel-wired-lan] [next PATCH S72-V3 12/13] i40e: Handle PE_CRITERR properly with IWARP enabled Alice Michael
2017-06-12 18:14   ` Bowers, AndrewX
2017-06-07  9:43 ` Alice Michael [this message]
2017-06-12 18:18   ` [Intel-wired-lan] [next PATCH S72-V3 13/13] i40e: don't hold RTNL lock for the entire reset Bowers, AndrewX
2017-06-08 18:09 ` [Intel-wired-lan] [next PATCH S72-V3 01/13] i40evf: assign num_active_queues inside i40evf_alloc_queues Bowers, AndrewX

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=20170607094313.32060-13-alice.michael@intel.com \
    --to=alice.michael@intel.com \
    --cc=intel-wired-lan@osuosl.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.