mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
tracing/boot: Add instance node support
Add instance node support to boot-time tracing. User can set some options and event nodes under instance node. - ftrace.instance.INSTANCE[...] Add new INSTANCE instance. Some options and event nodes are acceptable for instance node. Link: http://lkml.kernel.org/r/157867242413.17873.9814204526141500278.stgit@devnote2 Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
3fbe2d6e1f
commit
4f712a4d04
@ -20,7 +20,7 @@ extern ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
|
|||||||
unsigned long size, int cpu_id);
|
unsigned long size, int cpu_id);
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
trace_boot_set_ftrace_options(struct trace_array *tr, struct xbc_node *node)
|
trace_boot_set_instance_options(struct trace_array *tr, struct xbc_node *node)
|
||||||
{
|
{
|
||||||
struct xbc_node *anode;
|
struct xbc_node *anode;
|
||||||
const char *p;
|
const char *p;
|
||||||
@ -242,6 +242,40 @@ trace_boot_enable_tracer(struct trace_array *tr, struct xbc_node *node)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
trace_boot_init_one_instance(struct trace_array *tr, struct xbc_node *node)
|
||||||
|
{
|
||||||
|
trace_boot_set_instance_options(tr, node);
|
||||||
|
trace_boot_init_events(tr, node);
|
||||||
|
trace_boot_enable_events(tr, node);
|
||||||
|
trace_boot_enable_tracer(tr, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
trace_boot_init_instances(struct xbc_node *node)
|
||||||
|
{
|
||||||
|
struct xbc_node *inode;
|
||||||
|
struct trace_array *tr;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
node = xbc_node_find_child(node, "instance");
|
||||||
|
if (!node)
|
||||||
|
return;
|
||||||
|
|
||||||
|
xbc_node_for_each_child(node, inode) {
|
||||||
|
p = xbc_node_get_data(inode);
|
||||||
|
if (!p || *p == '\0')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
tr = trace_array_get_by_name(p);
|
||||||
|
if (IS_ERR(tr)) {
|
||||||
|
pr_err("Failed to get trace instance %s\n", p);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
trace_boot_init_one_instance(tr, inode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int __init trace_boot_init(void)
|
static int __init trace_boot_init(void)
|
||||||
{
|
{
|
||||||
struct xbc_node *trace_node;
|
struct xbc_node *trace_node;
|
||||||
@ -255,10 +289,9 @@ static int __init trace_boot_init(void)
|
|||||||
if (!tr)
|
if (!tr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
trace_boot_set_ftrace_options(tr, trace_node);
|
/* Global trace array is also one instance */
|
||||||
trace_boot_init_events(tr, trace_node);
|
trace_boot_init_one_instance(tr, trace_node);
|
||||||
trace_boot_enable_events(tr, trace_node);
|
trace_boot_init_instances(trace_node);
|
||||||
trace_boot_enable_tracer(tr, trace_node);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user