Lines Matching refs:tr

83 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)  in dummy_set_flag()  argument
164 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
271 struct trace_array *tr; in trace_array_get() local
275 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_get()
276 if (tr == this_tr) { in trace_array_get()
277 tr->ref++; in trace_array_get()
477 static void tracer_tracing_on(struct trace_array *tr) in tracer_tracing_on() argument
479 if (tr->trace_buffer.buffer) in tracer_tracing_on()
480 ring_buffer_record_on(tr->trace_buffer.buffer); in tracer_tracing_on()
489 tr->buffer_disabled = 0; in tracer_tracing_on()
614 struct trace_array *tr = &global_trace; in tracing_snapshot() local
615 struct tracer *tracer = tr->current_trace; in tracing_snapshot()
624 if (!tr->allocated_snapshot) { in tracing_snapshot()
639 update_max_tr(tr, current, smp_processor_id()); in tracing_snapshot()
648 static int alloc_snapshot(struct trace_array *tr) in alloc_snapshot() argument
652 if (!tr->allocated_snapshot) { in alloc_snapshot()
655 ret = resize_buffer_duplicate_size(&tr->max_buffer, in alloc_snapshot()
656 &tr->trace_buffer, RING_BUFFER_ALL_CPUS); in alloc_snapshot()
660 tr->allocated_snapshot = true; in alloc_snapshot()
666 static void free_snapshot(struct trace_array *tr) in free_snapshot() argument
673 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); in free_snapshot()
674 set_buffer_entries(&tr->max_buffer, 1); in free_snapshot()
675 tracing_reset_online_cpus(&tr->max_buffer); in free_snapshot()
676 tr->allocated_snapshot = false; in free_snapshot()
691 struct trace_array *tr = &global_trace; in tracing_alloc_snapshot() local
694 ret = alloc_snapshot(tr); in tracing_alloc_snapshot()
743 static void tracer_tracing_off(struct trace_array *tr) in tracer_tracing_off() argument
745 if (tr->trace_buffer.buffer) in tracer_tracing_off()
746 ring_buffer_record_off(tr->trace_buffer.buffer); in tracer_tracing_off()
755 tr->buffer_disabled = 1; in tracer_tracing_off()
786 static int tracer_tracing_is_on(struct trace_array *tr) in tracer_tracing_is_on() argument
788 if (tr->trace_buffer.buffer) in tracer_tracing_is_on()
789 return ring_buffer_record_is_on(tr->trace_buffer.buffer); in tracer_tracing_is_on()
790 return !tr->buffer_disabled; in tracer_tracing_is_on()
1017 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) in __update_max_tr() argument
1019 struct trace_buffer *trace_buf = &tr->trace_buffer; in __update_max_tr()
1020 struct trace_buffer *max_buf = &tr->max_buffer; in __update_max_tr()
1027 max_data->saved_latency = tr->max_latency; in __update_max_tr()
1060 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) in update_max_tr() argument
1064 if (tr->stop_count) in update_max_tr()
1069 if (!tr->allocated_snapshot) { in update_max_tr()
1071 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr()
1075 arch_spin_lock(&tr->max_lock); in update_max_tr()
1077 buf = tr->trace_buffer.buffer; in update_max_tr()
1078 tr->trace_buffer.buffer = tr->max_buffer.buffer; in update_max_tr()
1079 tr->max_buffer.buffer = buf; in update_max_tr()
1081 __update_max_tr(tr, tsk, cpu); in update_max_tr()
1082 arch_spin_unlock(&tr->max_lock); in update_max_tr()
1094 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) in update_max_tr_single() argument
1098 if (tr->stop_count) in update_max_tr_single()
1102 if (!tr->allocated_snapshot) { in update_max_tr_single()
1104 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr_single()
1108 arch_spin_lock(&tr->max_lock); in update_max_tr_single()
1110 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu); in update_max_tr_single()
1119 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, in update_max_tr_single()
1125 __update_max_tr(tr, tsk, cpu); in update_max_tr_single()
1126 arch_spin_unlock(&tr->max_lock); in update_max_tr_single()
1143 struct trace_array *tr = &global_trace; in run_tracer_selftest() local
1144 struct tracer *saved_tracer = tr->current_trace; in run_tracer_selftest()
1157 tracing_reset_online_cpus(&tr->trace_buffer); in run_tracer_selftest()
1159 tr->current_trace = type; in run_tracer_selftest()
1165 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, in run_tracer_selftest()
1167 tr->allocated_snapshot = true; in run_tracer_selftest()
1173 ret = type->selftest(type, tr); in run_tracer_selftest()
1175 tr->current_trace = saved_tracer; in run_tracer_selftest()
1183 tracing_reset_online_cpus(&tr->trace_buffer); in run_tracer_selftest()
1187 tr->allocated_snapshot = false; in run_tracer_selftest()
1191 ring_buffer_resize(tr->max_buffer.buffer, 1, in run_tracer_selftest()
1321 struct trace_array *tr; in tracing_reset_all_online_cpus() local
1323 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in tracing_reset_all_online_cpus()
1324 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_reset_all_online_cpus()
1326 tracing_reset_online_cpus(&tr->max_buffer); in tracing_reset_all_online_cpus()
1446 static void tracing_start_tr(struct trace_array *tr) in tracing_start_tr() argument
1455 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_start_tr()
1458 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_start_tr()
1460 if (--tr->stop_count) { in tracing_start_tr()
1461 if (tr->stop_count < 0) { in tracing_start_tr()
1464 tr->stop_count = 0; in tracing_start_tr()
1469 buffer = tr->trace_buffer.buffer; in tracing_start_tr()
1474 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_start_tr()
1511 static void tracing_stop_tr(struct trace_array *tr) in tracing_stop_tr() argument
1517 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_stop_tr()
1520 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_stop_tr()
1521 if (tr->stop_count++) in tracing_stop_tr()
1524 buffer = tr->trace_buffer.buffer; in tracing_stop_tr()
1529 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_stop_tr()
1702 *current_rb = ftrace_file->tr->trace_buffer.buffer; in trace_event_buffer_lock_reserve()
1759 trace_function(struct trace_array *tr, in trace_function() argument
1764 struct ring_buffer *buffer = tr->trace_buffer.buffer; in trace_function()
1893 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, in __trace_stack() argument
1896 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL); in __trace_stack()
1976 static void __trace_userstack(struct trace_array *tr, unsigned long flags) in __trace_userstack() argument
1978 ftrace_trace_userstack(tr, flags, preempt_count()); in __trace_userstack()
2135 struct trace_array *tr = &global_trace; in trace_vbprintk() local
2163 buffer = tr->trace_buffer.buffer; in trace_vbprintk()
2236 int trace_array_vprintk(struct trace_array *tr, in trace_array_vprintk() argument
2239 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args); in trace_array_vprintk()
2242 int trace_array_printk(struct trace_array *tr, in trace_array_printk() argument
2252 ret = trace_array_vprintk(tr, ip, fmt, ap); in trace_array_printk()
2457 struct trace_array *tr = iter->tr; in s_start() local
2470 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name)) in s_start()
2471 *iter->trace = *tr->current_trace; in s_start()
2945 if (iter->tr->allocated_snapshot) in print_snapshot_help()
2967 if (iter->tr) { in s_show()
3026 struct trace_array *tr = inode->i_private; in __tracing_open() local
3051 *iter->trace = *tr->current_trace; in __tracing_open()
3056 iter->tr = tr; in __tracing_open()
3060 if (tr->current_trace->print_max || snapshot) in __tracing_open()
3061 iter->trace_buffer = &tr->max_buffer; in __tracing_open()
3064 iter->trace_buffer = &tr->trace_buffer; in __tracing_open()
3079 if (trace_clocks[tr->clock_id].in_ns) in __tracing_open()
3084 tracing_stop_tr(tr); in __tracing_open()
3138 struct trace_array *tr = inode->i_private; in tracing_open_generic_tr() local
3143 if (trace_array_get(tr) < 0) in tracing_open_generic_tr()
3153 struct trace_array *tr = inode->i_private; in tracing_release() local
3159 trace_array_put(tr); in tracing_release()
3177 tracing_start_tr(tr); in tracing_release()
3179 __trace_array_put(tr); in tracing_release()
3194 struct trace_array *tr = inode->i_private; in tracing_release_generic_tr() local
3196 trace_array_put(tr); in tracing_release_generic_tr()
3202 struct trace_array *tr = inode->i_private; in tracing_single_release_tr() local
3204 trace_array_put(tr); in tracing_single_release_tr()
3211 struct trace_array *tr = inode->i_private; in tracing_open() local
3215 if (trace_array_get(tr) < 0) in tracing_open()
3223 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_open()
3225 tracing_reset(&tr->trace_buffer, cpu); in tracing_open()
3237 trace_array_put(tr); in tracing_open()
3248 trace_ok_for_array(struct tracer *t, struct trace_array *tr) in trace_ok_for_array() argument
3250 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; in trace_ok_for_array()
3255 get_tracer_for_array(struct trace_array *tr, struct tracer *t) in get_tracer_for_array() argument
3257 while (t && !trace_ok_for_array(t, tr)) in get_tracer_for_array()
3266 struct trace_array *tr = m->private; in t_next() local
3272 t = get_tracer_for_array(tr, t->next); in t_next()
3279 struct trace_array *tr = m->private; in t_start() local
3285 t = get_tracer_for_array(tr, trace_types); in t_start()
3322 struct trace_array *tr = inode->i_private; in show_traces_open() local
3334 m->private = tr; in show_traces_open()
3389 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_read() local
3395 cpumask_pr_args(tr->tracing_cpumask)); in tracing_cpumask_read()
3412 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_write() local
3426 arch_spin_lock(&tr->max_lock); in tracing_cpumask_write()
3432 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_cpumask_write()
3434 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); in tracing_cpumask_write()
3435 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu); in tracing_cpumask_write()
3437 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_cpumask_write()
3439 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); in tracing_cpumask_write()
3440 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu); in tracing_cpumask_write()
3443 arch_spin_unlock(&tr->max_lock); in tracing_cpumask_write()
3446 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); in tracing_cpumask_write()
3470 struct trace_array *tr = m->private; in tracing_trace_options_show() local
3475 tracer_flags = tr->current_trace->flags->val; in tracing_trace_options_show()
3476 trace_opts = tr->current_trace->flags->opts; in tracing_trace_options_show()
3496 static int __set_tracer_option(struct trace_array *tr, in __set_tracer_option() argument
3500 struct tracer *trace = tr->current_trace; in __set_tracer_option()
3503 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); in __set_tracer_option()
3515 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) in set_tracer_option() argument
3517 struct tracer *trace = tr->current_trace; in set_tracer_option()
3526 return __set_tracer_option(tr, trace->flags, opts, neg); in set_tracer_option()
3541 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) in set_tracer_flag() argument
3548 if (tr->current_trace->flag_changed) in set_tracer_flag()
3549 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) in set_tracer_flag()
3561 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled); in set_tracer_flag()
3563 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); in set_tracer_flag()
3573 static int trace_set_options(struct trace_array *tr, char *option) in trace_set_options() argument
3591 ret = set_tracer_flag(tr, 1 << i, !neg); in trace_set_options()
3598 ret = set_tracer_option(tr, cmp, neg); in trace_set_options()
3610 struct trace_array *tr = m->private; in tracing_trace_options_write() local
3622 ret = trace_set_options(tr, buf); in tracing_trace_options_write()
3633 struct trace_array *tr = inode->i_private; in tracing_trace_options_open() local
3639 if (trace_array_get(tr) < 0) in tracing_trace_options_open()
3644 trace_array_put(tr); in tracing_trace_options_open()
4129 struct trace_array *tr = filp->private_data; in tracing_set_trace_read() local
4134 r = sprintf(buf, "%s\n", tr->current_trace->name); in tracing_set_trace_read()
4140 int tracer_init(struct tracer *t, struct trace_array *tr) in tracer_init() argument
4142 tracing_reset_online_cpus(&tr->trace_buffer); in tracer_init()
4143 return t->init(tr); in tracer_init()
4182 static int __tracing_resize_ring_buffer(struct trace_array *tr, in __tracing_resize_ring_buffer() argument
4195 if (!tr->trace_buffer.buffer) in __tracing_resize_ring_buffer()
4198 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
4203 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) || in __tracing_resize_ring_buffer()
4204 !tr->current_trace->use_max_tr) in __tracing_resize_ring_buffer()
4207 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
4209 int r = resize_buffer_duplicate_size(&tr->trace_buffer, in __tracing_resize_ring_buffer()
4210 &tr->trace_buffer, cpu); in __tracing_resize_ring_buffer()
4233 set_buffer_entries(&tr->max_buffer, size); in __tracing_resize_ring_buffer()
4235 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size; in __tracing_resize_ring_buffer()
4241 set_buffer_entries(&tr->trace_buffer, size); in __tracing_resize_ring_buffer()
4243 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size; in __tracing_resize_ring_buffer()
4248 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr, in tracing_resize_ring_buffer() argument
4263 ret = __tracing_resize_ring_buffer(tr, size, cpu_id); in tracing_resize_ring_buffer()
4300 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4309 static void tracing_set_nop(struct trace_array *tr) in tracing_set_nop() argument
4311 if (tr->current_trace == &nop_trace) in tracing_set_nop()
4314 tr->current_trace->enabled--; in tracing_set_nop()
4316 if (tr->current_trace->reset) in tracing_set_nop()
4317 tr->current_trace->reset(tr); in tracing_set_nop()
4319 tr->current_trace = &nop_trace; in tracing_set_nop()
4322 static void update_tracer_options(struct trace_array *tr, struct tracer *t) in update_tracer_options() argument
4327 if (!tr->dir) in update_tracer_options()
4331 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL)) in update_tracer_options()
4335 topts = create_trace_option_files(tr, t); in update_tracer_options()
4338 static int tracing_set_tracer(struct trace_array *tr, const char *buf) in tracing_set_tracer() argument
4349 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, in tracing_set_tracer()
4364 if (t == tr->current_trace) in tracing_set_tracer()
4368 if (!trace_ok_for_array(t, tr)) { in tracing_set_tracer()
4374 if (tr->current_trace->ref) { in tracing_set_tracer()
4381 tr->current_trace->enabled--; in tracing_set_tracer()
4383 if (tr->current_trace->reset) in tracing_set_tracer()
4384 tr->current_trace->reset(tr); in tracing_set_tracer()
4387 tr->current_trace = &nop_trace; in tracing_set_tracer()
4390 had_max_tr = tr->allocated_snapshot; in tracing_set_tracer()
4401 free_snapshot(tr); in tracing_set_tracer()
4404 update_tracer_options(tr, t); in tracing_set_tracer()
4408 ret = alloc_snapshot(tr); in tracing_set_tracer()
4415 ret = tracer_init(t, tr); in tracing_set_tracer()
4420 tr->current_trace = t; in tracing_set_tracer()
4421 tr->current_trace->enabled++; in tracing_set_tracer()
4422 trace_branch_enable(tr); in tracing_set_tracer()
4433 struct trace_array *tr = filp->private_data; in tracing_set_trace_write() local
4453 err = tracing_set_tracer(tr, buf); in tracing_set_trace_write()
4503 struct trace_array *tr = filp->private_data; in tracing_thresh_write() local
4511 if (tr->current_trace->update_thresh) { in tracing_thresh_write()
4512 ret = tr->current_trace->update_thresh(tr); in tracing_thresh_write()
4540 struct trace_array *tr = inode->i_private; in tracing_open_pipe() local
4547 if (trace_array_get(tr) < 0) in tracing_open_pipe()
4556 __trace_array_put(tr); in tracing_open_pipe()
4561 iter->trace = tr->current_trace; in tracing_open_pipe()
4575 if (trace_clocks[tr->clock_id].in_ns) in tracing_open_pipe()
4578 iter->tr = tr; in tracing_open_pipe()
4579 iter->trace_buffer = &tr->trace_buffer; in tracing_open_pipe()
4589 tr->current_trace->ref++; in tracing_open_pipe()
4597 __trace_array_put(tr); in tracing_open_pipe()
4605 struct trace_array *tr = inode->i_private; in tracing_release_pipe() local
4609 tr->current_trace->ref--; in tracing_release_pipe()
4620 trace_array_put(tr); in tracing_release_pipe()
4937 struct trace_array *tr = inode->i_private; in tracing_entries_read() local
4955 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries; in tracing_entries_read()
4956 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) { in tracing_entries_read()
4972 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10); in tracing_entries_read()
4985 struct trace_array *tr = inode->i_private; in tracing_entries_write() local
4999 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); in tracing_entries_write()
5012 struct trace_array *tr = filp->private_data; in tracing_total_entries_read() local
5019 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10; in tracing_total_entries_read()
5049 struct trace_array *tr = inode->i_private; in tracing_free_buffer_release() local
5053 tracer_tracing_off(tr); in tracing_free_buffer_release()
5055 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); in tracing_free_buffer_release()
5057 trace_array_put(tr); in tracing_free_buffer_release()
5067 struct trace_array *tr = filp->private_data; in tracing_mark_write() local
5127 buffer = tr->trace_buffer.buffer; in tracing_mark_write()
5169 struct trace_array *tr = m->private; in tracing_clock_show() local
5175 i == tr->clock_id ? "[" : "", trace_clocks[i].name, in tracing_clock_show()
5176 i == tr->clock_id ? "]" : ""); in tracing_clock_show()
5182 static int tracing_set_clock(struct trace_array *tr, const char *clockstr) in tracing_set_clock() argument
5195 tr->clock_id = i; in tracing_set_clock()
5197 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
5203 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_set_clock()
5206 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer) in tracing_set_clock()
5207 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
5208 tracing_reset_online_cpus(&tr->max_buffer); in tracing_set_clock()
5220 struct trace_array *tr = m->private; in tracing_clock_write() local
5235 ret = tracing_set_clock(tr, clockstr); in tracing_clock_write()
5246 struct trace_array *tr = inode->i_private; in tracing_clock_open() local
5252 if (trace_array_get(tr)) in tracing_clock_open()
5257 trace_array_put(tr); in tracing_clock_open()
5271 struct trace_array *tr = inode->i_private; in tracing_snapshot_open() local
5276 if (trace_array_get(tr) < 0) in tracing_snapshot_open()
5296 iter->tr = tr; in tracing_snapshot_open()
5297 iter->trace_buffer = &tr->max_buffer; in tracing_snapshot_open()
5304 trace_array_put(tr); in tracing_snapshot_open()
5315 struct trace_array *tr = iter->tr; in tracing_snapshot_write() local
5329 if (tr->current_trace->use_max_tr) { in tracing_snapshot_write()
5340 if (tr->allocated_snapshot) in tracing_snapshot_write()
5341 free_snapshot(tr); in tracing_snapshot_write()
5351 if (!tr->allocated_snapshot) { in tracing_snapshot_write()
5352 ret = alloc_snapshot(tr); in tracing_snapshot_write()
5359 update_max_tr(tr, current, smp_processor_id()); in tracing_snapshot_write()
5361 update_max_tr_single(tr, current, iter->cpu_file); in tracing_snapshot_write()
5365 if (tr->allocated_snapshot) { in tracing_snapshot_write()
5367 tracing_reset_online_cpus(&tr->max_buffer); in tracing_snapshot_write()
5369 tracing_reset(&tr->max_buffer, iter->cpu_file); in tracing_snapshot_write()
5425 info->iter.trace_buffer = &info->iter.tr->max_buffer; in snapshot_raw_open()
5520 struct trace_array *tr = inode->i_private; in tracing_buffers_open() local
5527 if (trace_array_get(tr) < 0) in tracing_buffers_open()
5532 trace_array_put(tr); in tracing_buffers_open()
5538 info->iter.tr = tr; in tracing_buffers_open()
5540 info->iter.trace = tr->current_trace; in tracing_buffers_open()
5541 info->iter.trace_buffer = &tr->trace_buffer; in tracing_buffers_open()
5548 tr->current_trace->ref++; in tracing_buffers_open()
5554 trace_array_put(tr); in tracing_buffers_open()
5581 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_read()
5642 iter->tr->current_trace->ref--; in tracing_buffers_release()
5644 __trace_array_put(iter->tr); in tracing_buffers_release()
5730 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_splice_read()
5835 struct trace_array *tr = inode->i_private; in tracing_stats_read() local
5836 struct trace_buffer *trace_buf = &tr->trace_buffer; in tracing_stats_read()
5861 if (trace_clocks[tr->clock_id].in_ns) { in tracing_stats_read()
6046 static struct dentry *tracing_get_dentry(struct trace_array *tr) in tracing_get_dentry() argument
6048 if (WARN_ON(!tr->dir)) in tracing_get_dentry()
6052 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_get_dentry()
6056 return tr->dir; in tracing_get_dentry()
6059 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) in tracing_dentry_percpu() argument
6063 if (tr->percpu_dir) in tracing_dentry_percpu()
6064 return tr->percpu_dir; in tracing_dentry_percpu()
6066 d_tracer = tracing_get_dentry(tr); in tracing_dentry_percpu()
6070 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer); in tracing_dentry_percpu()
6072 WARN_ONCE(!tr->percpu_dir, in tracing_dentry_percpu()
6075 return tr->percpu_dir; in tracing_dentry_percpu()
6090 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) in tracing_init_tracefs_percpu() argument
6092 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); in tracing_init_tracefs_percpu()
6108 tr, cpu, &tracing_pipe_fops); in tracing_init_tracefs_percpu()
6112 tr, cpu, &tracing_fops); in tracing_init_tracefs_percpu()
6115 tr, cpu, &tracing_buffers_fops); in tracing_init_tracefs_percpu()
6118 tr, cpu, &tracing_stats_fops); in tracing_init_tracefs_percpu()
6121 tr, cpu, &tracing_entries_fops); in tracing_init_tracefs_percpu()
6125 tr, cpu, &snapshot_fops); in tracing_init_tracefs_percpu()
6128 tr, cpu, &snapshot_raw_fops); in tracing_init_tracefs_percpu()
6140 struct trace_array *tr; member
6176 ret = __set_tracer_option(topt->tr, topt->flags, in trace_options_write()
6215 struct trace_array *tr = &global_trace; in trace_options_core_write() local
6228 ret = set_tracer_flag(tr, 1 << index, val); in trace_options_core_write()
6262 static struct dentry *trace_options_init_dentry(struct trace_array *tr) in trace_options_init_dentry() argument
6266 if (tr->options) in trace_options_init_dentry()
6267 return tr->options; in trace_options_init_dentry()
6269 d_tracer = tracing_get_dentry(tr); in trace_options_init_dentry()
6273 tr->options = tracefs_create_dir("options", d_tracer); in trace_options_init_dentry()
6274 if (!tr->options) { in trace_options_init_dentry()
6279 return tr->options; in trace_options_init_dentry()
6283 create_trace_option_file(struct trace_array *tr, in create_trace_option_file() argument
6290 t_options = trace_options_init_dentry(tr); in create_trace_option_file()
6296 topt->tr = tr; in create_trace_option_file()
6304 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) in create_trace_option_files() argument
6329 create_trace_option_file(tr, &topts[cnt], flags, in create_trace_option_files()
6350 create_trace_option_core_file(struct trace_array *tr, in create_trace_option_core_file() argument
6355 t_options = trace_options_init_dentry(tr); in create_trace_option_core_file()
6363 static __init void create_trace_options_dir(struct trace_array *tr) in create_trace_options_dir() argument
6368 t_options = trace_options_init_dentry(tr); in create_trace_options_dir()
6373 create_trace_option_core_file(tr, trace_options[i], i); in create_trace_options_dir()
6380 struct trace_array *tr = filp->private_data; in rb_simple_read() local
6384 r = tracer_tracing_is_on(tr); in rb_simple_read()
6394 struct trace_array *tr = filp->private_data; in rb_simple_write() local
6395 struct ring_buffer *buffer = tr->trace_buffer.buffer; in rb_simple_write()
6406 tracer_tracing_on(tr); in rb_simple_write()
6407 if (tr->current_trace->start) in rb_simple_write()
6408 tr->current_trace->start(tr); in rb_simple_write()
6410 tracer_tracing_off(tr); in rb_simple_write()
6411 if (tr->current_trace->stop) in rb_simple_write()
6412 tr->current_trace->stop(tr); in rb_simple_write()
6433 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
6436 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size) in allocate_trace_buffer() argument
6442 buf->tr = tr; in allocate_trace_buffer()
6455 set_buffer_entries(&tr->trace_buffer, in allocate_trace_buffer()
6456 ring_buffer_size(tr->trace_buffer.buffer, 0)); in allocate_trace_buffer()
6461 static int allocate_trace_buffers(struct trace_array *tr, int size) in allocate_trace_buffers() argument
6465 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size); in allocate_trace_buffers()
6470 ret = allocate_trace_buffer(tr, &tr->max_buffer, in allocate_trace_buffers()
6473 ring_buffer_free(tr->trace_buffer.buffer); in allocate_trace_buffers()
6474 free_percpu(tr->trace_buffer.data); in allocate_trace_buffers()
6477 tr->allocated_snapshot = allocate_snapshot; in allocate_trace_buffers()
6498 static void free_trace_buffers(struct trace_array *tr) in free_trace_buffers() argument
6500 if (!tr) in free_trace_buffers()
6503 free_trace_buffer(&tr->trace_buffer); in free_trace_buffers()
6506 free_trace_buffer(&tr->max_buffer); in free_trace_buffers()
6512 struct trace_array *tr; in instance_mkdir() local
6518 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in instance_mkdir()
6519 if (tr->name && strcmp(tr->name, name) == 0) in instance_mkdir()
6524 tr = kzalloc(sizeof(*tr), GFP_KERNEL); in instance_mkdir()
6525 if (!tr) in instance_mkdir()
6528 tr->name = kstrdup(name, GFP_KERNEL); in instance_mkdir()
6529 if (!tr->name) in instance_mkdir()
6532 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) in instance_mkdir()
6535 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); in instance_mkdir()
6537 raw_spin_lock_init(&tr->start_lock); in instance_mkdir()
6539 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; in instance_mkdir()
6541 tr->current_trace = &nop_trace; in instance_mkdir()
6543 INIT_LIST_HEAD(&tr->systems); in instance_mkdir()
6544 INIT_LIST_HEAD(&tr->events); in instance_mkdir()
6546 if (allocate_trace_buffers(tr, trace_buf_size) < 0) in instance_mkdir()
6549 tr->dir = tracefs_create_dir(name, trace_instance_dir); in instance_mkdir()
6550 if (!tr->dir) in instance_mkdir()
6553 ret = event_trace_add_tracer(tr->dir, tr); in instance_mkdir()
6555 tracefs_remove_recursive(tr->dir); in instance_mkdir()
6559 init_tracer_tracefs(tr, tr->dir); in instance_mkdir()
6561 list_add(&tr->list, &ftrace_trace_arrays); in instance_mkdir()
6568 free_trace_buffers(tr); in instance_mkdir()
6569 free_cpumask_var(tr->tracing_cpumask); in instance_mkdir()
6570 kfree(tr->name); in instance_mkdir()
6571 kfree(tr); in instance_mkdir()
6582 struct trace_array *tr; in instance_rmdir() local
6589 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in instance_rmdir()
6590 if (tr->name && strcmp(tr->name, name) == 0) { in instance_rmdir()
6599 if (tr->ref || (tr->current_trace && tr->current_trace->ref)) in instance_rmdir()
6602 list_del(&tr->list); in instance_rmdir()
6604 tracing_set_nop(tr); in instance_rmdir()
6605 event_trace_del_tracer(tr); in instance_rmdir()
6606 ftrace_destroy_function_files(tr); in instance_rmdir()
6607 debugfs_remove_recursive(tr->dir); in instance_rmdir()
6608 free_trace_buffers(tr); in instance_rmdir()
6610 kfree(tr->name); in instance_rmdir()
6611 kfree(tr); in instance_rmdir()
6631 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) in init_tracer_tracefs() argument
6636 tr, &show_traces_fops); in init_tracer_tracefs()
6639 tr, &set_tracer_fops); in init_tracer_tracefs()
6642 tr, &tracing_cpumask_fops); in init_tracer_tracefs()
6645 tr, &tracing_iter_fops); in init_tracer_tracefs()
6648 tr, &tracing_fops); in init_tracer_tracefs()
6651 tr, &tracing_pipe_fops); in init_tracer_tracefs()
6654 tr, &tracing_entries_fops); in init_tracer_tracefs()
6657 tr, &tracing_total_entries_fops); in init_tracer_tracefs()
6660 tr, &tracing_free_buffer_fops); in init_tracer_tracefs()
6663 tr, &tracing_mark_fops); in init_tracer_tracefs()
6665 trace_create_file("trace_clock", 0644, d_tracer, tr, in init_tracer_tracefs()
6669 tr, &rb_simple_fops); in init_tracer_tracefs()
6673 &tr->max_latency, &tracing_max_lat_fops); in init_tracer_tracefs()
6676 if (ftrace_create_function_files(tr, d_tracer)) in init_tracer_tracefs()
6681 tr, &snapshot_fops); in init_tracer_tracefs()
6685 tracing_init_tracefs_percpu(tr, cpu); in init_tracer_tracefs()
6720 struct trace_array *tr = &global_trace; in tracing_init_dentry() local
6723 if (tr->dir) in tracing_init_dentry()
6735 tr->dir = debugfs_create_automount("tracing", NULL, in tracing_init_dentry()
6737 if (!tr->dir) { in tracing_init_dentry()
6947 iter->tr = &global_trace; in trace_init_global_iter()
6948 iter->trace = iter->tr->current_trace; in trace_init_global_iter()
6960 if (trace_clocks[iter->tr->clock_id].in_ns) in trace_init_global_iter()
6995 atomic_inc(&per_cpu_ptr(iter.tr->trace_buffer.data, cpu)->disabled); in ftrace_dump()