diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 06:06:36 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 06:06:36 -0400 |
commit | a18f22a968de17b29f2310cdb7ba69163e65ec15 (patch) | |
tree | a7d56d88fad5e444d7661484109758a2f436129e /kernel/trace/trace.c | |
parent | a1c57e0fec53defe745e64417eacdbd3618c3e66 (diff) | |
parent | 798778b8653f64b7b2162ac70eca10367cff6ce8 (diff) |
Merge branch 'consolidate-clksrc-i8253' of master.kernel.org:~rmk/linux-2.6-arm into timers/clocksource
Conflicts:
arch/ia64/kernel/cyclone.c
arch/mips/kernel/i8253.c
arch/x86/kernel/i8253.c
Reason: Resolve conflicts so further cleanups do not conflict further
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index dc53ecb80589..1cb49be7c7fb 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -41,8 +41,6 @@ | |||
41 | #include "trace.h" | 41 | #include "trace.h" |
42 | #include "trace_output.h" | 42 | #include "trace_output.h" |
43 | 43 | ||
44 | #define TRACE_BUFFER_FLAGS (RB_FL_OVERWRITE) | ||
45 | |||
46 | /* | 44 | /* |
47 | * On boot up, the ring buffer is set to the minimum size, so that | 45 | * On boot up, the ring buffer is set to the minimum size, so that |
48 | * we do not waste memory on systems that are not using tracing. | 46 | * we do not waste memory on systems that are not using tracing. |
@@ -340,7 +338,7 @@ static DECLARE_WAIT_QUEUE_HEAD(trace_wait); | |||
340 | /* trace_flags holds trace_options default values */ | 338 | /* trace_flags holds trace_options default values */ |
341 | unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | | 339 | unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | |
342 | TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME | | 340 | TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME | |
343 | TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD; | 341 | TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE; |
344 | 342 | ||
345 | static int trace_stop_count; | 343 | static int trace_stop_count; |
346 | static DEFINE_SPINLOCK(tracing_start_lock); | 344 | static DEFINE_SPINLOCK(tracing_start_lock); |
@@ -425,6 +423,7 @@ static const char *trace_options[] = { | |||
425 | "sleep-time", | 423 | "sleep-time", |
426 | "graph-time", | 424 | "graph-time", |
427 | "record-cmd", | 425 | "record-cmd", |
426 | "overwrite", | ||
428 | NULL | 427 | NULL |
429 | }; | 428 | }; |
430 | 429 | ||
@@ -780,6 +779,11 @@ __acquires(kernel_lock) | |||
780 | tracing_reset_online_cpus(tr); | 779 | tracing_reset_online_cpus(tr); |
781 | 780 | ||
782 | current_trace = type; | 781 | current_trace = type; |
782 | |||
783 | /* If we expanded the buffers, make sure the max is expanded too */ | ||
784 | if (ring_buffer_expanded && type->use_max_tr) | ||
785 | ring_buffer_resize(max_tr.buffer, trace_buf_size); | ||
786 | |||
783 | /* the test is responsible for initializing and enabling */ | 787 | /* the test is responsible for initializing and enabling */ |
784 | pr_info("Testing tracer %s: ", type->name); | 788 | pr_info("Testing tracer %s: ", type->name); |
785 | ret = type->selftest(type, tr); | 789 | ret = type->selftest(type, tr); |
@@ -792,6 +796,10 @@ __acquires(kernel_lock) | |||
792 | /* Only reset on passing, to avoid touching corrupted buffers */ | 796 | /* Only reset on passing, to avoid touching corrupted buffers */ |
793 | tracing_reset_online_cpus(tr); | 797 | tracing_reset_online_cpus(tr); |
794 | 798 | ||
799 | /* Shrink the max buffer again */ | ||
800 | if (ring_buffer_expanded && type->use_max_tr) | ||
801 | ring_buffer_resize(max_tr.buffer, 1); | ||
802 | |||
795 | printk(KERN_CONT "PASSED\n"); | 803 | printk(KERN_CONT "PASSED\n"); |
796 | } | 804 | } |
797 | #endif | 805 | #endif |
@@ -1102,7 +1110,7 @@ tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, | |||
1102 | 1110 | ||
1103 | entry->preempt_count = pc & 0xff; | 1111 | entry->preempt_count = pc & 0xff; |
1104 | entry->pid = (tsk) ? tsk->pid : 0; | 1112 | entry->pid = (tsk) ? tsk->pid : 0; |
1105 | entry->lock_depth = (tsk) ? tsk->lock_depth : 0; | 1113 | entry->padding = 0; |
1106 | entry->flags = | 1114 | entry->flags = |
1107 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | 1115 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT |
1108 | (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | | 1116 | (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | |
@@ -1749,10 +1757,9 @@ static void print_lat_help_header(struct seq_file *m) | |||
1749 | seq_puts(m, "# | / _----=> need-resched \n"); | 1757 | seq_puts(m, "# | / _----=> need-resched \n"); |
1750 | seq_puts(m, "# || / _---=> hardirq/softirq \n"); | 1758 | seq_puts(m, "# || / _---=> hardirq/softirq \n"); |
1751 | seq_puts(m, "# ||| / _--=> preempt-depth \n"); | 1759 | seq_puts(m, "# ||| / _--=> preempt-depth \n"); |
1752 | seq_puts(m, "# |||| /_--=> lock-depth \n"); | 1760 | seq_puts(m, "# |||| / delay \n"); |
1753 | seq_puts(m, "# |||||/ delay \n"); | 1761 | seq_puts(m, "# cmd pid ||||| time | caller \n"); |
1754 | seq_puts(m, "# cmd pid |||||| time | caller \n"); | 1762 | seq_puts(m, "# \\ / ||||| \\ | / \n"); |
1755 | seq_puts(m, "# \\ / |||||| \\ | / \n"); | ||
1756 | } | 1763 | } |
1757 | 1764 | ||
1758 | static void print_func_help_header(struct seq_file *m) | 1765 | static void print_func_help_header(struct seq_file *m) |
@@ -2529,6 +2536,9 @@ static void set_tracer_flags(unsigned int mask, int enabled) | |||
2529 | 2536 | ||
2530 | if (mask == TRACE_ITER_RECORD_CMD) | 2537 | if (mask == TRACE_ITER_RECORD_CMD) |
2531 | trace_event_enable_cmd_record(enabled); | 2538 | trace_event_enable_cmd_record(enabled); |
2539 | |||
2540 | if (mask == TRACE_ITER_OVERWRITE) | ||
2541 | ring_buffer_change_overwrite(global_trace.buffer, enabled); | ||
2532 | } | 2542 | } |
2533 | 2543 | ||
2534 | static ssize_t | 2544 | static ssize_t |
@@ -2710,6 +2720,10 @@ tracing_ctrl_write(struct file *filp, const char __user *ubuf, | |||
2710 | 2720 | ||
2711 | mutex_lock(&trace_types_lock); | 2721 | mutex_lock(&trace_types_lock); |
2712 | if (tracer_enabled ^ val) { | 2722 | if (tracer_enabled ^ val) { |
2723 | |||
2724 | /* Only need to warn if this is used to change the state */ | ||
2725 | WARN_ONCE(1, "tracing_enabled is deprecated. Use tracing_on"); | ||
2726 | |||
2713 | if (val) { | 2727 | if (val) { |
2714 | tracer_enabled = 1; | 2728 | tracer_enabled = 1; |
2715 | if (current_trace->start) | 2729 | if (current_trace->start) |
@@ -3226,7 +3240,7 @@ waitagain: | |||
3226 | trace_seq_init(&iter->seq); | 3240 | trace_seq_init(&iter->seq); |
3227 | 3241 | ||
3228 | /* | 3242 | /* |
3229 | * If there was nothing to send to user, inspite of consuming trace | 3243 | * If there was nothing to send to user, in spite of consuming trace |
3230 | * entries, go back to wait for more entries. | 3244 | * entries, go back to wait for more entries. |
3231 | */ | 3245 | */ |
3232 | if (sret == -EBUSY) | 3246 | if (sret == -EBUSY) |
@@ -4551,9 +4565,11 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) | |||
4551 | __init static int tracer_alloc_buffers(void) | 4565 | __init static int tracer_alloc_buffers(void) |
4552 | { | 4566 | { |
4553 | int ring_buf_size; | 4567 | int ring_buf_size; |
4568 | enum ring_buffer_flags rb_flags; | ||
4554 | int i; | 4569 | int i; |
4555 | int ret = -ENOMEM; | 4570 | int ret = -ENOMEM; |
4556 | 4571 | ||
4572 | |||
4557 | if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) | 4573 | if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) |
4558 | goto out; | 4574 | goto out; |
4559 | 4575 | ||
@@ -4566,12 +4582,13 @@ __init static int tracer_alloc_buffers(void) | |||
4566 | else | 4582 | else |
4567 | ring_buf_size = 1; | 4583 | ring_buf_size = 1; |
4568 | 4584 | ||
4585 | rb_flags = trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; | ||
4586 | |||
4569 | cpumask_copy(tracing_buffer_mask, cpu_possible_mask); | 4587 | cpumask_copy(tracing_buffer_mask, cpu_possible_mask); |
4570 | cpumask_copy(tracing_cpumask, cpu_all_mask); | 4588 | cpumask_copy(tracing_cpumask, cpu_all_mask); |
4571 | 4589 | ||
4572 | /* TODO: make the number of buffers hot pluggable with CPUS */ | 4590 | /* TODO: make the number of buffers hot pluggable with CPUS */ |
4573 | global_trace.buffer = ring_buffer_alloc(ring_buf_size, | 4591 | global_trace.buffer = ring_buffer_alloc(ring_buf_size, rb_flags); |
4574 | TRACE_BUFFER_FLAGS); | ||
4575 | if (!global_trace.buffer) { | 4592 | if (!global_trace.buffer) { |
4576 | printk(KERN_ERR "tracer: failed to allocate ring buffer!\n"); | 4593 | printk(KERN_ERR "tracer: failed to allocate ring buffer!\n"); |
4577 | WARN_ON(1); | 4594 | WARN_ON(1); |
@@ -4581,7 +4598,7 @@ __init static int tracer_alloc_buffers(void) | |||
4581 | 4598 | ||
4582 | 4599 | ||
4583 | #ifdef CONFIG_TRACER_MAX_TRACE | 4600 | #ifdef CONFIG_TRACER_MAX_TRACE |
4584 | max_tr.buffer = ring_buffer_alloc(1, TRACE_BUFFER_FLAGS); | 4601 | max_tr.buffer = ring_buffer_alloc(1, rb_flags); |
4585 | if (!max_tr.buffer) { | 4602 | if (!max_tr.buffer) { |
4586 | printk(KERN_ERR "tracer: failed to allocate max ring buffer!\n"); | 4603 | printk(KERN_ERR "tracer: failed to allocate max ring buffer!\n"); |
4587 | WARN_ON(1); | 4604 | WARN_ON(1); |