All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2
@ 2018-10-26 17:40 Anirudh Venkataramanan
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild Anirudh Venkataramanan
                   ` (15 more replies)
  0 siblings, 16 replies; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

Akeem G Abodunrin (1):
  ice: Fix dead device link issue with flow control

Anirudh Venkataramanan (6):
  ice: Set carrier state and start/stop queues in rebuild
  ice: Check for reset in progress during remove
  ice: Remove duplicate addition of VLANs in replay path
  ice: Fix typo in error message
  ice: Remove node before releasing VSI
  ice: Calculate guaranteed VSIs per function and use it

Brett Creeley (3):
  ice: Fix tx_timeout in PF driver
  ice: Fix the bytecount sent to netdev_tx_sent_queue
  ice: Fix debug print in ice_tx_timeout

Dave Ertman (2):
  ice: Fix napi delete calls for remove
  ice: Avoid nested RTNL locking in ice_dis_vsi

Lev Faerman (1):
  ice: Fix NVM mask defines

Md Fahad Iqbal Polash (1):
  ice: Fix flags for port VLAN

Tony Nguyen (1):
  ice: Check for q_vector when stopping rings

Victor Raj (1):
  ice: Free VSI contexts during for unload

 drivers/net/ethernet/intel/ice/ice.h             |   5 +-
 drivers/net/ethernet/intel/ice/ice_adminq_cmd.h  |   7 +-
 drivers/net/ethernet/intel/ice/ice_common.c      |  34 ++++++-
 drivers/net/ethernet/intel/ice/ice_ethtool.c     |   7 +-
 drivers/net/ethernet/intel/ice/ice_hw_autogen.h  |   5 +
 drivers/net/ethernet/intel/ice/ice_lib.c         |   7 +-
 drivers/net/ethernet/intel/ice/ice_main.c        | 119 +++++++++++++----------
 drivers/net/ethernet/intel/ice/ice_sched.c       | 108 +++++++++++++++++++-
 drivers/net/ethernet/intel/ice/ice_sched.h       |   2 +
 drivers/net/ethernet/intel/ice/ice_switch.c      |  12 +++
 drivers/net/ethernet/intel/ice/ice_switch.h      |   2 +
 drivers/net/ethernet/intel/ice/ice_txrx.c        |  11 ++-
 drivers/net/ethernet/intel/ice/ice_txrx.h        |  17 +++-
 drivers/net/ethernet/intel/ice/ice_type.h        |   4 +-
 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |   4 +-
 15 files changed, 271 insertions(+), 73 deletions(-)

-- 
2.14.3


^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:54   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove Anirudh Venkataramanan
                   ` (14 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

Set the carrier state post rebuild by querying the link status. Also
start/stop queues based on link status.

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 05993451147a..6d31ffb64940 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -3296,7 +3296,7 @@ static void ice_rebuild(struct ice_pf *pf)
 	struct device *dev = &pf->pdev->dev;
 	struct ice_hw *hw = &pf->hw;
 	enum ice_status ret;
-	int err;
+	int err, i;
 
 	if (test_bit(__ICE_DOWN, pf->state))
 		goto clear_recovery;
@@ -3370,6 +3370,22 @@ static void ice_rebuild(struct ice_pf *pf)
 	}
 
 	ice_reset_all_vfs(pf, true);
