diff options
author | Jiri Pirko <jiri@mellanox.com> | 2019-02-14 15:39:07 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-14 12:41:54 -0500 |
commit | fa8ba2cba7f9c75b84f82d174658d959d25d4561 (patch) | |
tree | 8518fc3aa981b96dad1c2b4a2060da0075819820 | |
parent | e0c6d1d8591ffae75e1bcfd36fa9d411c29f9ef3 (diff) |
lib: objagg: fix handling of object with 0 users when assembling hints
It is possible that there might be an originally parent object with 0
direct users that is in hints no longer considered as parent. Then the
weight of this object is 0 and current code ignores him. That's why the
total amount of hint objects might be lower than for the original
objagg and WARN_ON is hit. Fix this be considering 0 weight valid.
Fixes: 9069a3817d82 ("lib: objagg: implement optimization hints assembly and use hints for object creation")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | lib/objagg.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/objagg.c b/lib/objagg.c index d552ec9c60ed..576be22e86de 100644 --- a/lib/objagg.c +++ b/lib/objagg.c @@ -744,8 +744,6 @@ static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph, * that this node can represent with delta. */ - if (node->crossed_out) - return 0; for (j = 0; j < graph->nodes_count; j++) { if (!objagg_tmp_graph_is_edge(graph, index, j)) continue; @@ -759,14 +757,18 @@ static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph, static int objagg_tmp_graph_node_max_weight(struct objagg_tmp_graph *graph) { + struct objagg_tmp_node *node; unsigned int max_weight = 0; unsigned int weight; int max_index = -1; int i; for (i = 0; i < graph->nodes_count; i++) { + node = &graph->nodes[i]; + if (node->crossed_out) + continue; weight = objagg_tmp_graph_node_weight(graph, i); - if (weight > max_weight) { + if (weight >= max_weight) { max_weight = weight; max_index = i; } |