| From 1c2fb94352c41733ebe7e278af75e30ae8dc2cb2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 9 Sep 2021 04:38:03 +0900 |
| Subject: tracing/boot: Fix to loop on only subkeys |
| |
| From: Masami Hiramatsu <mhiramat@kernel.org> |
| |
| [ Upstream commit cfd799837dbc48499abb05d1891b3d9992354d3a ] |
| |
| Since the commit e5efaeb8a8f5 ("bootconfig: Support mixing |
| a value and subkeys under a key") allows to co-exist a value |
| node and key nodes under a node, xbc_node_for_each_child() |
| is not only returning key node but also a value node. |
| In the boot-time tracing using xbc_node_for_each_child() to |
| iterate the events, groups and instances, but those must be |
| key nodes. Thus it must use xbc_node_for_each_subkey(). |
| |
| Link: https://lkml.kernel.org/r/163112988361.74896.2267026262061819145.stgit@devnote2 |
| |
| Fixes: e5efaeb8a8f5 ("bootconfig: Support mixing a value and subkeys under a key") |
| Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/trace/trace_boot.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/kernel/trace/trace_boot.c b/kernel/trace/trace_boot.c |
| index d713714cba67..4bd8f94a56c6 100644 |
| --- a/kernel/trace/trace_boot.c |
| +++ b/kernel/trace/trace_boot.c |
| @@ -235,14 +235,14 @@ trace_boot_init_events(struct trace_array *tr, struct xbc_node *node) |
| if (!node) |
| return; |
| /* per-event key starts with "event.GROUP.EVENT" */ |
| - xbc_node_for_each_child(node, gnode) { |
| + xbc_node_for_each_subkey(node, gnode) { |
| data = xbc_node_get_data(gnode); |
| if (!strcmp(data, "enable")) { |
| enable_all = true; |
| continue; |
| } |
| enable = false; |
| - xbc_node_for_each_child(gnode, enode) { |
| + xbc_node_for_each_subkey(gnode, enode) { |
| data = xbc_node_get_data(enode); |
| if (!strcmp(data, "enable")) { |
| enable = true; |
| @@ -338,7 +338,7 @@ trace_boot_init_instances(struct xbc_node *node) |
| if (!node) |
| return; |
| |
| - xbc_node_for_each_child(node, inode) { |
| + xbc_node_for_each_subkey(node, inode) { |
| p = xbc_node_get_data(inode); |
| if (!p || *p == '\0') |
| continue; |
| -- |
| 2.33.0 |
| |