diff options
Diffstat (limited to 'kernel/trace')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 2 | ||||
| -rw-r--r-- | kernel/trace/trace.c | 19 |
2 files changed, 18 insertions, 3 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 3f3380638646..2f76193c3489 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
| @@ -1060,7 +1060,7 @@ rb_reserve_next_event(struct ring_buffer_per_cpu *cpu_buffer, | |||
| 1060 | 1060 | ||
| 1061 | /* Did the write stamp get updated already? */ | 1061 | /* Did the write stamp get updated already? */ |
| 1062 | if (unlikely(ts < cpu_buffer->write_stamp)) | 1062 | if (unlikely(ts < cpu_buffer->write_stamp)) |
| 1063 | goto again; | 1063 | delta = 0; |
| 1064 | 1064 | ||
| 1065 | if (test_time_stamp(delta)) { | 1065 | if (test_time_stamp(delta)) { |
| 1066 | 1066 | ||
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 9f3b478f9171..697eda36b86a 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -1755,7 +1755,7 @@ static enum print_line_t print_bin_fmt(struct trace_iterator *iter) | |||
| 1755 | return TRACE_TYPE_HANDLED; | 1755 | return TRACE_TYPE_HANDLED; |
| 1756 | 1756 | ||
| 1757 | SEQ_PUT_FIELD_RET(s, entry->pid); | 1757 | SEQ_PUT_FIELD_RET(s, entry->pid); |
| 1758 | SEQ_PUT_FIELD_RET(s, iter->cpu); | 1758 | SEQ_PUT_FIELD_RET(s, entry->cpu); |
| 1759 | SEQ_PUT_FIELD_RET(s, iter->ts); | 1759 | SEQ_PUT_FIELD_RET(s, iter->ts); |
| 1760 | 1760 | ||
| 1761 | switch (entry->type) { | 1761 | switch (entry->type) { |
| @@ -2676,7 +2676,7 @@ tracing_entries_write(struct file *filp, const char __user *ubuf, | |||
| 2676 | { | 2676 | { |
| 2677 | unsigned long val; | 2677 | unsigned long val; |
| 2678 | char buf[64]; | 2678 | char buf[64]; |
| 2679 | int ret; | 2679 | int ret, cpu; |
| 2680 | struct trace_array *tr = filp->private_data; | 2680 | struct trace_array *tr = filp->private_data; |
| 2681 | 2681 | ||
| 2682 | if (cnt >= sizeof(buf)) | 2682 | if (cnt >= sizeof(buf)) |
| @@ -2704,6 +2704,14 @@ tracing_entries_write(struct file *filp, const char __user *ubuf, | |||
| 2704 | goto out; | 2704 | goto out; |
| 2705 | } | 2705 | } |
| 2706 | 2706 | ||
| 2707 | /* disable all cpu buffers */ | ||
| 2708 | for_each_tracing_cpu(cpu) { | ||
| 2709 | if (global_trace.data[cpu]) | ||
| 2710 | atomic_inc(&global_trace.data[cpu]->disabled); | ||
| 2711 | if (max_tr.data[cpu]) | ||
| 2712 | atomic_inc(&max_tr.data[cpu]->disabled); | ||
| 2713 | } | ||
| 2714 | |||
| 2707 | if (val != global_trace.entries) { | 2715 | if (val != global_trace.entries) { |
| 2708 | ret = ring_buffer_resize(global_trace.buffer, val); | 2716 | ret = ring_buffer_resize(global_trace.buffer, val); |
| 2709 | if (ret < 0) { | 2717 | if (ret < 0) { |
| @@ -2735,6 +2743,13 @@ tracing_entries_write(struct file *filp, const char __user *ubuf, | |||
| 2735 | if (tracing_disabled) | 2743 | if (tracing_disabled) |
| 2736 | cnt = -ENOMEM; | 2744 | cnt = -ENOMEM; |
| 2737 | out: | 2745 | out: |
| 2746 | for_each_tracing_cpu(cpu) { | ||
| 2747 | if (global_trace.data[cpu]) | ||
| 2748 | atomic_dec(&global_trace.data[cpu]->disabled); | ||
| 2749 | if (max_tr.data[cpu]) | ||
| 2750 | atomic_dec(&max_tr.data[cpu]->disabled); | ||
| 2751 | } | ||
| 2752 | |||
| 2738 | max_tr.entries = global_trace.entries; | 2753 | max_tr.entries = global_trace.entries; |
| 2739 | mutex_unlock(&trace_types_lock); | 2754 | mutex_unlock(&trace_types_lock); |
| 2740 | 2755 | ||
