tracing: Some more updates
Steven Rostedt
maintainerIngo,
This is based off of my last pull request on tip/perf/core.
Please pull the latest tip/perf/core-2 tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
tip/perf/core-2
Head SHA1: bf3071f5a054db9e5bab873355d27a7330ce5187
Anton Vorontsov (1):
tracing: Remove unneeded checks from the stack tracer
Dave Jones (1):
tracing: Remove unnecessary WARN_ONCE's from tracing_buffers_splice_read
Hiraku Toyooka (1):
tracing: Add a resize function to make one buffer equivalent to another buffer
----
kernel/trace/trace.c | 60 +++++++++++++++++++++++--------------------- kernel/trace/trace_stack.c | 4 --- 2 files changed, 31 insertions(+), 33 deletions(-)
Steven Rostedt
maintainerPATCH 1/3 tracing: Add a resize function to make one buffer equivalent to another buffer
From: Hiraku Toyooka <[email protected]>
Trace buffer size is now per-cpu, so that there are the following two patterns in resizing of buffers.
(1) resize per-cpu buffers to same given size
(2) resize per-cpu buffers to another trace_array's buffer size for each CPU (such as preparing the max_tr which is equivalent to the global_trace's size)
__tracing_resize_ring_buffer() can be used for (1), and had implemented (2) inside it for resetting the global_trace to the original size.
(2) was also implemented in another place. So this patch assembles them in a new function - resize_buffer_duplicate_size().
--- kernel/trace/trace.c | 58 +++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 27 deletions(-)
kernel/trace/trace.c +31 -27
@@ -3034,6 +3034,31 @@ static void set_buffer_entries(struct trace_array *tr, unsigned long val) tr->data[cpu]->entries = val; } +/* resize @tr's buffer to the size of @size_tr's entries */ +static int resize_buffer_duplicate_size (struct trace_array *tr, +struct trace_array *size_tr,int cpu_id) +{ +int cpu, ret =0 ; + +if (cpu_id ==RING_BUFFER_ALL_CPUS ) { +for_each_tracing_cpu (cpu) { + ret =ring_buffer_resize (tr->buffer, + size_tr->data[cpu]->entries, cpu); +if (ret <0 ) +break ; + tr->data[cpu]->entries = size_tr->data[cpu]->entries; + } + }else { + ret =ring_buffer_resize (tr->buffer, + size_tr->data[cpu_id]->entries, cpu_id); +if (ret ==0 ) + tr->data[cpu_id]->entries = + size_tr->data[cpu_id]->entries; + } + +return ret; +} +static int __tracing_resize_ring_buffer (unsigned long size,int cpu) {int ret;
@@ -3058,23 +3083,8 @@ static int __tracing_resize_ring_buffer(unsigned long size, int cpu) ret =ring_buffer_resize (max_tr.buffer, size, cpu);if (ret <0 ) { -int r =0 ; - -if (cpu ==RING_BUFFER_ALL_CPUS ) { -int i; -for_each_tracing_cpu (i) { - r =ring_buffer_resize (global_trace.buffer, - global_trace.data[i]->entries, - i); -if (r <0 ) -break ; - } - }else { - r =ring_buffer_resize (global_trace.buffer, - global_trace.data[cpu]->entries, - cpu); - } - +int r =resize_buffer_duplicate_size (&global_trace, + &global_trace, cpu);if (r <0 ) {/* * AARGH! We are left with different
@@ -3212,17 +3222,11 @@ static int tracing_set_tracer(const char *buf) topts =create_trace_option_files (t);if (t->use_max_tr) { -int cpu;/* we need to make per cpu buffer sizes equivalent */ -for_each_tracing_cpu (cpu) { - ret =ring_buffer_resize (max_tr.buffer, - global_trace.data[cpu]->entries, - cpu); -if (ret <0 ) - goto out; - max_tr.data[cpu]->entries = - global_trace.data[cpu]->entries; - } + ret =resize_buffer_duplicate_size (&max_tr, &global_trace, +RING_BUFFER_ALL_CPUS ); +if (ret <0 ) + goto out; }if (t->init) {
Signature · 1 line
1.7.10.4
Steven Rostedt
maintainerPATCH 2/3 tracing: Remove unneeded checks from the stack tracer
In reply to Steven RostedtFrom: Anton Vorontsov <[email protected]>
It seems that 'ftrace_enabled' flag should not be used inside the tracer functions. The ftrace core is using this flag for internal purposes, and the flag wasn't meant to be used in tracers' runtime checks.
stack tracer is the only tracer that abusing the flag. So stop it from serving as a bad example.
Also, there is a local 'stack_trace_disabled' flag in the stack tracer, which is never updated; so it can be removed as well.
--- kernel/trace/trace_stack.c | 4 ---- 1 file changed, 4 deletions(-)
kernel/trace/trace_stack.c +0 -4
@@ -33,7 +33,6 @@ static unsigned long max_stack_size;static arch_spinlock_t max_stack_lock = (arch_spinlock_t )__ARCH_SPIN_LOCK_UNLOCKED; -static int stack_trace_disabled__read_mostly ; static DEFINE_PER_CPU(int, trace_active);static DEFINE_MUTEX (stack_sysctl_mutex);
@@ -116,9 +115,6 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip, {int cpu; -if (unlikely (!ftrace_enabled || stack_trace_disabled)) -return ; -preempt_disable_notrace (); cpu =raw_smp_processor_id ();
Signature · 1 line
1.7.10.4
Steven Rostedt
maintainerPATCH 3/3 tracing: Remove unnecessary WARN_ONCEs from tracing_buffers_splice_read
In reply to Steven RostedtFrom: Dave Jones <[email protected]>
WARN shouldn't be used as a means of communicating failure to a userspace programmer.
--- kernel/trace/trace.c | 2 -- 1 file changed, 2 deletions(-)
kernel/trace/trace.c +0 -2
@@ -4275,13 +4275,11 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,return -ENOMEM ;if (*ppos & (PAGE_SIZE -1 )) { -WARN_ONCE (1 ,"Ftrace: previous read must page-align\n" ); ret = -EINVAL ; goto out; }if (len & (PAGE_SIZE -1 )) { -WARN_ONCE (1 ,"Ftrace: splice_read should page-align\n" );if (len <PAGE_SIZE ) { ret = -EINVAL ; goto out;
Signature · 1 line
1.7.10.4
Steven Rostedt
maintainerQuoted 5 lines · Steven Rostedt
Ingo,
This is based off of my last pull request on tip/perf/core.
Please pull the latest tip/perf/core-2 tree, which can be found at:
Ping?
This has been in linux-next for a few weeks too. It's all ready to go in this merge window.
-- Steve
Quoted 20 lines
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
tip/perf/core-2Head SHA1:
bf3071f5a054db9e5bab873355d27a7330ce5187Anton Vorontsov (1):
tracing: Remove unneeded checks from the stack tracerDave Jones (1):
tracing: Remove unnecessary WARN_ONCE's fromtracing_buffers_splice_readHiraku Toyooka (1):
tracing: Add a resize function to make one buffer equivalent to another buffer----
kernel/trace/trace.c | 60 +++++++++++++++++++++++--------------------- kernel/trace/trace_stack.c | 4 --- 2 files changed, 31 insertions(+), 33 deletions(-)