diff options
Diffstat (limited to 'temp-6.1/iavf-fix-tc-config-comparison-with-existing-adapter-.patch')
-rw-r--r-- | temp-6.1/iavf-fix-tc-config-comparison-with-existing-adapter-.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/temp-6.1/iavf-fix-tc-config-comparison-with-existing-adapter-.patch b/temp-6.1/iavf-fix-tc-config-comparison-with-existing-adapter-.patch new file mode 100644 index 0000000000..407484b773 --- /dev/null +++ b/temp-6.1/iavf-fix-tc-config-comparison-with-existing-adapter-.patch @@ -0,0 +1,76 @@ +From c9d6f58b6ec985dd7f6ea2e3fdd3480f635ff651 Mon Sep 17 00:00:00 2001 +From: Sasha Levin <sashal@kernel.org> +Date: Tue, 23 Apr 2024 11:27:19 -0700 +Subject: iavf: Fix TC config comparison with existing adapter TC config + +From: Sudheer Mogilappagari <sudheer.mogilappagari@intel.com> + +[ Upstream commit 54976cf58d6168b8d15cebb395069f23b2f34b31 ] + +Same number of TCs doesn't imply that underlying TC configs are +same. The config could be different due to difference in number +of queues in each TC. Add utility function to determine if TC +configs are same. + +Fixes: d5b33d024496 ("i40evf: add ndo_setup_tc callback to i40evf") +Signed-off-by: Sudheer Mogilappagari <sudheer.mogilappagari@intel.com> +Tested-by: Mineri Bhange <minerix.bhange@intel.com> (A Contingent Worker at Intel) +Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> +Link: https://lore.kernel.org/r/20240423182723.740401-4-anthony.l.nguyen@intel.com +Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Signed-off-by: Sasha Levin <sashal@kernel.org> +--- + drivers/net/ethernet/intel/iavf/iavf_main.c | 30 ++++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c +index b9c4b311cd625..53b9fe35d8035 100644 +--- a/drivers/net/ethernet/intel/iavf/iavf_main.c ++++ b/drivers/net/ethernet/intel/iavf/iavf_main.c +@@ -3631,6 +3631,34 @@ static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) + spin_unlock_bh(&adapter->cloud_filter_list_lock); + } + ++/** ++ * iavf_is_tc_config_same - Compare the mqprio TC config with the ++ * TC config already configured on this adapter. ++ * @adapter: board private structure ++ * @mqprio_qopt: TC config received from kernel. ++ * ++ * This function compares the TC config received from the kernel ++ * with the config already configured on the adapter. ++ * ++ * Return: True if configuration is same, false otherwise. ++ **/ ++static bool iavf_is_tc_config_same(struct iavf_adapter *adapter, ++ struct tc_mqprio_qopt *mqprio_qopt) ++{ ++ struct virtchnl_channel_info *ch = &adapter->ch_config.ch_info[0]; ++ int i; ++ ++ if (adapter->num_tc != mqprio_qopt->num_tc) ++ return false; ++ ++ for (i = 0; i < adapter->num_tc; i++) { ++ if (ch[i].count != mqprio_qopt->count[i] || ++ ch[i].offset != mqprio_qopt->offset[i]) ++ return false; ++ } ++ return true; ++} ++ + /** + * __iavf_setup_tc - configure multiple traffic classes + * @netdev: network interface device structure +@@ -3688,7 +3716,7 @@ static int __iavf_setup_tc(struct net_device *netdev, void *type_data) + if (ret) + return ret; + /* Return if same TC config is requested */ +- if (adapter->num_tc == num_tc) ++ if (iavf_is_tc_config_same(adapter, &mqprio_qopt->qopt)) + return 0; + adapter->num_tc = num_tc; + +-- +2.43.0 + |