diff options
Diffstat (limited to 'kernel/trace/trace.c')
| -rw-r--r-- | kernel/trace/trace.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d345d649d073..8a499e2adaec 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | #include <linux/stacktrace.h> | 35 | #include <linux/stacktrace.h> |
| 36 | #include <linux/ring_buffer.h> | 36 | #include <linux/ring_buffer.h> |
| 37 | #include <linux/irqflags.h> | ||
| 37 | 38 | ||
| 38 | #include "trace.h" | 39 | #include "trace.h" |
| 39 | 40 | ||
| @@ -655,7 +656,11 @@ tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, | |||
| 655 | entry->preempt_count = pc & 0xff; | 656 | entry->preempt_count = pc & 0xff; |
| 656 | entry->pid = (tsk) ? tsk->pid : 0; | 657 | entry->pid = (tsk) ? tsk->pid : 0; |
| 657 | entry->flags = | 658 | entry->flags = |
| 659 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | ||
| 658 | (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | | 660 | (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | |
| 661 | #else | ||
| 662 | TRACE_FLAG_IRQS_NOSUPPORT | | ||
| 663 | #endif | ||
| 659 | ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | | 664 | ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | |
| 660 | ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) | | 665 | ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) | |
| 661 | (need_resched() ? TRACE_FLAG_NEED_RESCHED : 0); | 666 | (need_resched() ? TRACE_FLAG_NEED_RESCHED : 0); |
| @@ -851,7 +856,7 @@ ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) | |||
| 851 | preempt_enable_notrace(); | 856 | preempt_enable_notrace(); |
| 852 | } | 857 | } |
| 853 | 858 | ||
| 854 | #ifdef CONFIG_FTRACE | 859 | #ifdef CONFIG_FUNCTION_TRACER |
| 855 | static void | 860 | static void |
| 856 | function_trace_call(unsigned long ip, unsigned long parent_ip) | 861 | function_trace_call(unsigned long ip, unsigned long parent_ip) |
| 857 | { | 862 | { |
| @@ -865,9 +870,6 @@ function_trace_call(unsigned long ip, unsigned long parent_ip) | |||
| 865 | if (unlikely(!ftrace_function_enabled)) | 870 | if (unlikely(!ftrace_function_enabled)) |
| 866 | return; | 871 | return; |
| 867 | 872 | ||
| 868 | if (skip_trace(ip)) | ||
| 869 | return; | ||
| 870 | |||
| 871 | pc = preempt_count(); | 873 | pc = preempt_count(); |
| 872 | resched = need_resched(); | 874 | resched = need_resched(); |
| 873 | preempt_disable_notrace(); | 875 | preempt_disable_notrace(); |
| @@ -1246,7 +1248,8 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu) | |||
| 1246 | trace_seq_printf(s, "%8.8s-%-5d ", comm, entry->pid); | 1248 | trace_seq_printf(s, "%8.8s-%-5d ", comm, entry->pid); |
| 1247 | trace_seq_printf(s, "%3d", cpu); | 1249 | trace_seq_printf(s, "%3d", cpu); |
| 1248 | trace_seq_printf(s, "%c%c", | 1250 | trace_seq_printf(s, "%c%c", |
| 1249 | (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' : '.', | 1251 | (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' : |
| 1252 | (entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ? 'X' : '.', | ||
| 1250 | ((entry->flags & TRACE_FLAG_NEED_RESCHED) ? 'N' : '.')); | 1253 | ((entry->flags & TRACE_FLAG_NEED_RESCHED) ? 'N' : '.')); |
| 1251 | 1254 | ||
| 1252 | hardirq = entry->flags & TRACE_FLAG_HARDIRQ; | 1255 | hardirq = entry->flags & TRACE_FLAG_HARDIRQ; |
| @@ -2379,9 +2382,10 @@ tracing_set_trace_write(struct file *filp, const char __user *ubuf, | |||
| 2379 | int i; | 2382 | int i; |
| 2380 | size_t ret; | 2383 | size_t ret; |
| 2381 | 2384 | ||
| 2385 | ret = cnt; | ||
| 2386 | |||
| 2382 | if (cnt > max_tracer_type_len) | 2387 | if (cnt > max_tracer_type_len) |
| 2383 | cnt = max_tracer_type_len; | 2388 | cnt = max_tracer_type_len; |
| 2384 | ret = cnt; | ||
| 2385 | 2389 | ||
| 2386 | if (copy_from_user(&buf, ubuf, cnt)) | 2390 | if (copy_from_user(&buf, ubuf, cnt)) |
| 2387 | return -EFAULT; | 2391 | return -EFAULT; |
| @@ -2414,8 +2418,8 @@ tracing_set_trace_write(struct file *filp, const char __user *ubuf, | |||
| 2414 | out: | 2418 | out: |
| 2415 | mutex_unlock(&trace_types_lock); | 2419 | mutex_unlock(&trace_types_lock); |
| 2416 | 2420 | ||
| 2417 | if (ret == cnt) | 2421 | if (ret > 0) |
| 2418 | filp->f_pos += cnt; | 2422 | filp->f_pos += ret; |
| 2419 | 2423 | ||
| 2420 | return ret; | 2424 | return ret; |
| 2421 | } | 2425 | } |
| @@ -3097,7 +3101,7 @@ void ftrace_dump(void) | |||
| 3097 | dump_ran = 1; | 3101 | dump_ran = 1; |
| 3098 | 3102 | ||
| 3099 | /* No turning back! */ | 3103 | /* No turning back! */ |
| 3100 | ftrace_kill_atomic(); | 3104 | ftrace_kill(); |
| 3101 | 3105 | ||
| 3102 | for_each_tracing_cpu(cpu) { | 3106 | for_each_tracing_cpu(cpu) { |
| 3103 | atomic_inc(&global_trace.data[cpu]->disabled); | 3107 | atomic_inc(&global_trace.data[cpu]->disabled); |
