Commit fa8ba2cb authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

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: 9069a381 ("lib: objagg: implement optimization hints assembly and use hints for object creation")
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Reviewed-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e0c6d1d8
...@@ -744,8 +744,6 @@ static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph, ...@@ -744,8 +744,6 @@ static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph,
* that this node can represent with delta. * that this node can represent with delta.
*/ */
if (node->crossed_out)
return 0;
for (j = 0; j < graph->nodes_count; j++) { for (j = 0; j < graph->nodes_count; j++) {
if (!objagg_tmp_graph_is_edge(graph, index, j)) if (!objagg_tmp_graph_is_edge(graph, index, j))
continue; continue;
...@@ -759,14 +757,18 @@ static unsigned int objagg_tmp_graph_node_weight(struct objagg_tmp_graph *graph, ...@@ -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) 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 max_weight = 0;
unsigned int weight; unsigned int weight;
int max_index = -1; int max_index = -1;
int i; int i;
for (i = 0; i < graph->nodes_count; 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); weight = objagg_tmp_graph_node_weight(graph, i);
if (weight > max_weight) { if (weight >= max_weight) {
max_weight = weight; max_weight = weight;
max_index = i; max_index = i;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment