]> git.droids-corp.org - dpdk.git/commitdiff
net/ice/base: update add scheduler node counter
authorQi Zhang <qi.z.zhang@intel.com>
Fri, 8 Jan 2021 04:22:49 +0000 (12:22 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Jan 2021 18:03:08 +0000 (19:03 +0100)
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

index 53d76d17eeff1147535334dc90091a5f4722acac..7d4721e60cf5564e716267c43c2cd8d067730db9 100644 (file)
@@ -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;