|
@@ -227,10 +227,14 @@ static void callchain_node__init_have_children_rb_tree(struct callchain_node *no
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void callchain_node__init_have_children(struct callchain_node *node)
|
|
|
+static void callchain_node__init_have_children(struct callchain_node *node,
|
|
|
+ bool has_sibling)
|
|
|
{
|
|
|
struct callchain_list *chain;
|
|
|
|
|
|
+ chain = list_entry(node->val.next, struct callchain_list, list);
|
|
|
+ chain->ms.has_children = has_sibling;
|
|
|
+
|
|
|
if (!list_empty(&node->val)) {
|
|
|
chain = list_entry(node->val.prev, struct callchain_list, list);
|
|
|
chain->ms.has_children = !RB_EMPTY_ROOT(&node->rb_root);
|
|
@@ -241,11 +245,12 @@ static void callchain_node__init_have_children(struct callchain_node *node)
|
|
|
|
|
|
static void callchain__init_have_children(struct rb_root *root)
|
|
|
{
|
|
|
- struct rb_node *nd;
|
|
|
+ struct rb_node *nd = rb_first(root);
|
|
|
+ bool has_sibling = nd && rb_next(nd);
|
|
|
|
|
|
for (nd = rb_first(root); nd; nd = rb_next(nd)) {
|
|
|
struct callchain_node *node = rb_entry(nd, struct callchain_node, rb_node);
|
|
|
- callchain_node__init_have_children(node);
|
|
|
+ callchain_node__init_have_children(node, has_sibling);
|
|
|
}
|
|
|
}
|
|
|
|