Pull minor tracing updates and fixes from Steven Rostedt: "It seems that one of my old pull requests have slipped through. The changes are contained to just the files that I maintain, and are changes from others that I told I would get into this merge window. They have already been in linux-next for several weeks, and should be well tested." * 'tip/perf/core-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Remove unnecessary WARN_ONCE's from tracing_buffers_splice_read tracing: Remove unneeded checks from the stack tracer tracing: Add a resize function to make one buffer equivalent to another buffer
Unified · Split
| @@ -3034,6 +3034,31 @@ static void set_buffer_entries(struct trace_array *tr, unsigned long val) · 3033 unmodified lines | ||
| 3034 | 3034 | tr->data[cpu]->entries = val; |
| 3035 | 3035 | } |
| 3036 | 3036 | |
| 3037 | +/* resize @tr's buffer to the size of @size_tr's entries */ | |
| 3038 | +static int resize_buffer_duplicate_size(struct trace_array *tr, | |
| 3039 | + struct trace_array *size_tr, int cpu_id) | |
| 3040 | +{ | |
| 3041 | + int cpu, ret = 0; | |
| 3042 | + | |
| 3043 | + if (cpu_id == RING_BUFFER_ALL_CPUS) { | |
| 3044 | + for_each_tracing_cpu(cpu) { | |
| 3045 | + ret = ring_buffer_resize(tr->buffer, | |
| 3046 | + size_tr->data[cpu]->entries, cpu); | |
| 3047 | + if (ret < 0) | |
| 3048 | + break; | |
| 3049 | + tr->data[cpu]->entries = size_tr->data[cpu]->entries; | |
| 3050 | + } | |
| 3051 | + } else { | |
| 3052 | + ret = ring_buffer_resize(tr->buffer, | |
| 3053 | + size_tr->data[cpu_id]->entries, cpu_id); | |
| 3054 | + if (ret == 0) | |
| 3055 | + tr->data[cpu_id]->entries = | |
| 3056 | + size_tr->data[cpu_id]->entries; | |
| 3057 | + } | |
| 3058 | + | |
| 3059 | + return ret; | |
| 3060 | +} | |
| 3061 | + | |
| 3037 | 3062 | static int __tracing_resize_ring_buffer(unsigned long size, int cpu) |
| 3038 | 3063 | { |
| 3039 | 3064 | int ret; |
| @@ -3058,23 +3083,8 @@ static int __tracing_resize_ring_buffer(unsigned long size, int cpu) · 18 unmodified lines | ||
| 3058 | 3083 | |
| 3059 | 3084 | ret = ring_buffer_resize(max_tr.buffer, size, cpu); |
| 3060 | 3085 | if (ret < 0) { |
| 3061 | − int r = 0; | |
| 3062 | − | |
| 3063 | − if (cpu == RING_BUFFER_ALL_CPUS) { | |
| 3064 | − int i; | |
| 3065 | − for_each_tracing_cpu(i) { | |
| 3066 | − r = ring_buffer_resize(global_trace.buffer, | |
| 3067 | − global_trace.data[i]->entries, | |
| 3068 | − i); | |
| 3069 | − if (r < 0) | |
| 3070 | − break; | |
| 3071 | − } | |
| 3072 | − } else { | |
| 3073 | − r = ring_buffer_resize(global_trace.buffer, | |
| 3074 | − global_trace.data[cpu]->entries, | |
| 3075 | − cpu); | |
| 3076 | − } | |
| 3077 | − | |
| 3086 | + int r = resize_buffer_duplicate_size(&global_trace, | |
| 3087 | + &global_trace, cpu); | |
| 3078 | 3088 | if (r < 0) { |
| 3079 | 3089 | /* |
| 3080 | 3090 | * AARGH! We are left with different |
| @@ -3212,17 +3222,11 @@ static int tracing_set_tracer(const char *buf) · 131 unmodified lines | ||
| 3212 | 3222 | |
| 3213 | 3223 | topts = create_trace_option_files(t); |
| 3214 | 3224 | if (t->use_max_tr) { |
| 3215 | − int cpu; | |
| 3216 | 3225 | /* we need to make per cpu buffer sizes equivalent */ |
| 3217 | − for_each_tracing_cpu(cpu) { | |
| 3218 | − ret = ring_buffer_resize(max_tr.buffer, | |
| 3219 | − global_trace.data[cpu]->entries, | |
| 3220 | − cpu); | |
| 3221 | − if (ret < 0) | |
| 3222 | − goto out; | |
| 3223 | − max_tr.data[cpu]->entries = | |
| 3224 | − global_trace.data[cpu]->entries; | |
| 3225 | − } | |
| 3226 | + ret = resize_buffer_duplicate_size(&max_tr, &global_trace, | |
| 3227 | + RING_BUFFER_ALL_CPUS); | |
| 3228 | + if (ret < 0) | |
| 3229 | + goto out; | |
| 3226 | 3230 | } |
| 3227 | 3231 | |
| 3228 | 3232 | if (t->init) { |
| @@ -4271,13 +4275,11 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos, · 1042 unmodified lines | ||
| 4271 | 4275 | return -ENOMEM; |
| 4272 | 4276 | |
| 4273 | 4277 | if (*ppos & (PAGE_SIZE - 1)) { |
| 4274 | − WARN_ONCE(1, "Ftrace: previous read must page-align\n"); | |
| 4275 | 4278 | ret = -EINVAL; |
| 4276 | 4279 | goto out; |
| 4277 | 4280 | } |
| 4278 | 4281 | |
| 4279 | 4282 | if (len & (PAGE_SIZE - 1)) { |
| 4280 | − WARN_ONCE(1, "Ftrace: splice_read should page-align\n"); | |
| 4281 | 4283 | if (len < PAGE_SIZE) { |
| 4282 | 4284 | ret = -EINVAL; |
| 4283 | 4285 | goto out; |
| @@ -33,7 +33,6 @@ static unsigned long max_stack_size; · 32 unmodified lines | ||
| 33 | 33 | static arch_spinlock_t max_stack_lock = |
| 34 | 34 | (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; |
| 35 | 35 | |
| 36 | −static int stack_trace_disabled __read_mostly; | |
| 37 | 36 | static DEFINE_PER_CPU(int, trace_active); |
| 38 | 37 | static DEFINE_MUTEX(stack_sysctl_mutex); |
| 39 | 38 | |
| @@ -116,9 +115,6 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip, · 76 unmodified lines | ||
| 116 | 115 | { |
| 117 | 116 | int cpu; |
| 118 | 117 | |
| 119 | − if (unlikely(!ftrace_enabled || stack_trace_disabled)) | |
| 120 | − return; | |
| 121 | − | |
| 122 | 118 | preempt_disable_notrace(); |
| 123 | 119 | |
| 124 | 120 | cpu = raw_smp_processor_id(); |