All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Nguyen <anthony.l.nguyen@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH S58 03/13] ice: manage interrupts during poll exit
Date: Wed, 31 Mar 2021 14:16:58 -0700	[thread overview]
Message-ID: <20210331211708.55205-3-anthony.l.nguyen@intel.com> (raw)
In-Reply-To: <20210331211708.55205-1-anthony.l.nguyen@intel.com>

From: Jesse Brandeburg <jesse.brandeburg@intel.com>

The driver would occasionally miss that there were outstanding
descriptors to clean when exiting busy/napi poll. This issue has
been in the code since the introduction of the ice driver.

Attempt to "catch" any remaining work by triggering a software
interrupt when exiting napi poll or busy-poll. This will not
cause extra interrupts in the case of normal execution.

This issue was found when running sfnt-pingpong, with busy
poll enabled, and typically with larger I/O sizes like > 8192,
the program would occasionally report > 1 second maximums
to complete a ping pong.

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  1 +
 drivers/net/ethernet/intel/ice/ice_txrx.c       | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
index a501e2b7e09e..9b8300d4a267 100644
--- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
+++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
@@ -131,6 +131,7 @@
 #define GLINT_DYN_CTL_ITR_INDX_M		ICE_M(0x3, 3)
 #define GLINT_DYN_CTL_INTERVAL_S		5
 #define GLINT_DYN_CTL_INTERVAL_M		ICE_M(0xFFF, 5)
+#define GLINT_DYN_CTL_SW_ITR_INDX_ENA_M		BIT(24)
 #define GLINT_DYN_CTL_SW_ITR_INDX_M		ICE_M(0x3, 25)
 #define GLINT_DYN_CTL_WB_ON_ITR_M		BIT(30)
 #define GLINT_DYN_CTL_INTENA_MSK_M		BIT(31)
diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 035fac5f74dc..ac22457f3bf8 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1302,6 +1302,7 @@ static u32 ice_buildreg_itr(u16 itr_idx, u16 itr)
 static void ice_update_ena_itr(struct ice_q_vector *q_vector)
 {
 	struct ice_vsi *vsi = q_vector->vsi;
+	bool wb_en = q_vector->wb_on_itr;
 	u32 itr_val;
 
 	if (test_bit(ICE_DOWN, vsi->state))
@@ -1310,7 +1311,7 @@ static void ice_update_ena_itr(struct ice_q_vector *q_vector)
 	/* When exiting WB_ON_ITR, let ITR resume its normal
 	 * interrupts-enabled path.
 	 */
-	if (q_vector->wb_on_itr)
+	if (wb_en)
 		q_vector->wb_on_itr = false;
 
 	/* This will do nothing if dynamic updates are not enabled. */
@@ -1318,6 +1319,16 @@ static void ice_update_ena_itr(struct ice_q_vector *q_vector)
 
 	/* net_dim() updates ITR out-of-band using a work item */
 	itr_val = ice_buildreg_itr(ICE_ITR_NONE, 0);
+	/* trigger an immediate software interrupt when exiting
+	 * busy poll, to make sure to catch any pending cleanups
+	 * that might have been missed due to interrupt state
+	 * transition.
+	 */
+	if (wb_en) {
+		itr_val |= GLINT_DYN_CTL_SWINT_TRIG_M |
+			   GLINT_DYN_CTL_SW_ITR_INDX_M |
+			   GLINT_DYN_CTL_SW_ITR_INDX_ENA_M;
+	}
 	wr32(&vsi->back->hw, GLINT_DYN_CTL(q_vector->reg_idx), itr_val);
 }
 
-- 
2.20.1


  parent reply	other threads:[~2021-03-31 21:16 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-31 21:16 [Intel-wired-lan] [PATCH S58 01/13] ice: refactor interrupt moderation writes Tony Nguyen
2021-03-31 21:16 ` [Intel-wired-lan] [PATCH S58 02/13] ice: replace custom AIM algorithm with kernel's DIM library Tony Nguyen
2021-04-14 23:19   ` Brelinski, TonyX
2021-03-31 21:16 ` Tony Nguyen [this message]
2021-04-12 17:27   ` [Intel-wired-lan] [PATCH S58 03/13] ice: manage interrupts during poll exit Brelinski, TonyX
2021-03-31 21:16 ` [Intel-wired-lan] [PATCH S58 04/13] ice: refactor ITR data structures Tony Nguyen
2021-04-12 17:18   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 05/13] ice: Reimplement module reads used by ethtool Tony Nguyen
2021-04-08 21:31   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 06/13] ice: print name in /proc/iomem Tony Nguyen
2021-04-08 21:35   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 07/13] ice: use local for consistency Tony Nguyen
2021-04-08 21:38   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 08/13] ice: remove unused struct member Tony Nguyen
2021-04-08 21:41   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 09/13] ice: Set vsi->vf_id as ICE_INVAL_VFID for non VF VSI types Tony Nguyen
2021-04-08 22:24   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 10/13] ice: suppress false cppcheck issues Tony Nguyen
2021-04-08 22:26   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 11/13] ice: fix clang warning regarding deadcode.DeadStores Tony Nguyen
2021-04-08 22:30   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 12/13] ice: remove return variable Tony Nguyen
2021-04-08 22:33   ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 13/13] ice: reduce scope of variable Tony Nguyen
2021-04-08 22:37   ` Brelinski, TonyX
2021-04-08 19:54 ` [Intel-wired-lan] [PATCH S58 01/13] ice: refactor interrupt moderation writes Brelinski, TonyX

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=20210331211708.55205-3-anthony.l.nguyen@intel.com \
    --to=anthony.l.nguyen@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.