[PATCH 6/9] net/ice/base: optimize subtree searches
Bruce Richardson
bruce.richardson at intel.com
Fri Oct 11 18:44:56 CEST 2024
In a number of places throughout the driver code, we want to confirm
that a scheduler node is indeed a child of another node. Currently, this
is confirmed by searching down the tree from the base until the desired
node is hit, a search which may hit many irrelevant tree nodes when
recursing down wrong branches. By switching the direction of search, to
check upwards from the node to the parent, we can avoid any incorrect
paths, and so speed up processing.
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/ice/base/ice_sched.c | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ice/base/ice_sched.c b/drivers/net/ice/base/ice_sched.c
index 45934f9152..4c5c19daf3 100644
--- a/drivers/net/ice/base/ice_sched.c
+++ b/drivers/net/ice/base/ice_sched.c
@@ -1464,25 +1464,16 @@ void ice_sched_get_psm_clk_freq(struct ice_hw *hw)
* subtree or not
*/
bool
-ice_sched_find_node_in_subtree(struct ice_hw *hw, struct ice_sched_node *base,
+ice_sched_find_node_in_subtree(struct ice_hw __ALWAYS_UNUSED *hw,
+ struct ice_sched_node *base,
struct ice_sched_node *node)
{
- u8 i;
-
- for (i = 0; i < base->num_children; i++) {
- struct ice_sched_node *child = base->children[i];
-
- if (node == child)
- return true;
-
- if (child->tx_sched_layer > node->tx_sched_layer)
- return false;
-
- /* this recursion is intentional, and wouldn't
- * go more than 8 calls
- */
- if (ice_sched_find_node_in_subtree(hw, child, node))
+ if (base == node)
+ return true;
+ while (node->tx_sched_layer != 0 && node->parent != NULL) {
+ if (node->parent == base)
return true;
+ node = node->parent;
}
return false;
}
--
2.43.0
More information about the dev
mailing list