net/ice/base: fix issues around move nodes
authorQi Zhang <qi.z.zhang@intel.com>
Wed, 26 Aug 2020 05:39:35 +0000 (13:39 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:09 +0000 (18:55 +0200)
1. Fixed the max children check when moving the last(8th) children. This
   allows the parent node to hold 8 children instead of 7.
2. Check whether the VSI is already part of the given aggregator subtree
   before moving it.

Fixes: 29a0c11489ef ("net/ice/base: clean code")
Cc: stable@dpdk.org
Signed-off-by: Victor Raj <victor.raj@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/base/ice_sched.c

index cf9a6a7..edd90ae 100644 (file)
@@ -2267,7 +2267,7 @@ ice_sched_move_nodes(struct ice_port_info *pi, struct ice_sched_node *parent,
                return ICE_ERR_PARAM;
 
        /* Does parent have enough space */
-       if (parent->num_children + num_items >=
+       if (parent->num_children + num_items >
            hw->max_children[parent->tx_sched_layer])
                return ICE_ERR_AQ_FULL;
 
@@ -2335,6 +2335,10 @@ ice_sched_move_vsi_to_agg(struct ice_port_info *pi, u16 vsi_handle, u32 agg_id,
        if (!vsi_node)
                return ICE_ERR_DOES_NOT_EXIST;
 
+       /* Is this VSI already part of given aggregator? */
+       if (ice_sched_find_node_in_subtree(pi->hw, agg_node, vsi_node))
+               return ICE_SUCCESS;
+
        aggl = ice_sched_get_agg_layer(pi->hw);
        vsil = ice_sched_get_vsi_layer(pi->hw);