Message ID | 20250513105529.241745-3-michal.kubiak@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | Fix XDP loading on machines with many CPUs | expand |
On Tue, May 13, 2025 at 12:55:28PM +0200, Michal Kubiak wrote: > The current implementation of the Tx scheduler tree attempts > to create nodes for all Tx queues, ignoring the fact that some > queues may already exist in the tree. For example, if the VSI > already has 128 Tx queues and the user requests for 16 new queues, > the Tx scheduler will compute the tree for 272 queues (128 existing > queues + 144 new queues), instead of 144 queues (128 existing queues > and 16 new queues). > Fix that by modifying the node count calculation algorithm to skip > the queues that already exist in the tree. > > Fixes: 5513b920a4f7 ("ice: Update Tx scheduler tree for VSI multi-Tx queue support") > Reviewed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> > Signed-off-by: Michal Kubiak <michal.kubiak@intel.com> Reviewed-by: Simon Horman <horms@kernel.org>
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Michal Kubiak > Sent: Tuesday, May 13, 2025 4:25 PM > To: intel-wired-lan@lists.osuosl.org > Cc: Fijalkowski, Maciej <maciej.fijalkowski@intel.com>; Lobakin, Aleksander > <aleksander.lobakin@intel.com>; Kitszel, Przemyslaw > <przemyslaw.kitszel@intel.com>; dawid.osuchowski@linux.intel.com; Keller, > Jacob E <jacob.e.keller@intel.com>; Brandeburg, Jesse > <jbrandeburg@cloudflare.com>; netdev@vger.kernel.org; Kubiak, Michal > <michal.kubiak@intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-net v3 2/3] ice: create new Tx scheduler > nodes for new queues only > > The current implementation of the Tx scheduler tree attempts to create nodes > for all Tx queues, ignoring the fact that some queues may already exist in the > tree. For example, if the VSI already has 128 Tx queues and the user requests > for 16 new queues, the Tx scheduler will compute the tree for 272 queues > (128 existing queues + 144 new queues), instead of 144 queues (128 existing > queues and 16 new queues). > Fix that by modifying the node count calculation algorithm to skip the queues > that already exist in the tree. > > Fixes: 5513b920a4f7 ("ice: Update Tx scheduler tree for VSI multi-Tx queue > support") > Reviewed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> > Signed-off-by: Michal Kubiak <michal.kubiak@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_sched.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > Tested-by: Saritha Sanigani <sarithax.sanigani@intel.com> (A Contingent Worker at Intel)
diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c index 6ca13c5dcb14..6524875b34d3 100644 --- a/drivers/net/ethernet/intel/ice/ice_sched.c +++ b/drivers/net/ethernet/intel/ice/ice_sched.c @@ -1604,16 +1604,16 @@ ice_sched_get_agg_node(struct ice_port_info *pi, struct ice_sched_node *tc_node, /** * ice_sched_calc_vsi_child_nodes - calculate number of VSI child nodes * @hw: pointer to the HW struct - * @num_qs: number of queues + * @num_new_qs: number of new queues that will be added to the tree * @num_nodes: num nodes array * * This function calculates the number of VSI child nodes based on the * number of queues. */ static void -ice_sched_calc_vsi_child_nodes(struct ice_hw *hw, u16 num_qs, u16 *num_nodes) +ice_sched_calc_vsi_child_nodes(struct ice_hw *hw, u16 num_new_qs, u16 *num_nodes) { - u16 num = num_qs; + u16 num = num_new_qs; u8 i, qgl, vsil; qgl = ice_sched_get_qgrp_layer(hw); @@ -1863,8 +1863,9 @@ ice_sched_update_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle, return status; } - if (new_numqs) - ice_sched_calc_vsi_child_nodes(hw, new_numqs, new_num_nodes); + ice_sched_calc_vsi_child_nodes(hw, new_numqs - prev_numqs, + new_num_nodes); + /* Keep the max number of queue configuration all the time. Update the * tree only if number of queues > previous number of queues. This may * leave some extra nodes in the tree if number of queues < previous