tracing/boot: Add per-group/all events enablement
authorMasami Hiramatsu <mhiramat@kernel.org>
Wed, 2 Jun 2021 14:33:00 +0000 (23:33 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 10 Jun 2021 15:16:20 +0000 (11:16 -0400)
Add ftrace.event.<GROUP>.enable and ftrace.event.enable
boot-time tracing, which enables all events under
given GROUP and all events respectivly.

Link: https://lkml.kernel.org/r/162264438005.302580.12019174481201855444.stgit@devnote2
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_boot.c

index a82f03f..94ef2d0 100644 (file)
@@ -225,14 +225,37 @@ static void __init
 trace_boot_init_events(struct trace_array *tr, struct xbc_node *node)
 {
        struct xbc_node *gnode, *enode;
+       bool enable, enable_all = false;
+       const char *data;
 
        node = xbc_node_find_child(node, "event");
        if (!node)
                return;
        /* per-event key starts with "event.GROUP.EVENT" */
-       xbc_node_for_each_child(node, gnode)
-               xbc_node_for_each_child(gnode, enode)
+       xbc_node_for_each_child(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) {
+                       data = xbc_node_get_data(enode);
+                       if (!strcmp(data, "enable")) {
+                               enable = true;
+                               continue;
+                       }
                        trace_boot_init_one_event(tr, gnode, enode);
+               }
+               /* Event enablement must be done after event settings */
+               if (enable) {
+                       data = xbc_node_get_data(gnode);
+                       trace_array_set_clr_event(tr, data, NULL, true);
+               }
+       }
+       /* Ditto */
+       if (enable_all)
+               trace_array_set_clr_event(tr, NULL, NULL, true);
 }
 #else
 #define trace_boot_enable_events(tr, node) do {} while (0)