+
+	for (i = 0; i < pf->num_alloc_vsi; i++) {
+		bool link_up;
+
+		if (!pf->vsi[i] || pf->vsi[i]->type != ICE_VSI_PF)
+			continue;
+		ice_get_link_status(pf->vsi[i]->port_info, &link_up);
+		if (link_up) {
+			netif_carrier_on(pf->vsi[i]->netdev);
+			netif_tx_wake_all_queues(pf->vsi[i]->netdev);
+		} else {
+			netif_carrier_off(pf->vsi[i]->netdev);
+			netif_tx_stop_all_queues(pf->vsi[i]->netdev);
+		}
+	}
+
 	/* if we get here, reset flow is successful */
 	clear_bit(__ICE_RESET_FAILED, pf->state);
 	return;
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:54   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control Anirudh Venkataramanan
                   ` (13 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

The remove path does not currently check to see if a
reset is in progress before proceeding.  This can cause
a resource collision resulting in various types of errors.

Check for reset in progress and wait for a reasonable
amount of time before allowing the remove to progress.

Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h      | 2 ++
 drivers/net/ethernet/intel/ice/ice_main.c | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index 4c4b5717a627..e5b37fa60884 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -76,6 +76,8 @@ extern const char ice_drv_ver[];
 #define ICE_MIN_INTR_PER_VF		(ICE_MIN_QS_PER_VF + 1)
 #define ICE_DFLT_INTR_PER_VF		(ICE_DFLT_QS_PER_VF + 1)
 
+#define ICE_MAX_RESET_WAIT		20
+
 #define ICE_VSIQF_HKEY_ARRAY_SIZE	((VSIQF_HKEY_MAX_INDEX + 1) *	4)
 
 #define ICE_DFLT_NETIF_M (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK)
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 6d31ffb64940..aee22f11a41a 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2182,6 +2182,12 @@ static void ice_remove(struct pci_dev *pdev)
 	if (!pf)
 		return;
 
+	for (i = 0; i < ICE_MAX_RESET_WAIT; i++) {
+		if (!ice_is_reset_in_progress(pf->state))
+			break;
+		msleep(100);
+	}
+
 	set_bit(__ICE_DOWN, pf->state);
 	ice_service_task_stop(pf);
 
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild Anirudh Venkataramanan
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:55   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload Anirudh Venkataramanan
                   ` (12 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>

Setting Rx or Tx pause parameter currently results in link loss on the
interface, requiring the platform/host to be cold power cycled. Fix it.

Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> rewrote commit message]
---
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 96923580f2a6..648acdb4c644 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -1517,10 +1517,15 @@ ice_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)
 	}
 
 	if (!test_bit(__ICE_DOWN, pf->state)) {
-		/* Give it a little more time to try to come back */
+		/* Give it a little more time to try to come back. If still
+		 * down, restart autoneg link or reinitialize the interface.
+		 */
 		msleep(75);
 		if (!test_bit(__ICE_DOWN, pf->state))
 			return ice_nway_reset(netdev);
+
+		ice_down(vsi);
+		ice_up(vsi);
 	}
 
 	return err;
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (2 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:55   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path Anirudh Venkataramanan
                   ` (11 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Victor Raj <victor.raj@intel.com>

In the unload path, all VSIs are freed. Also free the related VSI
contexts to prevent memory leaks.

Signed-off-by: Victor Raj <victor.raj@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> rewrote commit message]
---
 drivers/net/ethernet/intel/ice/ice_common.c |  3 +++
 drivers/net/ethernet/intel/ice/ice_switch.c | 12 ++++++++++++
 drivers/net/ethernet/intel/ice/ice_switch.h |  2 ++
 3 files changed, 17 insertions(+)

diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 8cd6a2401fd9..554fd707a6d6 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -811,6 +811,9 @@ void ice_deinit_hw(struct ice_hw *hw)
 	/* Attempt to disable FW logging before shutting down control queues */
 	ice_cfg_fw_log(hw, false);
 	ice_shutdown_all_ctrlq(hw);
+
+	/* Clear VSI contexts if not already cleared */
+	ice_clear_all_vsi_ctx(hw);
 }
 
 /**
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c
index 33403f39f1b3..40c9c6558956 100644
--- a/drivers/net/ethernet/intel/ice/ice_switch.c
+++ b/drivers/net/ethernet/intel/ice/ice_switch.c
@@ -347,6 +347,18 @@ static void ice_clear_vsi_ctx(struct ice_hw *hw, u16 vsi_handle)
 	}
 }
 
+/**
+ * ice_clear_all_vsi_ctx - clear all the VSI context entries
+ * @hw: pointer to the hw struct
+ */
+void ice_clear_all_vsi_ctx(struct ice_hw *hw)
+{
+	u16 i;
+
+	for (i = 0; i < ICE_MAX_VSI; i++)
+		ice_clear_vsi_ctx(hw, i);
+}
+
 /**
  * ice_add_vsi - add VSI context to the hardware and VSI handle list
  * @hw: pointer to the hw struct
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.h b/drivers/net/ethernet/intel/ice/ice_switch.h
index b88d96a1ef69..d5ef0bd58bf9 100644
--- a/drivers/net/ethernet/intel/ice/ice_switch.h
+++ b/drivers/net/ethernet/intel/ice/ice_switch.h
@@ -190,6 +190,8 @@ ice_update_vsi(struct ice_hw *hw, u16 vsi_handle, struct ice_vsi_ctx *vsi_ctx,
 	       struct ice_sq_cd *cd);
 bool ice_is_vsi_valid(struct ice_hw *hw, u16 vsi_handle);
 struct ice_vsi_ctx *ice_get_vsi_ctx(struct ice_hw *hw, u16 vsi_handle);
+void ice_clear_all_vsi_ctx(struct ice_hw *hw);
+/* Switch config */
 enum ice_status ice_get_initial_sw_cfg(struct ice_hw *hw);
 
 /* Switch/bridge related commands */
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (3 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:56   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN Anirudh Venkataramanan
                   ` (10 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

ice_restore_vlan and active_vlans were originally put in place to
reprogram VLAN filters in the replay path. This is now done as part
of the much broader VSI rebuild/replay framework. So remove both
ice_restore_vlan and active_vlans

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h             |  1 -
 drivers/net/ethernet/intel/ice/ice_main.c        | 42 ++++--------------------
 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |  2 --
 3 files changed, 6 insertions(+), 39 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index e5b37fa60884..1639e955f158 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -191,7 +191,6 @@ struct ice_vsi {
 	u64 tx_linearize;
 	DECLARE_BITMAP(state, __ICE_STATE_NBITS);
 	DECLARE_BITMAP(flags, ICE_VSI_FLAG_NBITS);
-	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 	unsigned int current_netdev_flags;
 	u32 tx_restart;
 	u32 tx_busy;
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index aee22f11a41a..338abb1b9233 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -1622,7 +1622,6 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
 {
 	struct ice_netdev_priv *np = netdev_priv(netdev);
 	struct ice_vsi *vsi = np->vsi;
-	int ret;
 
 	if (vid >= VLAN_N_VID) {
 		netdev_err(netdev, "VLAN id requested %d is out of range %d\n",
@@ -1635,7 +1634,8 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
 
 	/* Enable VLAN pruning when VLAN 0 is added */
 	if (unlikely(!vid)) {
-		ret = ice_cfg_vlan_pruning(vsi, true);
+		int ret = ice_cfg_vlan_pruning(vsi, true);
+
 		if (ret)
 			return ret;
 	}
@@ -1644,12 +1644,7 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
 	 * needed to continue allowing all untagged packets since VLAN prune
 	 * list is applied to all packets by the switch
 	 */
-	ret = ice_vsi_add_vlan(vsi, vid);
-
-	if (!ret)
-		set_bit(vid, vsi->active_vlans);
-
-	return ret;
+	return ice_vsi_add_vlan(vsi, vid);
 }
 
 /**
@@ -1677,8 +1672,6 @@ static int ice_vlan_rx_kill_vid(struct net_device *netdev,
 	if (status)
 		return status;
 
-	clear_bit(vid, vsi->active_vlans);
-
 	/* Disable VLAN pruning when VLAN 0 is removed */
 	if (unlikely(!vid))
 		status = ice_cfg_vlan_pruning(vsi, false);
@@ -2515,31 +2508,6 @@ static int ice_vsi_vlan_setup(struct ice_vsi *vsi)
 	return ret;
 }
 
-/**
- * ice_restore_vlan - Reinstate VLANs when vsi/netdev comes back up
- * @vsi: the VSI being brought back up
- */
-static int ice_restore_vlan(struct ice_vsi *vsi)
-{
-	int err;
-	u16 vid;
-
-	if (!vsi->netdev)
-		return -EINVAL;
-
-	err = ice_vsi_vlan_setup(vsi);
-	if (err)
-		return err;
-
-	for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID) {
-		err = ice_vlan_rx_add_vid(vsi->netdev, htons(ETH_P_8021Q), vid);
-		if (err)
-			break;
-	}
-
-	return err;
-}
-
 /**
  * ice_vsi_cfg - Setup the VSI
  * @vsi: the VSI being configured
@@ -2552,7 +2520,9 @@ static int ice_vsi_cfg(struct ice_vsi *vsi)
 
 	if (vsi->netdev) {
 		ice_set_rx_mode(vsi->netdev);
-		err = ice_restore_vlan(vsi);
+
+		err = ice_vsi_vlan_setup(vsi);
+
 		if (err)
 			return err;
 	}
diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
index 45f10f8f01dc..9576b958622b 100644
--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
@@ -2171,7 +2171,6 @@ static int ice_vc_process_vlan_msg(struct ice_vf *vf, u8 *msg, bool add_v)
 
 			if (!ice_vsi_add_vlan(vsi, vid)) {
 				vf->num_vlan++;
-				set_bit(vid, vsi->active_vlans);
 
 				/* Enable VLAN pruning when VLAN 0 is added */
 				if (unlikely(!vid))
@@ -2190,7 +2189,6 @@ static int ice_vc_process_vlan_msg(struct ice_vf *vf, u8 *msg, bool add_v)
 			 */
 			if (!ice_vsi_kill_vlan(vsi, vid)) {
 				vf->num_vlan--;
-				clear_bit(vid, vsi->active_vlans);
 
 				/* Disable VLAN pruning when removing VLAN 0 */
 				if (unlikely(!vid))
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (4 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:56   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message Anirudh Venkataramanan
                   ` (9 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Md Fahad Iqbal Polash <md.fahad.iqbal.polash@intel.com>

According to the spec, whenever insert PVID field is set, the VLAN
driver insertion mode should be set to 01b which isn't done currently.
Fix it.

Signed-off-by: Md Fahad Iqbal Polash <md.fahad.iqbal.polash@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned up commit message]
---
 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
index 9576b958622b..e71065f9d391 100644
--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
@@ -348,7 +348,7 @@ static int ice_vsi_set_pvid(struct ice_vsi *vsi, u16 vid)
 	struct ice_vsi_ctx ctxt = { 0 };
 	enum ice_status status;
 
-	ctxt.info.vlan_flags = ICE_AQ_VSI_VLAN_MODE_TAGGED |
+	ctxt.info.vlan_flags = ICE_AQ_VSI_VLAN_MODE_UNTAGGED |
 			       ICE_AQ_VSI_PVLAN_INSERT_PVID |
 			       ICE_AQ_VSI_VLAN_EMOD_STR;
 	ctxt.info.pvid = cpu_to_le16(vid);
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (5 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:57   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove Anirudh Venkataramanan
                   ` (8 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

Print should say "Enabling" instead of "Enaabling"

Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_lib.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index 5bacad01f0c9..c604a44c8cfb 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -1997,7 +1997,7 @@ int ice_cfg_vlan_pruning(struct ice_vsi *vsi, bool ena)
 	status = ice_update_vsi(&vsi->back->hw, vsi->idx, ctxt, NULL);
 	if (status) {
 		netdev_err(vsi->netdev, "%sabling VLAN pruning on VSI handle: %d, VSI HW ID: %d failed, err = %d, aq_err = %d\n",
-			   ena ? "Ena" : "Dis", vsi->idx, vsi->vsi_num, status,
+			   ena ? "En" : "Dis", vsi->idx, vsi->vsi_num, status,
 			   vsi->back->hw.adminq.sq_last_status);
 		goto err_out;
 	}
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (6 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:58   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver Anirudh Venkataramanan
                   ` (7 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Dave Ertman <david.m.ertman@intel.com>

In the remove path, the vsi->netdev is being set to NULL before the call
to free vectors. This is causing the netif_napi_del call to never be made.

Add a call to ice_napi_del to the same location as the calls to
unregister_netdev and just prior to them. This will use the reverse flow
as the register and netif_napi_add calls.

Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h      | 1 +
 drivers/net/ethernet/intel/ice/ice_lib.c  | 1 +
 drivers/net/ethernet/intel/ice/ice_main.c | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index 1639e955f158..b8548370f1c7 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -370,5 +370,6 @@ int ice_set_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);
 int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);
 void ice_fill_rss_lut(u8 *lut, u16 rss_table_size, u16 rss_size);
 void ice_print_link_msg(struct ice_vsi *vsi, bool isup);
+void ice_napi_del(struct ice_vsi *vsi);
 
 #endif /* _ICE_H_ */
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index c604a44c8cfb..1041fa2a7767 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -2458,6 +2458,7 @@ int ice_vsi_release(struct ice_vsi *vsi)
 	 * on this wq
 	 */
 	if (vsi->netdev && !ice_is_reset_in_progress(pf->state)) {
+		ice_napi_del(vsi);
 		unregister_netdev(vsi->netdev);
 		free_netdev(vsi->netdev);
 		vsi->netdev = NULL;
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 338abb1b9233..82f49dbd762c 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -1465,7 +1465,7 @@ static int ice_req_irq_msix_misc(struct ice_pf *pf)
  * ice_napi_del - Remove NAPI handler for the VSI
  * @vsi: VSI for which NAPI handler is to be removed
  */
-static void ice_napi_del(struct ice_vsi *vsi)
+void ice_napi_del(struct ice_vsi *vsi)
 {
 	int v_idx;
 
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (7 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:58   ` Bowers, AndrewX
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue Anirudh Venkataramanan
                   ` (6 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Brett Creeley <brett.creeley@intel.com>

Prior to this commit the driver was running into tx_timeouts when a
queue was stressed enough. This was happening because the HW tail
and SW tail (NTU) were incorrectly out of sync. Consequently this was
causing the HW head to collide with the HW tail, which to the hardware
means that all descriptors posted for Tx have been processed.

Due to the Tx logic used in the driver SW tail and HW tail are allowed
to be out of sync. This is done as an optimization because it allows the
driver to write HW tail as infrequently as possible, while still
updating the SW tail index to keep track. However, there are situations
where this results in the tail never getting updated, resulting in Tx
timeouts.

Tx HW tail write condition:
	if (netif_xmit_stopped(txring_txq(tx_ring) || !skb->xmit_more)
		writel(sw_tail, tx_ring->tail);

An issue was found in the Tx logic that was causing the aformentioned
condition for updating HW tail to never happen, causing tx_timeouts.

In ice_xmit_frame_ring we calculate how many descriptors we need for the
Tx transaction based on the skb the kernel hands us. This is then passed
into ice_maybe_stop_tx along with some extra padding to determine if we
have enough descriptors available for this transaction. If we don't then
we return -EBUSY to the stack, otherwise we move on and eventually
prepare the Tx descriptors accordingly in ice_tx_map and set
next_to_watch. In ice_tx_map we make another call to ice_maybe_stop_tx
with a value of MAX_SKB_FRAGS + 4. The key here is that this value is
possibly less than the value we sent in the first call to
ice_maybe_stop_tx in ice_xmit_frame_ring. Now, if the number of unused
descriptors is between MAX_SKB_FRAGS + 4 and the value used in the first
call to ice_maybe_stop_tx in ice_xmit_frame_ring then we do not update
the HW tail because of the "Tx HW tail write condition" above. This is
because in ice_maybe_stop_tx we return success from ice_maybe_stop_tx
instead of calling __ice_maybe_stop_tx and subsequently calling
netif_stop_subqueue, which sets the __QUEUE_STATE_DEV_XOFF bit. This
bit is then checked in the "Tx HW tail write condition" by calling
netif_xmit_stopped and subsequently updating HW tail if the
aformentioned bit is set.

In ice_clean_tx_irq, if next_to_watch is not NULL, we end up cleaning
the descriptors that HW sets the DD bit on and we have the budget. The
HW head will eventuallly run into the HW tail in response to the
description in the paragraph above.

The next time through ice_xmit_frame_ring we make the initial call to
ice_maybe_stop_tx with another skb from the stack. This time we do not
have enough descriptors available and we return NETDEV_TX_BUSY to the
stack and end up setting next_to_watch to NULL.

This is where we are stuck. In ice_clean_tx_irq we never clean anything
because next_to_watch is always NULL and in ice_xmit_frame_ring we never
update HW tail because we already return NETDEV_TX_BUSY to the stack and
eventually we hit a tx_timeout.

This issue was fixed by making sure that the second call to
ice_maybe_stop_tx in ice_tx_map is passed a value that is >= the value
that was used on the initial call to ice_maybe_stop_tx in
ice_xmit_frame_ring. This was done by adding the following defines to
make the logic more clear and to reduce the chance of mucking this up
again:

ICE_CACHE_LINE_BYTES		64
ICE_DESCS_PER_CACHE_LINE	(ICE_CACHE_LINE_BYTES / \
				 sizeof(struct ice_tx_desc))
ICE_DESCS_FOR_CTX_DESC		1
ICE_DESCS_FOR_SKB_DATA_PTR	1

The ICE_CACHE_LINE_BYTES being 64 is an assumption being made so we
don't have to figure this out on every pass through the Tx path. Instead
I added a sanity check in ice_probe to verify cache line size and print
a message if it's not 64 Bytes. This will make it easier to file issues
if they are seen when the cache line size is not 64 Bytes when reading
from the GLPCI_CNF2 register.

Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
 drivers/net/ethernet/intel/ice/ice_main.c       | 18 ++++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_txrx.c       |  9 +++++----
 drivers/net/ethernet/intel/ice/ice_txrx.h       | 17 +++++++++++++++--
 4 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
index 5fdea6ec7675..596b9fb1c510 100644
--- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
+++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
@@ -242,6 +242,8 @@
 #define GLNVM_ULD				0x000B6008
 #define GLNVM_ULD_CORER_DONE_M			BIT(3)
 #define GLNVM_ULD_GLOBR_DONE_M			BIT(4)
+#define GLPCI_CNF2				0x000BE004
+#define GLPCI_CNF2_CACHELINE_SIZE_M		BIT(1)
 #define PF_FUNC_RID				0x0009E880
 #define PF_FUNC_RID_FUNC_NUM_S			0
 #define PF_FUNC_RID_FUNC_NUM_M			ICE_M(0x7, 0)
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 82f49dbd762c..333312a1d595 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -1994,6 +1994,22 @@ static int ice_init_interrupt_scheme(struct ice_pf *pf)
 	return 0;
 }
 
+/**
+ * ice_verify_cacheline_size - verify driver's assumption of 64 Byte cache lines
+ * @pf: pointer to the PF structure
+ *
+ * There is no error returned here because the driver should be able to handle
+ * 128 Byte cache lines, so we only print a warning in case issues are seen,
+ * specifically with Tx.
+ */
+static void ice_verify_cacheline_size(struct ice_pf *pf)
+{
+	if (rd32(&pf->hw, GLPCI_CNF2) & GLPCI_CNF2_CACHELINE_SIZE_M)
+		dev_warn(&pf->pdev->dev,
+			 "%d Byte cache line assumption is invalid, driver may have Tx timeouts!\n",
+			 ICE_CACHE_LINE_BYTES);
+}
+
 /**
  * ice_probe - Device initialization routine
  * @pdev: PCI device information struct
@@ -2144,6 +2160,8 @@ static int ice_probe(struct pci_dev *pdev,
 	/* since everything is good, start the service timer */
 	mod_timer(&pf->serv_tmr, round_jiffies(jiffies + pf->serv_tmr_period));
 
+	ice_verify_cacheline_size(pf);
+
 	return 0;
 
 err_alloc_sw_unroll:
diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 5dae968d853e..3387c67c848d 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1556,15 +1556,15 @@ int ice_tso(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
  * magnitude greater than our largest possible GSO size.
  *
  * This would then be implemented as:
- *     return (((size >> 12) * 85) >> 8) + 1;
+ *     return (((size >> 12) * 85) >> 8) + ICE_DESCS_FOR_SKB_DATA_PTR;
  *
  * Since multiplication and division are commutative, we can reorder
  * operations into:
- *     return ((size * 85) >> 20) + 1;
+ *     return ((size * 85) >> 20) + ICE_DESCS_FOR_SKB_DATA_PTR;
  */
 static unsigned int ice_txd_use_count(unsigned int size)
 {
-	return ((size * 85) >> 20) + 1;
+	return ((size * 85) >> 20) + ICE_DESCS_FOR_SKB_DATA_PTR;
 }
 
 /**
@@ -1706,7 +1706,8 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring)
 	 *       + 1 desc for context descriptor,
 	 * otherwise try next time
 	 */
-	if (ice_maybe_stop_tx(tx_ring, count + 4 + 1)) {
+	if (ice_maybe_stop_tx(tx_ring, count + ICE_DESCS_PER_CACHE_LINE +
+			      ICE_DESCS_FOR_CTX_DESC)) {
 		tx_ring->tx_stats.tx_busy++;
 		return NETDEV_TX_BUSY;
 	}
diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.h b/drivers/net/ethernet/intel/ice/ice_txrx.h
index 1d0f58bd389b..75d0eaf6c9dd 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.h
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.h
@@ -22,8 +22,21 @@
 #define ICE_RX_BUF_WRITE	16	/* Must be power of 2 */
 #define ICE_MAX_TXQ_PER_TXQG	128
 
-/* Tx Descriptors needed, worst case */
-#define DESC_NEEDED (MAX_SKB_FRAGS + 4)
+/* We are assuming that the cache line is always 64 Bytes here for ice.
+ * In order to make sure that is a correct assumption there is a check in probe
+ * to print a warning if the read from GLPCI_CNF2 tells us that the cache line
+ * size is 128 bytes. We do it this way because we do not want to read the
+ * GLPCI_CNF2 register or a variable containing the value on every pass through
+ * the Tx path.
+ */
+#define ICE_CACHE_LINE_BYTES		64
+#define ICE_DESCS_PER_CACHE_LINE	(ICE_CACHE_LINE_BYTES / \
+					 sizeof(struct ice_tx_desc))
+#define ICE_DESCS_FOR_CTX_DESC		1
+#define ICE_DESCS_FOR_SKB_DATA_PTR	1
+/* Tx descriptors needed, worst case */
+#define DESC_NEEDED (MAX_SKB_FRAGS + ICE_DESCS_FOR_CTX_DESC + \
+		     ICE_DESCS_PER_CACHE_LINE + ICE_DESCS_FOR_SKB_DATA_PTR)
 #define ICE_DESC_UNUSED(R)	\
 	((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
 	(R)->next_to_clean - (R)->next_to_use - 1)
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (8 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver Anirudh Venkataramanan
@ 2018-10-26 17:40 ` Anirudh Venkataramanan
  2018-10-30 21:59   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout Anirudh Venkataramanan
                   ` (5 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:40 UTC (permalink / raw)
  To: intel-wired-lan

From: Brett Creeley <brett.creeley@intel.com>

Currently if the driver does a TSO offload the bytecount sent to
netdev_tx_sent_queue will be incorrect. This is because in ice_tso we
overwrite the initial value that we set in ice_tx_map. This creates a
mismatch between the Tx and Tx clean flow. In the Tx clean flow we
calculate the bytecount (called total_bytes) as we clean the
descriptors so the value used in the Tx clean path is correct. Fix this
by using += in ice_tso instead of =. This fixes the mismatch in
bytecount mentioned above.

Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 3387c67c848d..fe5bbabbb41e 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1520,7 +1520,7 @@ int ice_tso(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
 
 	/* update gso_segs and bytecount */
 	first->gso_segs = skb_shinfo(skb)->gso_segs;
-	first->bytecount = (first->gso_segs - 1) * off->header_len;
+	first->bytecount += (first->gso_segs - 1) * off->header_len;
 
 	cd_tso_len = skb->len - off->header_len;
 	cd_mss = skb_shinfo(skb)->gso_size;
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (9 preceding siblings ...)
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:01   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings Anirudh Venkataramanan
                   ` (4 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

From: Brett Creeley <brett.creeley@intel.com>

Currently the debug print in ice_tx_timeout is printing useless and
duplicate values. First, head is being assigned to tx_ring->next_to_clean
and we are printing both of those values, but naming them HWB and NTC
respectively. Also, reading tail always returns 0 so remove that as well.

Instead of assigning head the SW head (NTC) read the actual head register
and change the debug print to note that this is HW_HEAD. Also reduce thei
scope of a couple variables.

Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned up commit message]
---
 drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  3 +++
 drivers/net/ethernet/intel/ice/ice_main.c       | 15 +++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
index 596b9fb1c510..5507928c8fbe 100644
--- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
+++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
@@ -7,6 +7,9 @@
 #define _ICE_HW_AUTOGEN_H_
 
 #define QTX_COMM_DBELL(_DBQM)			(0x002C0000 + ((_DBQM) * 4))
+#define QTX_COMM_HEAD(_DBQM)			(0x000E0000 + ((_DBQM) * 4))
+#define QTX_COMM_HEAD_HEAD_S			0
+#define QTX_COMM_HEAD_HEAD_M			ICE_M(0x1FFF, 0)
 #define PF_FW_ARQBAH				0x00080180
 #define PF_FW_ARQBAL				0x00080080
 #define PF_FW_ARQH				0x00080380
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 333312a1d595..8584061e1bc6 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -3691,8 +3691,8 @@ static void ice_tx_timeout(struct net_device *netdev)
 	struct ice_ring *tx_ring = NULL;
 	struct ice_vsi *vsi = np->vsi;
 	struct ice_pf *pf = vsi->back;
-	u32 head, val = 0, i;
 	int hung_queue = -1;
+	u32 i;
 
 	pf->tx_timeout_count++;
 
@@ -3736,17 +3736,20 @@ static void ice_tx_timeout(struct net_device *netdev)
 		return;
 
 	if (tx_ring) {
-		head = tx_ring->next_to_clean;
+		struct ice_hw *hw = &pf->hw;
+		u32 head, val = 0;
+
+		head = (rd32(hw, QTX_COMM_HEAD(vsi->txq_map[hung_queue])) &
+			QTX_COMM_HEAD_HEAD_M) >> QTX_COMM_HEAD_HEAD_S;
 		/* Read interrupt register */
 		if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
-			val = rd32(&pf->hw,
+			val = rd32(hw,
 				   GLINT_DYN_CTL(tx_ring->q_vector->v_idx +
 					tx_ring->vsi->hw_base_vector));
 
-		netdev_info(netdev, "tx_timeout: VSI_num: %d, Q %d, NTC: 0x%x, HWB: 0x%x, NTU: 0x%x, TAIL: 0x%x, INT: 0x%x\n",
+		netdev_info(netdev, "tx_timeout: VSI_num: %d, Q %d, NTC: 0x%x, HW_HEAD: 0x%x, NTU: 0x%x, INT: 0x%x\n",
 			    vsi->vsi_num, hung_queue, tx_ring->next_to_clean,
-			    head, tx_ring->next_to_use,
-			    readl(tx_ring->tail), val);
+			    head, tx_ring->next_to_use, val);
 	}
 
 	pf->tx_timeout_last_recovery = jiffies;
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (10 preceding siblings ...)
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:01   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI Anirudh Venkataramanan
                   ` (3 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

From: Tony Nguyen <anthony.l.nguyen@intel.com>

There is a gap in time between a VF reset, which sets the q_vector to
NULL, and the VF requesting mapping of the q_vectors. If
ice_vsi_stop_tx_rings() is called during this time, a NULL pointer
dereference is encountered. Add a check in ice_vsi_stop_tx_rings()
to ensure the q_vector is set to avoid this situation from occurring.

Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_lib.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index 1041fa2a7767..11d0ab185dd2 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -1908,7 +1908,8 @@ int ice_vsi_stop_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
 	ice_for_each_txq(vsi, i) {
 		u16 v_idx;
 
-		if (!vsi->tx_rings || !vsi->tx_rings[i]) {
+		if (!vsi->tx_rings || !vsi->tx_rings[i] ||
+		    !vsi->tx_rings[i]->q_vector) {
 			err = -EINVAL;
 			goto err_out;
 		}
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (11 preceding siblings ...)
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:01   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it Anirudh Venkataramanan
                   ` (2 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

Before releasing the VSI, remove the VSI scheduler node. If not,
the node is left in the scheduler tree and, on subsequent load, the
scheduler tree contains the node so it does not set it in vsi_ctx.
This, later, causes the node to not be found in ice_sched_get_free_qparent
which leads to a "Failed to set LAN Tx queue context, error: -1".

To remove the scheduler node, this patch introduces ice_rm_vsi_lan_cfg
and related helpers.

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_lib.c   |   1 +
 drivers/net/ethernet/intel/ice/ice_sched.c | 108 ++++++++++++++++++++++++++++-
 drivers/net/ethernet/intel/ice/ice_sched.h |   2 +
 3 files changed, 110 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index 11d0ab185dd2..1efd760debc2 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -2492,6 +2492,7 @@ int ice_vsi_release(struct ice_vsi *vsi)
 	}
 
 	ice_remove_vsi_fltr(&pf->hw, vsi->idx);
+	ice_rm_vsi_lan_cfg(vsi->port_info, vsi->idx);
 	ice_vsi_delete(vsi);
 	ice_vsi_free_q_vectors(vsi);
 	ice_vsi_clear_rings(vsi);
diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c
index 7cc8aa18a22b..3d57f5b4834d 100644
--- a/drivers/net/ethernet/intel/ice/ice_sched.c
+++ b/drivers/net/ethernet/intel/ice/ice_sched.c
@@ -1527,7 +1527,7 @@ ice_sched_update_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle,
 }
 
 /**
- * ice_sched_cfg_vsi - configure the new/exisiting VSI
+ * ice_sched_cfg_vsi - configure the new/existing VSI
  * @pi: port information structure
  * @vsi_handle: software VSI handle
  * @tc: TC number
@@ -1605,3 +1605,109 @@ ice_sched_cfg_vsi(struct ice_port_info *pi, u16 vsi_handle, u8 tc, u16 maxqs,
 
 	return status;
 }
+
+/**
+ * ice_sched_rm_agg_vsi_entry - remove agg related vsi info entry
+ * @pi: port information structure
+ * @vsi_handle: software VSI handle
+ *
+ * This function removes single aggregator vsi info entry from
+ * aggregator list.
+ */
+static void
+ice_sched_rm_agg_vsi_info(struct ice_port_info *pi, u16 vsi_handle)
+{
+	struct ice_sched_agg_info *agg_info;
+	struct ice_sched_agg_info *atmp;
+
+	list_for_each_entry_safe(agg_info, atmp, &pi->agg_list, list_entry) {
+		struct ice_sched_agg_vsi_info *agg_vsi_info;
+		struct ice_sched_agg_vsi_info *vtmp;
+
+		list_for_each_entry_safe(agg_vsi_info, vtmp,
+					 &agg_info->agg_vsi_list, list_entry)
+			if (agg_vsi_info->vsi_handle == vsi_handle) {
+				list_del(&agg_vsi_info->list_entry);
+				devm_kfree(ice_hw_to_dev(pi->hw),
+					   agg_vsi_info);
+				return;
+			}
+	}
+}
+
+/**
+ * ice_sched_rm_vsi_cfg - remove the VSI and its children nodes
+ * @pi: port information structure
+ * @vsi_handle: software VSI handle
+ * @owner: lan or rdma
+ *
+ * This function removes the VSI and its lan or rdma children nodes from the
+ * scheduler tree.
+ */
+static enum ice_status
+ice_sched_rm_vsi_cfg(struct ice_port_info *pi, u16 vsi_handle, u8 owner)
+{
+	enum ice_status status = ICE_ERR_PARAM;
+	struct ice_vsi_ctx *vsi_ctx;
+	u8 i, j = 0;
+
+	if (!ice_is_vsi_valid(pi->hw, vsi_handle))
+		return status;
+	mutex_lock(&pi->sched_lock);
+	vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle);
+	if (!vsi_ctx)
+		goto exit_sched_rm_vsi_cfg;
+
+	for (i = 0; i < ICE_MAX_TRAFFIC_CLASS; i++) {
+		struct ice_sched_node *vsi_node, *tc_node;
+
+		tc_node = ice_sched_get_tc_node(pi, i);
+		if (!tc_node)
+			continue;
+
+		vsi_node = ice_sched_get_vsi_node(pi->hw, tc_node, vsi_handle);
+		if (!vsi_node)
+			continue;
+
+		while (j < vsi_node->num_children) {
+			if (vsi_node->children[j]->owner == owner) {
+				ice_free_sched_node(pi, vsi_node->children[j]);
+
+				/* reset the counter again since the num
+				 * children will be updated after node removal
+				 */
+				j = 0;
+			} else {
+				j++;
+			}
+		}
+		/* remove the VSI if it has no children */
+		if (!vsi_node->num_children) {
+			ice_free_sched_node(pi, vsi_node);
+			vsi_ctx->sched.vsi_node[i] = NULL;
+
+			/* clean up agg related vsi info if any */
+			ice_sched_rm_agg_vsi_info(pi, vsi_handle);
+		}
+		if (owner == ICE_SCHED_NODE_OWNER_LAN)
+			vsi_ctx->sched.max_lanq[i] = 0;
+	}
+	status = 0;
+
+exit_sched_rm_vsi_cfg:
+	mutex_unlock(&pi->sched_lock);
+	return status;
+}
+
+/**
+ * ice_rm_vsi_lan_cfg - remove VSI and its lan children nodes
+ * @pi: port information structure
+ * @vsi_handle: software VSI handle
+ *
+ * This function clears the VSI and its lan children nodes from scheduler tree
+ * for all TCs.
+ */
+enum ice_status ice_rm_vsi_lan_cfg(struct ice_port_info *pi, u16 vsi_handle)
+{
+	return ice_sched_rm_vsi_cfg(pi, vsi_handle, ICE_SCHED_NODE_OWNER_LAN);
+}
diff --git a/drivers/net/ethernet/intel/ice/ice_sched.h b/drivers/net/ethernet/intel/ice/ice_sched.h
index 5dc9cfa04c58..dc59fbac7dde 100644
--- a/drivers/net/ethernet/intel/ice/ice_sched.h
+++ b/drivers/net/ethernet/intel/ice/ice_sched.h
@@ -12,6 +12,7 @@
 struct ice_sched_agg_vsi_info {
 	struct list_head list_entry;
 	DECLARE_BITMAP(tc_bitmap, ICE_MAX_TRAFFIC_CLASS);
+	u16 vsi_handle;
 };
 
 struct ice_sched_agg_info {
@@ -39,4 +40,5 @@ ice_sched_get_free_qparent(struct ice_port_info *pi, u16 vsi_handle, u8 tc,
 enum ice_status
 ice_sched_cfg_vsi(struct ice_port_info *pi, u16 vsi_handle, u8 tc, u16 maxqs,
 		  u8 owner, bool enable);
+enum ice_status ice_rm_vsi_lan_cfg(struct ice_port_info *pi, u16 vsi_handle);
 #endif /* _ICE_SCHED_H_ */
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (12 preceding siblings ...)
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:02   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi Anirudh Venkataramanan
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines Anirudh Venkataramanan
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

Currently we are setting the guar_num_vsi to equal to ICE_MAX_VSI
which is the device limit of 768. This is incorrect and could have
unintended consequences. To fix this use the valid_function's 8-bit
bitmap returned from discovering device capabilities to determine the
guar_num_vsi per function. guar_num_vsi value is then passed on to
pf->num_alloc_vsi.

Also shorten instances of "guaranteed" to "guar"

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h            |  1 -
 drivers/net/ethernet/intel/ice/ice_adminq_cmd.h |  1 +
 drivers/net/ethernet/intel/ice/ice_common.c     | 31 +++++++++++++++++++++++--
 drivers/net/ethernet/intel/ice/ice_main.c       |  3 +--
 drivers/net/ethernet/intel/ice/ice_type.h       |  4 +++-
 5 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index b8548370f1c7..ba03cbd3638e 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -52,7 +52,6 @@ extern const char ice_drv_ver[];
 #define ICE_MBXQ_LEN		64
 #define ICE_MIN_MSIX		2
 #define ICE_NO_VSI		0xffff
-#define ICE_MAX_VSI_ALLOC	130
 #define ICE_MAX_TXQS		2048
 #define ICE_MAX_RXQS		2048
 #define ICE_VSI_MAP_CONTIG	0
diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
index 6653555f55dd..602f02a0a2d1 100644
--- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
@@ -87,6 +87,7 @@ struct ice_aqc_list_caps {
 /* Device/Function buffer entry, repeated per reported capability */
 struct ice_aqc_list_caps_elem {
 	__le16 cap;
+#define ICE_AQC_CAPS_VALID_FUNCTIONS			0x0005
 #define ICE_AQC_CAPS_SRIOV				0x0012
 #define ICE_AQC_CAPS_VF					0x0013
 #define ICE_AQC_CAPS_VSI				0x0017
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 554fd707a6d6..9de5a3aac77d 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1386,6 +1386,27 @@ void ice_release_res(struct ice_hw *hw, enum ice_aq_res_ids res)
 	}
 }
 
+/**
+ * ice_get_guar_num_vsi - determine number of guar VSI for a PF
+ * @hw: pointer to the hw structure
+ *
+ * Determine the number of valid functions by going through the bitmap returned
+ * from parsing capabilities and use this to calculate the number of VSI per PF.
+ */
+static u32 ice_get_guar_num_vsi(struct ice_hw *hw)
+{
+	u8 funcs;
+
+#define ICE_CAPS_VALID_FUNCS_M	0xFF
+	funcs = hweight8(hw->dev_caps.common_cap.valid_functions &
+			 ICE_CAPS_VALID_FUNCS_M);
+
+	if (!funcs)
+		return 0;
+
+	return ICE_MAX_VSI / funcs;
+}
+
 /**
  * ice_parse_caps - parse function/device capabilities
  * @hw: pointer to the hw struct
@@ -1428,6 +1449,12 @@ ice_parse_caps(struct ice_hw *hw, void *buf, u32 cap_count,
 		u16 cap = le16_to_cpu(cap_resp->cap);
 
 		switch (cap) {
+		case ICE_AQC_CAPS_VALID_FUNCTIONS:
+			caps->valid_functions = number;
+			ice_debug(hw, ICE_DBG_INIT,
+				  "HW caps: Valid Functions = %d\n",
+				  caps->valid_functions);
+			break;
 		case ICE_AQC_CAPS_SRIOV:
 			caps->sr_iov_1_1 = (number == 1);
 			ice_debug(hw, ICE_DBG_INIT,
@@ -1457,10 +1484,10 @@ ice_parse_caps(struct ice_hw *hw, void *buf, u32 cap_count,
 					  "HW caps: Dev.VSI cnt = %d\n",
 					  dev_p->num_vsi_allocd_to_host);
 			} else if (func_p) {
-				func_p->guaranteed_num_vsi = number;
+				func_p->guar_num_vsi = ice_get_guar_num_vsi(hw);
 				ice_debug(hw, ICE_DBG_INIT,
 					  "HW caps: Func.VSI cnt = %d\n",
-					  func_p->guaranteed_num_vsi);
+					  number);
 			}
 			break;
 		case ICE_AQC_CAPS_RSS:
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 8584061e1bc6..ea79e5e1f589 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2091,8 +2091,7 @@ static int ice_probe(struct pci_dev *pdev,
 
 	ice_determine_q_usage(pf);
 
-	pf->num_alloc_vsi = min_t(u16, ICE_MAX_VSI_ALLOC,
-				  hw->func_caps.guaranteed_num_vsi);
+	pf->num_alloc_vsi = hw->func_caps.guar_num_vsi;
 	if (!pf->num_alloc_vsi) {
 		err = -EIO;
 		goto err_init_pf_unroll;
diff --git a/drivers/net/ethernet/intel/ice/ice_type.h b/drivers/net/ethernet/intel/ice/ice_type.h
index 12f9432abf11..e5657be86c74 100644
--- a/drivers/net/ethernet/intel/ice/ice_type.h
+++ b/drivers/net/ethernet/intel/ice/ice_type.h
@@ -124,6 +124,8 @@ struct ice_phy_info {
 
 /* Common HW capabilities for SW use */
 struct ice_hw_common_caps {
+	u32 valid_functions;
+
 	/* TX/RX queues */
 	u16 num_rxq;		/* Number/Total RX queues */
 	u16 rxq_first_id;	/* First queue ID for RX queues */
@@ -150,7 +152,7 @@ struct ice_hw_func_caps {
 	struct ice_hw_common_caps common_cap;
 	u32 num_allocd_vfs;		/* Number of allocated VFs */
 	u32 vf_base_id;			/* Logical ID of the first VF */
-	u32 guaranteed_num_vsi;
+	u32 guar_num_vsi;
 };
 
 /* Device wide capabilities */
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (13 preceding siblings ...)
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:03   ` Bowers, AndrewX
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines Anirudh Venkataramanan
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

From: Dave Ertman <david.m.ertman@intel.com>

ice_dis_vsi() performs an rtnl_lock() if it detects a netdev that is
running on the VSI. In cases where the RTNL lock has already been
acquired, a deadlock results. Add a boolean to pass to ice_dis_vsi to
tell it if the RTNL lock is already held.

Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned up commit message]
---
 drivers/net/ethernet/intel/ice/ice_main.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index ea79e5e1f589..089b0f0b2e71 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -3137,8 +3137,9 @@ static void ice_vsi_release_all(struct ice_pf *pf)
 /**
  * ice_dis_vsi - pause a VSI
  * @vsi: the VSI being paused
+ * @locked: is the rtnl_lock already held
  */
-static void ice_dis_vsi(struct ice_vsi *vsi)
+static void ice_dis_vsi(struct ice_vsi *vsi, bool locked)
 {
 	if (test_bit(__ICE_DOWN, vsi->state))
 		return;
@@ -3147,9 +3148,13 @@ static void ice_dis_vsi(struct ice_vsi *vsi)
 
 	if (vsi->type == ICE_VSI_PF && vsi->netdev) {
 		if (netif_running(vsi->netdev)) {
-			rtnl_lock();
-			vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
-			rtnl_unlock();
+			if (!locked) {
+				rtnl_lock();
+				vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
+				rtnl_unlock();
+			} else {
+				vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
+			}
 		} else {
 			ice_vsi_close(vsi);
 		}
@@ -3188,7 +3193,7 @@ static void ice_pf_dis_all_vsi(struct ice_pf *pf)
 
 	ice_for_each_vsi(pf, v)
 		if (pf->vsi[v])
-			ice_dis_vsi(pf->vsi[v]);
+			ice_dis_vsi(pf->vsi[v], false);
 }
 
 /**
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines
  2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
                   ` (14 preceding siblings ...)
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi Anirudh Venkataramanan
@ 2018-10-26 17:41 ` Anirudh Venkataramanan
  2018-10-30 22:03   ` Bowers, AndrewX
  15 siblings, 1 reply; 33+ messages in thread
From: Anirudh Venkataramanan @ 2018-10-26 17:41 UTC (permalink / raw)
  To: intel-wired-lan

From: Lev Faerman <lev.faerman@intel.com>

Fixes bad masks that would break compilation when evaluated.

Signed-off-by: Lev Faerman <lev.faerman@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
index 602f02a0a2d1..4078070881ce 100644
--- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
@@ -1066,10 +1066,10 @@ struct ice_aqc_nvm {
 #define ICE_AQC_NVM_LAST_CMD		BIT(0)
 #define ICE_AQC_NVM_PCIR_REQ		BIT(0)	/* Used by NVM Update reply */
 #define ICE_AQC_NVM_PRESERVATION_S	1
-#define ICE_AQC_NVM_PRESERVATION_M	(3 << CSR_AQ_NVM_PRESERVATION_S)
-#define ICE_AQC_NVM_NO_PRESERVATION	(0 << CSR_AQ_NVM_PRESERVATION_S)
+#define ICE_AQC_NVM_PRESERVATION_M	(3 << ICE_AQC_NVM_PRESERVATION_S)
+#define ICE_AQC_NVM_NO_PRESERVATION	(0 << ICE_AQC_NVM_PRESERVATION_S)
 #define ICE_AQC_NVM_PRESERVE_ALL	BIT(1)
-#define ICE_AQC_NVM_PRESERVE_SELECTED	(3 << CSR_AQ_NVM_PRESERVATION_S)
+#define ICE_AQC_NVM_PRESERVE_SELECTED	(3 << ICE_AQC_NVM_PRESERVATION_S)
 #define ICE_AQC_NVM_FLASH_ONLY		BIT(7)
 	__le16 module_typeid;
 	__le16 length;
-- 
2.14.3


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild Anirudh Venkataramanan
@ 2018-10-30 21:54   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:54 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and
> start/stop queues in rebuild
> 
> Set the carrier state post rebuild by querying the link status. Also start/stop
> queues based on link status.
> 
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_main.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove Anirudh Venkataramanan
@ 2018-10-30 21:54   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:54 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress
> during remove
> 
> The remove path does not currently check to see if a reset is in progress
> before proceeding.  This can cause a resource collision resulting in various
> types of errors.
> 
> Check for reset in progress and wait for a reasonable amount of time before
> allowing the remove to progress.
> 
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice.h      | 2 ++
>  drivers/net/ethernet/intel/ice/ice_main.c | 6 ++++++
>  2 files changed, 8 insertions(+)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control Anirudh Venkataramanan
@ 2018-10-30 21:55   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:55 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue
> with flow control
> 
> From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> 
> Setting Rx or Tx pause parameter currently results in link loss on the
> interface, requiring the platform/host to be cold power cycled. Fix it.
> 
> Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
> [Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> rewrote
> commit message]
> ---
>  drivers/net/ethernet/intel/ice/ice_ethtool.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload Anirudh Venkataramanan
@ 2018-10-30 21:55   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:55 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for
> unload
> 
> From: Victor Raj <victor.raj@intel.com>
> 
> In the unload path, all VSIs are freed. Also free the related VSI contexts to
> prevent memory leaks.
> 
> Signed-off-by: Victor Raj <victor.raj@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
> [Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> rewrote
> commit message]
> ---
>  drivers/net/ethernet/intel/ice/ice_common.c |  3 +++
> drivers/net/ethernet/intel/ice/ice_switch.c | 12 ++++++++++++
> drivers/net/ethernet/intel/ice/ice_switch.h |  2 ++
>  3 files changed, 17 insertions(+)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path Anirudh Venkataramanan
@ 2018-10-30 21:56   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:56 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of
> VLANs in replay path
> 
> ice_restore_vlan and active_vlans were originally put in place to reprogram
> VLAN filters in the replay path. This is now done as part of the much broader
> VSI rebuild/replay framework. So remove both ice_restore_vlan and
> active_vlans
> 
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice.h             |  1 -
>  drivers/net/ethernet/intel/ice/ice_main.c        | 42 ++++--------------------
>  drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |  2 --
>  3 files changed, 6 insertions(+), 39 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN Anirudh Venkataramanan
@ 2018-10-30 21:56   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:56 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN
> 
> From: Md Fahad Iqbal Polash <md.fahad.iqbal.polash@intel.com>
> 
> According to the spec, whenever insert PVID field is set, the VLAN driver
> insertion mode should be set to 01b which isn't done currently.
> Fix it.
> 
> Signed-off-by: Md Fahad Iqbal Polash <md.fahad.iqbal.polash@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
> [Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned
> up commit message]
> ---
>  drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message Anirudh Venkataramanan
@ 2018-10-30 21:57   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:57 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message
> 
> Print should say "Enabling" instead of "Enaabling"
> 
> Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_lib.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove Anirudh Venkataramanan
@ 2018-10-30 21:58   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:58 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for
> remove
> 
> From: Dave Ertman <david.m.ertman@intel.com>
> 
> In the remove path, the vsi->netdev is being set to NULL before the call to
> free vectors. This is causing the netif_napi_del call to never be made.
> 
> Add a call to ice_napi_del to the same location as the calls to
> unregister_netdev and just prior to them. This will use the reverse flow as
> the register and netif_napi_add calls.
> 
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice.h      | 1 +
>  drivers/net/ethernet/intel/ice/ice_lib.c  | 1 +
> drivers/net/ethernet/intel/ice/ice_main.c | 2 +-
>  3 files changed, 3 insertions(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver Anirudh Venkataramanan
@ 2018-10-30 21:58   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:58 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver
> 
> From: Brett Creeley <brett.creeley@intel.com>
> 
> Prior to this commit the driver was running into tx_timeouts when a queue
> was stressed enough. This was happening because the HW tail and SW tail
> (NTU) were incorrectly out of sync. Consequently this was causing the HW
> head to collide with the HW tail, which to the hardware means that all
> descriptors posted for Tx have been processed.
> 
> Due to the Tx logic used in the driver SW tail and HW tail are allowed to be
> out of sync. This is done as an optimization because it allows the driver to
> write HW tail as infrequently as possible, while still updating the SW tail index
> to keep track. However, there are situations where this results in the tail
> never getting updated, resulting in Tx timeouts.
> 
> Tx HW tail write condition:
> 	if (netif_xmit_stopped(txring_txq(tx_ring) || !skb->xmit_more)
> 		writel(sw_tail, tx_ring->tail);
> 
> An issue was found in the Tx logic that was causing the aformentioned
> condition for updating HW tail to never happen, causing tx_timeouts.
> 
> In ice_xmit_frame_ring we calculate how many descriptors we need for the
> Tx transaction based on the skb the kernel hands us. This is then passed into
> ice_maybe_stop_tx along with some extra padding to determine if we have
> enough descriptors available for this transaction. If we don't then we return -
> EBUSY to the stack, otherwise we move on and eventually prepare the Tx
> descriptors accordingly in ice_tx_map and set next_to_watch. In ice_tx_map
> we make another call to ice_maybe_stop_tx with a value of
> MAX_SKB_FRAGS + 4. The key here is that this value is possibly less than the
> value we sent in the first call to ice_maybe_stop_tx in ice_xmit_frame_ring.
> Now, if the number of unused descriptors is between MAX_SKB_FRAGS + 4
> and the value used in the first call to ice_maybe_stop_tx in
> ice_xmit_frame_ring then we do not update the HW tail because of the "Tx
> HW tail write condition" above. This is because in ice_maybe_stop_tx we
> return success from ice_maybe_stop_tx instead of calling
> __ice_maybe_stop_tx and subsequently calling netif_stop_subqueue, which
> sets the __QUEUE_STATE_DEV_XOFF bit. This bit is then checked in the "Tx
> HW tail write condition" by calling netif_xmit_stopped and subsequently
> updating HW tail if the aformentioned bit is set.
> 
> In ice_clean_tx_irq, if next_to_watch is not NULL, we end up cleaning the
> descriptors that HW sets the DD bit on and we have the budget. The HW
> head will eventuallly run into the HW tail in response to the description in the
> paragraph above.
> 
> The next time through ice_xmit_frame_ring we make the initial call to
> ice_maybe_stop_tx with another skb from the stack. This time we do not
> have enough descriptors available and we return NETDEV_TX_BUSY to the
> stack and end up setting next_to_watch to NULL.
> 
> This is where we are stuck. In ice_clean_tx_irq we never clean anything
> because next_to_watch is always NULL and in ice_xmit_frame_ring we
> never update HW tail because we already return NETDEV_TX_BUSY to the
> stack and eventually we hit a tx_timeout.
> 
> This issue was fixed by making sure that the second call to
> ice_maybe_stop_tx in ice_tx_map is passed a value that is >= the value that
> was used on the initial call to ice_maybe_stop_tx in ice_xmit_frame_ring.
> This was done by adding the following defines to make the logic more clear
> and to reduce the chance of mucking this up
> again:
> 
> ICE_CACHE_LINE_BYTES		64
> ICE_DESCS_PER_CACHE_LINE	(ICE_CACHE_LINE_BYTES / \
> 				 sizeof(struct ice_tx_desc))
> ICE_DESCS_FOR_CTX_DESC		1
> ICE_DESCS_FOR_SKB_DATA_PTR	1
> 
> The ICE_CACHE_LINE_BYTES being 64 is an assumption being made so we
> don't have to figure this out on every pass through the Tx path. Instead I
> added a sanity check in ice_probe to verify cache line size and print a
> message if it's not 64 Bytes. This will make it easier to file issues if they are
> seen when the cache line size is not 64 Bytes when reading from the
> GLPCI_CNF2 register.
> 
> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
>  drivers/net/ethernet/intel/ice/ice_main.c       | 18 ++++++++++++++++++
>  drivers/net/ethernet/intel/ice/ice_txrx.c       |  9 +++++----
>  drivers/net/ethernet/intel/ice/ice_txrx.h       | 17 +++++++++++++++--
>  4 files changed, 40 insertions(+), 6 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue
  2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue Anirudh Venkataramanan
@ 2018-10-30 21:59   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 21:59 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to
> netdev_tx_sent_queue
> 
> From: Brett Creeley <brett.creeley@intel.com>
> 
> Currently if the driver does a TSO offload the bytecount sent to
> netdev_tx_sent_queue will be incorrect. This is because in ice_tso we
> overwrite the initial value that we set in ice_tx_map. This creates a mismatch
> between the Tx and Tx clean flow. In the Tx clean flow we calculate the
> bytecount (called total_bytes) as we clean the descriptors so the value used
> in the Tx clean path is correct. Fix this by using += in ice_tso instead of =. This
> fixes the mismatch in bytecount mentioned above.
> 
> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout Anirudh Venkataramanan
@ 2018-10-30 22:01   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:01 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in
> ice_tx_timeout
> 
> From: Brett Creeley <brett.creeley@intel.com>
> 
> Currently the debug print in ice_tx_timeout is printing useless and duplicate
> values. First, head is being assigned to tx_ring->next_to_clean and we are
> printing both of those values, but naming them HWB and NTC respectively.
> Also, reading tail always returns 0 so remove that as well.
> 
> Instead of assigning head the SW head (NTC) read the actual head register
> and change the debug print to note that this is HW_HEAD. Also reduce thei
> scope of a couple variables.
> 
> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
> [Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned
> up commit message]
> ---
>  drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  3 +++
>  drivers/net/ethernet/intel/ice/ice_main.c       | 15 +++++++++------
>  2 files changed, 12 insertions(+), 6 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings Anirudh Venkataramanan
@ 2018-10-30 22:01   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:01 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when
> stopping rings
> 
> From: Tony Nguyen <anthony.l.nguyen@intel.com>
> 
> There is a gap in time between a VF reset, which sets the q_vector to NULL,
> and the VF requesting mapping of the q_vectors. If
> ice_vsi_stop_tx_rings() is called during this time, a NULL pointer dereference
> is encountered. Add a check in ice_vsi_stop_tx_rings() to ensure the
> q_vector is set to avoid this situation from occurring.
> 
> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_lib.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI Anirudh Venkataramanan
@ 2018-10-30 22:01   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:01 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before
> releasing VSI
> 
> Before releasing the VSI, remove the VSI scheduler node. If not, the node is
> left in the scheduler tree and, on subsequent load, the scheduler tree
> contains the node so it does not set it in vsi_ctx.
> This, later, causes the node to not be found in ice_sched_get_free_qparent
> which leads to a "Failed to set LAN Tx queue context, error: -1".
> 
> To remove the scheduler node, this patch introduces ice_rm_vsi_lan_cfg and
> related helpers.
> 
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_lib.c   |   1 +
>  drivers/net/ethernet/intel/ice/ice_sched.c | 108
> ++++++++++++++++++++++++++++-
>  drivers/net/ethernet/intel/ice/ice_sched.h |   2 +
>  3 files changed, 110 insertions(+), 1 deletion(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it Anirudh Venkataramanan
@ 2018-10-30 22:02   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:02 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs
> per function and use it
> 
> Currently we are setting the guar_num_vsi to equal to ICE_MAX_VSI which is
> the device limit of 768. This is incorrect and could have unintended
> consequences. To fix this use the valid_function's 8-bit bitmap returned from
> discovering device capabilities to determine the guar_num_vsi per function.
> guar_num_vsi value is then passed on to
> pf->num_alloc_vsi.
> 
> Also shorten instances of "guaranteed" to "guar"
> 
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice.h            |  1 -
>  drivers/net/ethernet/intel/ice/ice_adminq_cmd.h |  1 +
>  drivers/net/ethernet/intel/ice/ice_common.c     | 31
> +++++++++++++++++++++++--
>  drivers/net/ethernet/intel/ice/ice_main.c       |  3 +--
>  drivers/net/ethernet/intel/ice/ice_type.h       |  4 +++-
>  5 files changed, 34 insertions(+), 6 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi Anirudh Venkataramanan
@ 2018-10-30 22:03   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:03 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in
> ice_dis_vsi
> 
> From: Dave Ertman <david.m.ertman@intel.com>
> 
> ice_dis_vsi() performs an rtnl_lock() if it detects a netdev that is running on
> the VSI. In cases where the RTNL lock has already been acquired, a deadlock
> results. Add a boolean to pass to ice_dis_vsi to tell it if the RTNL lock is
> already held.
> 
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
> [Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned
> up commit message]
> ---
>  drivers/net/ethernet/intel/ice/ice_main.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines
  2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines Anirudh Venkataramanan
@ 2018-10-30 22:03   ` Bowers, AndrewX
  0 siblings, 0 replies; 33+ messages in thread
From: Bowers, AndrewX @ 2018-10-30 22:03 UTC (permalink / raw)
  To: intel-wired-lan

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Friday, October 26, 2018 10:41 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines
> 
> From: Lev Faerman <lev.faerman@intel.com>
> 
> Fixes bad masks that would break compilation when evaluated.
> 
> Signed-off-by: Lev Faerman <lev.faerman@intel.com>
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>



^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2018-10-30 22:03 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-26 17:40 [Intel-wired-lan] [PATCH S8 00/16] Bug fixes for ice, set 1/2 Anirudh Venkataramanan
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 01/16] ice: Set carrier state and start/stop queues in rebuild Anirudh Venkataramanan
2018-10-30 21:54   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 02/16] ice: Check for reset in progress during remove Anirudh Venkataramanan
2018-10-30 21:54   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 03/16] ice: Fix dead device link issue with flow control Anirudh Venkataramanan
2018-10-30 21:55   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 04/16] ice: Free VSI contexts during for unload Anirudh Venkataramanan
2018-10-30 21:55   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 05/16] ice: Remove duplicate addition of VLANs in replay path Anirudh Venkataramanan
2018-10-30 21:56   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 06/16] ice: Fix flags for port VLAN Anirudh Venkataramanan
2018-10-30 21:56   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 07/16] ice: Fix typo in error message Anirudh Venkataramanan
2018-10-30 21:57   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 08/16] ice: Fix napi delete calls for remove Anirudh Venkataramanan
2018-10-30 21:58   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 09/16] ice: Fix tx_timeout in PF driver Anirudh Venkataramanan
2018-10-30 21:58   ` Bowers, AndrewX
2018-10-26 17:40 ` [Intel-wired-lan] [PATCH S8 10/16] ice: Fix the bytecount sent to netdev_tx_sent_queue Anirudh Venkataramanan
2018-10-30 21:59   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 11/16] ice: Fix debug print in ice_tx_timeout Anirudh Venkataramanan
2018-10-30 22:01   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 12/16] ice: Check for q_vector when stopping rings Anirudh Venkataramanan
2018-10-30 22:01   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 13/16] ice: Remove node before releasing VSI Anirudh Venkataramanan
2018-10-30 22:01   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 14/16] ice: Calculate guaranteed VSIs per function and use it Anirudh Venkataramanan
2018-10-30 22:02   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 15/16] ice: Avoid nested RTNL locking in ice_dis_vsi Anirudh Venkataramanan
2018-10-30 22:03   ` Bowers, AndrewX
2018-10-26 17:41 ` [Intel-wired-lan] [PATCH S8 16/16] ice: Fix NVM mask defines Anirudh Venkataramanan
2018-10-30 22:03   ` Bowers, AndrewX

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.