When adding a new scheduler node, the parameters for leaf nodes and non-leaf nodes are different, and which parameter checks are done is determined by checking the node level i.e. if it's the lowest (leaf) node level or not. However, if the node level itself is incorrectly specified, the error messages got can be confusing since the user may add a leaf node using e.g. the testpmd command to explicitly add a leaf node, yet get error messages only relevant to non-leaf nodes due to an incorrect level parameter.
We can avoid these confusing errors by doing a check that the level matches "parent->level + 1" before doing a more detailed parameter check. Signed-off-by: Bruce Richardson <bruce.richard...@intel.com> --- drivers/net/ice/ice_tm.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/net/ice/ice_tm.c b/drivers/net/ice/ice_tm.c index 3dcd091c38..e05ad8a8e7 100644 --- a/drivers/net/ice/ice_tm.c +++ b/drivers/net/ice/ice_tm.c @@ -426,6 +426,13 @@ ice_tm_node_add(struct rte_eth_dev *dev, uint32_t node_id, if (level_id == RTE_TM_NODE_LEVEL_ID_ANY && parent_node != NULL) level_id = parent_node->level + 1; + /* check level */ + if (parent_node != NULL && level_id != parent_node->level + 1) { + error->type = RTE_TM_ERROR_TYPE_NODE_PARAMS; + error->message = "Wrong level"; + return -EINVAL; + } + ret = ice_node_param_check(node_id, priority, weight, params, level_id == ice_get_leaf_level(hw), error); if (ret) @@ -493,12 +500,6 @@ ice_tm_node_add(struct rte_eth_dev *dev, uint32_t node_id, error->message = "parent is not valid"; return -EINVAL; } - /* check level */ - if (level_id != parent_node->level + 1) { - error->type = RTE_TM_ERROR_TYPE_NODE_PARAMS; - error->message = "Wrong level"; - return -EINVAL; - } /* check the max children allowed at this level */ if (parent_node->reference_count >= hw->max_children[parent_node->level]) { -- 2.43.0