|
Thomas Bogendoerfer |
57545a |
From: Michal Jaron <michalx.jaron@intel.com>
|
|
Thomas Bogendoerfer |
57545a |
Date: Mon, 24 Oct 2022 10:19:42 +0200
|
|
Thomas Bogendoerfer |
57545a |
Subject: i40e: Fix not setting default xps_cpus after reset
|
|
Thomas Bogendoerfer |
57545a |
Patch-mainline: v6.1
|
|
Thomas Bogendoerfer |
57545a |
Git-commit: 82e0572b23029b380464fa9fdc125db9c1506d0a
|
|
Thomas Bogendoerfer |
57545a |
References: git-fixes
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
During tx rings configuration default XPS queue config is set and
|
|
Thomas Bogendoerfer |
57545a |
__I40E_TX_XPS_INIT_DONE is locked. __I40E_TX_XPS_INIT_DONE state is
|
|
Thomas Bogendoerfer |
57545a |
cleared and set again with default mapping only during queues build,
|
|
Thomas Bogendoerfer |
57545a |
it means after first setup or reset with queues rebuild. (i.e.
|
|
Thomas Bogendoerfer |
57545a |
ethtool -L <interface> combined <number>) After other resets (i.e.
|
|
Thomas Bogendoerfer |
57545a |
ethtool -t <interface>) XPS_INIT_DONE is not cleared and those default
|
|
Thomas Bogendoerfer |
57545a |
maps cannot be set again. It results in cleared xps_cpus mapping
|
|
Thomas Bogendoerfer |
57545a |
until queues are not rebuild or mapping is not set by user.
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
Add clearing __I40E_TX_XPS_INIT_DONE state during reset to let
|
|
Thomas Bogendoerfer |
57545a |
the driver set xps_cpus to defaults again after it was cleared.
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
Fixes: 6f853d4f8e93 ("i40e: allow XPS with QoS enabled")
|
|
Thomas Bogendoerfer |
57545a |
Signed-off-by: Michal Jaron <michalx.jaron@intel.com>
|
|
Thomas Bogendoerfer |
57545a |
Signed-off-by: Kamil Maziarz <kamil.maziarz@intel.com>
|
|
Thomas Bogendoerfer |
57545a |
Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
|
|
Thomas Bogendoerfer |
57545a |
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
|
|
Thomas Bogendoerfer |
57545a |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
57545a |
---
|
|
Thomas Bogendoerfer |
57545a |
drivers/net/ethernet/intel/i40e/i40e_main.c | 19 ++++++++++++++++++-
|
|
Thomas Bogendoerfer |
57545a |
1 file changed, 18 insertions(+), 1 deletion(-)
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
|
|
Thomas Bogendoerfer |
57545a |
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
|
|
Thomas Bogendoerfer |
57545a |
@@ -10495,6 +10495,21 @@ static int i40e_rebuild_channels(struct
|
|
Thomas Bogendoerfer |
57545a |
}
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
/**
|
|
Thomas Bogendoerfer |
57545a |
+ * i40e_clean_xps_state - clean xps state for every tx_ring
|
|
Thomas Bogendoerfer |
57545a |
+ * @vsi: ptr to the VSI
|
|
Thomas Bogendoerfer |
57545a |
+ **/
|
|
Thomas Bogendoerfer |
57545a |
+static void i40e_clean_xps_state(struct i40e_vsi *vsi)
|
|
Thomas Bogendoerfer |
57545a |
+{
|
|
Thomas Bogendoerfer |
57545a |
+ int i;
|
|
Thomas Bogendoerfer |
57545a |
+
|
|
Thomas Bogendoerfer |
57545a |
+ if (vsi->tx_rings)
|
|
Thomas Bogendoerfer |
57545a |
+ for (i = 0; i < vsi->num_queue_pairs; i++)
|
|
Thomas Bogendoerfer |
57545a |
+ if (vsi->tx_rings[i])
|
|
Thomas Bogendoerfer |
57545a |
+ clear_bit(__I40E_TX_XPS_INIT_DONE,
|
|
Thomas Bogendoerfer |
57545a |
+ vsi->tx_rings[i]->state);
|
|
Thomas Bogendoerfer |
57545a |
+}
|
|
Thomas Bogendoerfer |
57545a |
+
|
|
Thomas Bogendoerfer |
57545a |
+/**
|
|
Thomas Bogendoerfer |
57545a |
* i40e_prep_for_reset - prep for the core to reset
|
|
Thomas Bogendoerfer |
57545a |
* @pf: board private structure
|
|
Thomas Bogendoerfer |
57545a |
*
|
|
Thomas Bogendoerfer |
57545a |
@@ -10518,8 +10533,10 @@ static void i40e_prep_for_reset(struct i
|
|
Thomas Bogendoerfer |
57545a |
i40e_pf_quiesce_all_vsi(pf);
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
for (v = 0; v < pf->num_alloc_vsi; v++) {
|
|
Thomas Bogendoerfer |
57545a |
- if (pf->vsi[v])
|
|
Thomas Bogendoerfer |
57545a |
+ if (pf->vsi[v]) {
|
|
Thomas Bogendoerfer |
57545a |
+ i40e_clean_xps_state(pf->vsi[v]);
|
|
Thomas Bogendoerfer |
57545a |
pf->vsi[v]->seid = 0;
|
|
Thomas Bogendoerfer |
57545a |
+ }
|
|
Thomas Bogendoerfer |
57545a |
}
|
|
Thomas Bogendoerfer |
57545a |
|
|
Thomas Bogendoerfer |
57545a |
i40e_shutdown_adminq(&pf->hw);
|