diff options
| author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2015-01-26 21:00:48 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2015-02-02 10:22:34 -0500 |
| commit | 7eeafbcab47fe9860e5106286db83d60e3f35644 (patch) | |
| tree | b60a82740520c4ef85c05c7273cf84f98d6384dd /kernel/trace | |
| parent | c602894814adc93589dde028182101818c5f938b (diff) | |
tracing: Separate out initializing top level dir from instances
The top level trace array is treated a little different than the
instances, as it has to deal with more of the general tracing.
The tr->dir is the tracing directory, which is an immutable
dentry, where as the tr->dir of instances are the dentry that
was created, and can be destroyed later. These should have different
functions accessing them.
As only tracing_init_dentry() deals with the top level array, fold
the code for it into that function, and remove the trace_init_dentry_tr()
that was also used by the instances to get their directory dentry.
Add a tracing_get_dentry() to just get the tracing dir entry for
instances as well as the top level array.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace')
| -rw-r--r-- | kernel/trace/trace.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 2668a0d742ee..5afce60e1b68 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -5815,28 +5815,11 @@ static __init int register_snapshot_cmd(void) | |||
| 5815 | static inline __init int register_snapshot_cmd(void) { return 0; } | 5815 | static inline __init int register_snapshot_cmd(void) { return 0; } |
| 5816 | #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */ | 5816 | #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */ |
| 5817 | 5817 | ||
| 5818 | static struct dentry *tracing_init_dentry_tr(struct trace_array *tr) | 5818 | static struct dentry *tracing_get_dentry(struct trace_array *tr) |
| 5819 | { | 5819 | { |
| 5820 | if (tr->dir) | ||
| 5821 | return tr->dir; | ||
| 5822 | |||
| 5823 | if (!debugfs_initialized()) | ||
| 5824 | return ERR_PTR(-ENODEV); | ||
| 5825 | |||
| 5826 | if (tr->flags & TRACE_ARRAY_FL_GLOBAL) | ||
| 5827 | tr->dir = debugfs_create_dir("tracing", NULL); | ||
| 5828 | |||
| 5829 | if (!tr->dir) | ||
| 5830 | pr_warn_once("Could not create debugfs directory 'tracing'\n"); | ||
| 5831 | |||
| 5832 | return tr->dir; | 5820 | return tr->dir; |
| 5833 | } | 5821 | } |
| 5834 | 5822 | ||
| 5835 | struct dentry *tracing_init_dentry(void) | ||
| 5836 | { | ||
| 5837 | return tracing_init_dentry_tr(&global_trace); | ||
| 5838 | } | ||
| 5839 | |||
| 5840 | static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) | 5823 | static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) |
| 5841 | { | 5824 | { |
| 5842 | struct dentry *d_tracer; | 5825 | struct dentry *d_tracer; |
| @@ -5844,7 +5827,7 @@ static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) | |||
| 5844 | if (tr->percpu_dir) | 5827 | if (tr->percpu_dir) |
| 5845 | return tr->percpu_dir; | 5828 | return tr->percpu_dir; |
| 5846 | 5829 | ||
| 5847 | d_tracer = tracing_init_dentry_tr(tr); | 5830 | d_tracer = tracing_get_dentry(tr); |
| 5848 | if (IS_ERR(d_tracer)) | 5831 | if (IS_ERR(d_tracer)) |
| 5849 | return NULL; | 5832 | return NULL; |
| 5850 | 5833 | ||
| @@ -6047,7 +6030,7 @@ static struct dentry *trace_options_init_dentry(struct trace_array *tr) | |||
| 6047 | if (tr->options) | 6030 | if (tr->options) |
| 6048 | return tr->options; | 6031 | return tr->options; |
| 6049 | 6032 | ||
| 6050 | d_tracer = tracing_init_dentry_tr(tr); | 6033 | d_tracer = tracing_get_dentry(tr); |
| 6051 | if (IS_ERR(d_tracer)) | 6034 | if (IS_ERR(d_tracer)) |
| 6052 | return NULL; | 6035 | return NULL; |
| 6053 | 6036 | ||
| @@ -6532,6 +6515,33 @@ init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer) | |||
| 6532 | 6515 | ||
| 6533 | } | 6516 | } |
| 6534 | 6517 | ||
| 6518 | /** | ||
| 6519 | * tracing_init_dentry - initialize top level trace array | ||
| 6520 | * | ||
| 6521 | * This is called when creating files or directories in the tracing | ||
| 6522 | * directory. It is called via fs_initcall() by any of the boot up code | ||
| 6523 | * and expects to return the dentry of the top level tracing directory. | ||
| 6524 | */ | ||
| 6525 | struct dentry *tracing_init_dentry(void) | ||
| 6526 | { | ||
| 6527 | struct trace_array *tr = &global_trace; | ||
| 6528 | |||
| 6529 | if (tr->dir) | ||
| 6530 | return tr->dir; | ||
| 6531 | |||
| 6532 | if (WARN_ON(!debugfs_initialized())) | ||
| 6533 | return ERR_PTR(-ENODEV); | ||
| 6534 | |||
| 6535 | tr->dir = debugfs_create_dir("tracing", NULL); | ||
| 6536 | |||
| 6537 | if (!tr->dir) { | ||
| 6538 | pr_warn_once("Could not create debugfs directory 'tracing'\n"); | ||
| 6539 | return ERR_PTR(-ENOMEM); | ||
| 6540 | } | ||
| 6541 | |||
| 6542 | return tr->dir; | ||
| 6543 | } | ||
| 6544 | |||
| 6535 | static __init int tracer_init_debugfs(void) | 6545 | static __init int tracer_init_debugfs(void) |
| 6536 | { | 6546 | { |
| 6537 | struct dentry *d_tracer; | 6547 | struct dentry *d_tracer; |
| @@ -6772,7 +6782,6 @@ __init static int tracer_alloc_buffers(void) | |||
| 6772 | int ring_buf_size; | 6782 | int ring_buf_size; |
| 6773 | int ret = -ENOMEM; | 6783 | int ret = -ENOMEM; |
| 6774 | 6784 | ||
| 6775 | |||
| 6776 | if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) | 6785 | if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) |
| 6777 | goto out; | 6786 | goto out; |
| 6778 | 6787 | ||
