[8/9] net/ice/base: updated the add scheduler node counter

Message ID 20210108043508.301227-9-qi.z.zhang@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Qi Zhang
Headers
Series ice base update batch 2 |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Qi Zhang Jan. 8, 2021, 4:35 a.m. UTC
  The number of nodes added counter was updated incorrectly. This issue
was exposed when the driver tried to add more than 128 queues per TC.

Fix added to update the counter correctly.

Fixes: 93e84b1bfc92 ("net/ice/base: add basic Tx scheduler")
Cc: stable@dpdk.org

Signed-off-by: Victor Raj <victor.raj@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ice/base/ice_sched.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
  

Patch

diff --git a/drivers/net/ice/base/ice_sched.c b/drivers/net/ice/base/ice_sched.c
index 53d76d17ee..7d4721e60c 100644
--- a/drivers/net/ice/base/ice_sched.c
+++ b/drivers/net/ice/base/ice_sched.c
@@ -1040,7 +1040,15 @@  ice_sched_add_nodes_to_layer(struct ice_port_info *pi,
 							 layer,	new_num_nodes,
 							 first_teid_ptr,
 							 &num_added);
-		*num_nodes_added += num_added;
+		if (status == ICE_SUCCESS)
+			*num_nodes_added += num_added;
+		/* added more nodes than requested ? */
+		if (*num_nodes_added > num_nodes) {
+			ice_debug(pi->hw, ICE_DBG_SCHED, "added extra nodes %d %d\n", num_nodes,
+				  *num_nodes_added);
+			status = ICE_ERR_CFG;
+			break;
+		}
 		/* break if all the nodes are added successfully */
 		if (status == ICE_SUCCESS && (*num_nodes_added == num_nodes))
 			break;
@@ -1063,7 +1071,7 @@  ice_sched_add_nodes_to_layer(struct ice_port_info *pi,
 			if (num_added)
 				first_teid_ptr = &temp;
 
-			new_num_nodes = num_nodes - num_added;
+			new_num_nodes = num_nodes - *num_nodes_added;
 		}
 	}
 	return status;