Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dca0d122 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

perf callchain: Check return value of append_chain_children()



Now it can check the error case, so check and pass it to the caller.

Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1455631723-17345-7-git-send-email-namhyung@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f2bb4c5a
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -586,7 +586,7 @@ append_chain(struct callchain_node *root,
	     struct callchain_cursor *cursor,
	     u64 period);

static void
static int
append_chain_children(struct callchain_node *root,
		      struct callchain_cursor *cursor,
		      u64 period)
@@ -598,7 +598,7 @@ append_chain_children(struct callchain_node *root,

	node = callchain_cursor_current(cursor);
	if (!node)
		return;
		return -1;

	/* lookup in childrens */
	while (*p) {
@@ -611,6 +611,8 @@ append_chain_children(struct callchain_node *root,
		ret = append_chain(rnode, cursor, period);
		if (ret == MATCH_EQ)
			goto inc_children_hit;
		if (ret == MATCH_ERROR)
			return -1;

		if (ret == MATCH_LT)
			p = &parent->rb_left;
@@ -620,7 +622,7 @@ append_chain_children(struct callchain_node *root,
	/* nothing in children, add to the current node */
	rnode = add_child(root, cursor, period);
	if (rnode == NULL)
		return;
		return -1;

	rb_link_node(&rnode->rb_node_in, parent, p);
	rb_insert_color(&rnode->rb_node_in, &root->rb_root_in);
@@ -628,6 +630,7 @@ append_chain_children(struct callchain_node *root,
inc_children_hit:
	root->children_hit += period;
	root->children_count++;
	return 0;
}

static enum match_result
@@ -688,7 +691,8 @@ append_chain(struct callchain_node *root,
	}

	/* We match the node and still have a part remaining */
	append_chain_children(root, cursor, period);
	if (append_chain_children(root, cursor, period) < 0)
		return MATCH_ERROR;

	return MATCH_EQ;
}
@@ -702,7 +706,8 @@ int callchain_append(struct callchain_root *root,

	callchain_cursor_commit(cursor);

	append_chain_children(&root->node, cursor, period);
	if (append_chain_children(&root->node, cursor, period) < 0)
		return -1;

	if (cursor->nr > root->max_depth)
		root->max_depth = cursor->nr;
@@ -730,7 +735,8 @@ merge_chain_branch(struct callchain_cursor *cursor,

	if (src->hit) {
		callchain_cursor_commit(cursor);
		append_chain_children(dst, cursor, src->hit);
		if (append_chain_children(dst, cursor, src->hit) < 0)
			return -1;
	}

	n = rb_first(&src->rb_root_in);