Lines Matching refs:tr
83 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) in dummy_set_flag() argument
162 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
282 struct trace_array *tr; in trace_array_get() local
286 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_get()
287 if (tr == this_tr) { in trace_array_get()
288 tr->ref++; in trace_array_get()
486 static inline void ftrace_trace_stack(struct trace_array *tr,
497 static inline void ftrace_trace_stack(struct trace_array *tr, in ftrace_trace_stack() argument
506 static void tracer_tracing_on(struct trace_array *tr) in tracer_tracing_on() argument
508 if (tr->trace_buffer.buffer) in tracer_tracing_on()
509 ring_buffer_record_on(tr->trace_buffer.buffer); in tracer_tracing_on()
518 tr->buffer_disabled = 0; in tracer_tracing_on()
643 struct trace_array *tr = &global_trace; in tracing_snapshot() local
644 struct tracer *tracer = tr->current_trace; in tracing_snapshot()
653 if (!tr->allocated_snapshot) { in tracing_snapshot()
668 update_max_tr(tr, current, smp_processor_id()); in tracing_snapshot()
677 static int alloc_snapshot(struct trace_array *tr) in alloc_snapshot() argument
681 if (!tr->allocated_snapshot) { in alloc_snapshot()
684 ret = resize_buffer_duplicate_size(&tr->max_buffer, in alloc_snapshot()
685 &tr->trace_buffer, RING_BUFFER_ALL_CPUS); in alloc_snapshot()
689 tr->allocated_snapshot = true; in alloc_snapshot()
695 static void free_snapshot(struct trace_array *tr) in free_snapshot() argument
702 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); in free_snapshot()
703 set_buffer_entries(&tr->max_buffer, 1); in free_snapshot()
704 tracing_reset_online_cpus(&tr->max_buffer); in free_snapshot()
705 tr->allocated_snapshot = false; in free_snapshot()
720 struct trace_array *tr = &global_trace; in tracing_alloc_snapshot() local
723 ret = alloc_snapshot(tr); in tracing_alloc_snapshot()
772 static void tracer_tracing_off(struct trace_array *tr) in tracer_tracing_off() argument
774 if (tr->trace_buffer.buffer) in tracer_tracing_off()
775 ring_buffer_record_off(tr->trace_buffer.buffer); in tracer_tracing_off()
784 tr->buffer_disabled = 1; in tracer_tracing_off()
815 static int tracer_tracing_is_on(struct trace_array *tr) in tracer_tracing_is_on() argument
817 if (tr->trace_buffer.buffer) in tracer_tracing_is_on()
818 return ring_buffer_record_is_on(tr->trace_buffer.buffer); in tracer_tracing_is_on()
819 return !tr->buffer_disabled; in tracer_tracing_is_on()
1031 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) in __update_max_tr() argument
1033 struct trace_buffer *trace_buf = &tr->trace_buffer; in __update_max_tr()
1034 struct trace_buffer *max_buf = &tr->max_buffer; in __update_max_tr()
1041 max_data->saved_latency = tr->max_latency; in __update_max_tr()
1074 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) in update_max_tr() argument
1078 if (tr->stop_count) in update_max_tr()
1083 if (!tr->allocated_snapshot) { in update_max_tr()
1085 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr()
1089 arch_spin_lock(&tr->max_lock); in update_max_tr()
1091 buf = tr->trace_buffer.buffer; in update_max_tr()
1092 tr->trace_buffer.buffer = tr->max_buffer.buffer; in update_max_tr()
1093 tr->max_buffer.buffer = buf; in update_max_tr()
1095 __update_max_tr(tr, tsk, cpu); in update_max_tr()
1096 arch_spin_unlock(&tr->max_lock); in update_max_tr()
1108 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) in update_max_tr_single() argument
1112 if (tr->stop_count) in update_max_tr_single()
1116 if (!tr->allocated_snapshot) { in update_max_tr_single()
1118 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr_single()
1122 arch_spin_lock(&tr->max_lock); in update_max_tr_single()
1124 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu); in update_max_tr_single()
1133 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, in update_max_tr_single()
1139 __update_max_tr(tr, tsk, cpu); in update_max_tr_single()
1140 arch_spin_unlock(&tr->max_lock); in update_max_tr_single()
1157 struct trace_array *tr = &global_trace; in run_tracer_selftest() local
1158 struct tracer *saved_tracer = tr->current_trace; in run_tracer_selftest()
1171 tracing_reset_online_cpus(&tr->trace_buffer); in run_tracer_selftest()
1173 tr->current_trace = type; in run_tracer_selftest()
1179 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, in run_tracer_selftest()
1181 tr->allocated_snapshot = true; in run_tracer_selftest()
1187 ret = type->selftest(type, tr); in run_tracer_selftest()
1189 tr->current_trace = saved_tracer; in run_tracer_selftest()
1197 tracing_reset_online_cpus(&tr->trace_buffer); in run_tracer_selftest()
1201 tr->allocated_snapshot = false; in run_tracer_selftest()
1205 ring_buffer_resize(tr->max_buffer.buffer, 1, in run_tracer_selftest()
1220 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
1343 struct trace_array *tr; in tracing_reset_all_online_cpus() local
1345 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in tracing_reset_all_online_cpus()
1346 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_reset_all_online_cpus()
1348 tracing_reset_online_cpus(&tr->max_buffer); in tracing_reset_all_online_cpus()
1468 static void tracing_start_tr(struct trace_array *tr) in tracing_start_tr() argument
1477 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_start_tr()
1480 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_start_tr()
1482 if (--tr->stop_count) { in tracing_start_tr()
1483 if (tr->stop_count < 0) { in tracing_start_tr()
1486 tr->stop_count = 0; in tracing_start_tr()
1491 buffer = tr->trace_buffer.buffer; in tracing_start_tr()
1496 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_start_tr()
1533 static void tracing_stop_tr(struct trace_array *tr) in tracing_stop_tr() argument
1539 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_stop_tr()
1542 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_stop_tr()
1543 if (tr->stop_count++) in tracing_stop_tr()
1546 buffer = tr->trace_buffer.buffer; in tracing_stop_tr()
1551 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_stop_tr()
1695 void trace_buffer_unlock_commit(struct trace_array *tr, in trace_buffer_unlock_commit() argument
1702 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL); in trace_buffer_unlock_commit()
1717 *current_rb = trace_file->tr->trace_buffer.buffer; in trace_event_buffer_lock_reserve()
1746 void trace_buffer_unlock_commit_regs(struct trace_array *tr, in trace_buffer_unlock_commit_regs() argument
1754 ftrace_trace_stack(tr, buffer, flags, 0, pc, regs); in trace_buffer_unlock_commit_regs()
1767 trace_function(struct trace_array *tr, in trace_function() argument
1772 struct ring_buffer *buffer = tr->trace_buffer.buffer; in trace_function()
1879 static inline void ftrace_trace_stack(struct trace_array *tr, in ftrace_trace_stack() argument
1884 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) in ftrace_trace_stack()
1890 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, in __trace_stack() argument
1893 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL); in __trace_stack()
1973 static void __trace_userstack(struct trace_array *tr, unsigned long flags) in __trace_userstack() argument
1975 ftrace_trace_userstack(tr, flags, preempt_count()); in __trace_userstack()
2132 struct trace_array *tr = &global_trace; in trace_vbprintk() local
2160 buffer = tr->trace_buffer.buffer; in trace_vbprintk()
2172 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL); in trace_vbprintk()
2233 int trace_array_vprintk(struct trace_array *tr, in trace_array_vprintk() argument
2236 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args); in trace_array_vprintk()
2239 int trace_array_printk(struct trace_array *tr, in trace_array_printk() argument
2249 ret = trace_array_vprintk(tr, ip, fmt, ap); in trace_array_printk()
2454 struct trace_array *tr = iter->tr; in s_start() local
2467 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name)) in s_start()
2468 *iter->trace = *tr->current_trace; in s_start()
2663 struct trace_array *tr = iter->tr; in test_cpu_buff_start() local
2665 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE)) in test_cpu_buff_start()
2688 struct trace_array *tr = iter->tr; in print_trace_fmt() local
2690 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK); in print_trace_fmt()
2700 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_trace_fmt()
2720 struct trace_array *tr = iter->tr; in print_raw_fmt() local
2727 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) in print_raw_fmt()
2745 struct trace_array *tr = iter->tr; in print_hex_fmt() local
2753 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_hex_fmt()
2775 struct trace_array *tr = iter->tr; in print_bin_fmt() local
2782 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_bin_fmt()
2831 struct trace_array *tr = iter->tr; in print_trace_line() local
2832 unsigned long trace_flags = tr->trace_flags; in print_trace_line()
2878 struct trace_array *tr = iter->tr; in trace_latency_header() local
2887 if (!(tr->trace_flags & TRACE_ITER_VERBOSE)) in trace_latency_header()
2894 struct trace_array *tr = iter->tr; in trace_default_header() local
2895 unsigned long trace_flags = tr->trace_flags; in trace_default_header()
2953 if (iter->tr->allocated_snapshot) in print_snapshot_help()
2975 if (iter->tr) { in s_show()
3034 struct trace_array *tr = inode->i_private; in __tracing_open() local
3059 *iter->trace = *tr->current_trace; in __tracing_open()
3064 iter->tr = tr; in __tracing_open()
3068 if (tr->current_trace->print_max || snapshot) in __tracing_open()
3069 iter->trace_buffer = &tr->max_buffer; in __tracing_open()
3072 iter->trace_buffer = &tr->trace_buffer; in __tracing_open()
3087 if (trace_clocks[tr->clock_id].in_ns) in __tracing_open()
3092 tracing_stop_tr(tr); in __tracing_open()
3146 struct trace_array *tr = inode->i_private; in tracing_open_generic_tr() local
3151 if (trace_array_get(tr) < 0) in tracing_open_generic_tr()
3161 struct trace_array *tr = inode->i_private; in tracing_release() local
3167 trace_array_put(tr); in tracing_release()
3185 tracing_start_tr(tr); in tracing_release()
3187 __trace_array_put(tr); in tracing_release()
3202 struct trace_array *tr = inode->i_private; in tracing_release_generic_tr() local
3204 trace_array_put(tr); in tracing_release_generic_tr()
3210 struct trace_array *tr = inode->i_private; in tracing_single_release_tr() local
3212 trace_array_put(tr); in tracing_single_release_tr()
3219 struct trace_array *tr = inode->i_private; in tracing_open() local
3223 if (trace_array_get(tr) < 0) in tracing_open()
3231 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_open()
3233 tracing_reset(&tr->trace_buffer, cpu); in tracing_open()
3240 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) in tracing_open()
3245 trace_array_put(tr); in tracing_open()
3256 trace_ok_for_array(struct tracer *t, struct trace_array *tr) in trace_ok_for_array() argument
3258 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; in trace_ok_for_array()
3263 get_tracer_for_array(struct trace_array *tr, struct tracer *t) in get_tracer_for_array() argument
3265 while (t && !trace_ok_for_array(t, tr)) in get_tracer_for_array()
3274 struct trace_array *tr = m->private; in t_next() local
3280 t = get_tracer_for_array(tr, t->next); in t_next()
3287 struct trace_array *tr = m->private; in t_start() local
3293 t = get_tracer_for_array(tr, trace_types); in t_start()
3330 struct trace_array *tr = inode->i_private; in show_traces_open() local
3342 m->private = tr; in show_traces_open()
3397 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_read() local
3403 cpumask_pr_args(tr->tracing_cpumask)); in tracing_cpumask_read()
3420 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_write() local
3434 arch_spin_lock(&tr->max_lock); in tracing_cpumask_write()
3440 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_cpumask_write()
3442 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); in tracing_cpumask_write()
3443 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu); in tracing_cpumask_write()
3445 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_cpumask_write()
3447 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); in tracing_cpumask_write()
3448 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu); in tracing_cpumask_write()
3451 arch_spin_unlock(&tr->max_lock); in tracing_cpumask_write()
3454 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); in tracing_cpumask_write()
3478 struct trace_array *tr = m->private; in tracing_trace_options_show() local
3483 tracer_flags = tr->current_trace->flags->val; in tracing_trace_options_show()
3484 trace_opts = tr->current_trace->flags->opts; in tracing_trace_options_show()
3487 if (tr->trace_flags & (1 << i)) in tracing_trace_options_show()
3504 static int __set_tracer_option(struct trace_array *tr, in __set_tracer_option() argument
3508 struct tracer *trace = tr->current_trace; in __set_tracer_option()
3511 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); in __set_tracer_option()
3523 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) in set_tracer_option() argument
3525 struct tracer *trace = tr->current_trace; in set_tracer_option()
3534 return __set_tracer_option(tr, trace->flags, opts, neg); in set_tracer_option()
3549 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) in set_tracer_flag() argument
3552 if (!!(tr->trace_flags & mask) == !!enabled) in set_tracer_flag()
3556 if (tr->current_trace->flag_changed) in set_tracer_flag()
3557 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) in set_tracer_flag()
3561 tr->trace_flags |= mask; in set_tracer_flag()
3563 tr->trace_flags &= ~mask; in set_tracer_flag()
3569 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled); in set_tracer_flag()
3571 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); in set_tracer_flag()
3583 static int trace_set_options(struct trace_array *tr, char *option) in trace_set_options() argument
3602 ret = set_tracer_flag(tr, 1 << i, !neg); in trace_set_options()
3609 ret = set_tracer_option(tr, cmp, neg); in trace_set_options()
3648 struct trace_array *tr = m->private; in tracing_trace_options_write() local
3660 ret = trace_set_options(tr, buf); in tracing_trace_options_write()
3671 struct trace_array *tr = inode->i_private; in tracing_trace_options_open() local
3677 if (trace_array_get(tr) < 0) in tracing_trace_options_open()
3682 trace_array_put(tr); in tracing_trace_options_open()
4167 struct trace_array *tr = filp->private_data; in tracing_set_trace_read() local
4172 r = sprintf(buf, "%s\n", tr->current_trace->name); in tracing_set_trace_read()
4178 int tracer_init(struct tracer *t, struct trace_array *tr) in tracer_init() argument
4180 tracing_reset_online_cpus(&tr->trace_buffer); in tracer_init()
4181 return t->init(tr); in tracer_init()
4220 static int __tracing_resize_ring_buffer(struct trace_array *tr, in __tracing_resize_ring_buffer() argument
4233 if (!tr->trace_buffer.buffer) in __tracing_resize_ring_buffer()
4236 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
4241 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) || in __tracing_resize_ring_buffer()
4242 !tr->current_trace->use_max_tr) in __tracing_resize_ring_buffer()
4245 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
4247 int r = resize_buffer_duplicate_size(&tr->trace_buffer, in __tracing_resize_ring_buffer()
4248 &tr->trace_buffer, cpu); in __tracing_resize_ring_buffer()
4271 set_buffer_entries(&tr->max_buffer, size); in __tracing_resize_ring_buffer()
4273 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size; in __tracing_resize_ring_buffer()
4279 set_buffer_entries(&tr->trace_buffer, size); in __tracing_resize_ring_buffer()
4281 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size; in __tracing_resize_ring_buffer()
4286 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr, in tracing_resize_ring_buffer() argument
4301 ret = __tracing_resize_ring_buffer(tr, size, cpu_id); in tracing_resize_ring_buffer()
4338 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4344 static void tracing_set_nop(struct trace_array *tr) in tracing_set_nop() argument
4346 if (tr->current_trace == &nop_trace) in tracing_set_nop()
4349 tr->current_trace->enabled--; in tracing_set_nop()
4351 if (tr->current_trace->reset) in tracing_set_nop()
4352 tr->current_trace->reset(tr); in tracing_set_nop()
4354 tr->current_trace = &nop_trace; in tracing_set_nop()
4357 static void add_tracer_options(struct trace_array *tr, struct tracer *t) in add_tracer_options() argument
4360 if (!tr->dir) in add_tracer_options()
4363 create_trace_option_files(tr, t); in add_tracer_options()
4366 static int tracing_set_tracer(struct trace_array *tr, const char *buf) in tracing_set_tracer() argument
4377 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, in tracing_set_tracer()
4392 if (t == tr->current_trace) in tracing_set_tracer()
4396 if (!trace_ok_for_array(t, tr)) { in tracing_set_tracer()
4402 if (tr->current_trace->ref) { in tracing_set_tracer()
4409 tr->current_trace->enabled--; in tracing_set_tracer()
4411 if (tr->current_trace->reset) in tracing_set_tracer()
4412 tr->current_trace->reset(tr); in tracing_set_tracer()
4415 tr->current_trace = &nop_trace; in tracing_set_tracer()
4418 had_max_tr = tr->allocated_snapshot; in tracing_set_tracer()
4429 free_snapshot(tr); in tracing_set_tracer()
4435 ret = alloc_snapshot(tr); in tracing_set_tracer()
4442 ret = tracer_init(t, tr); in tracing_set_tracer()
4447 tr->current_trace = t; in tracing_set_tracer()
4448 tr->current_trace->enabled++; in tracing_set_tracer()
4449 trace_branch_enable(tr); in tracing_set_tracer()
4460 struct trace_array *tr = filp->private_data; in tracing_set_trace_write() local
4480 err = tracing_set_tracer(tr, buf); in tracing_set_trace_write()
4530 struct trace_array *tr = filp->private_data; in tracing_thresh_write() local
4538 if (tr->current_trace->update_thresh) { in tracing_thresh_write()
4539 ret = tr->current_trace->update_thresh(tr); in tracing_thresh_write()
4571 struct trace_array *tr = inode->i_private; in tracing_open_pipe() local
4578 if (trace_array_get(tr) < 0) in tracing_open_pipe()
4587 __trace_array_put(tr); in tracing_open_pipe()
4592 iter->trace = tr->current_trace; in tracing_open_pipe()
4602 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) in tracing_open_pipe()
4606 if (trace_clocks[tr->clock_id].in_ns) in tracing_open_pipe()
4609 iter->tr = tr; in tracing_open_pipe()
4610 iter->trace_buffer = &tr->trace_buffer; in tracing_open_pipe()
4620 tr->current_trace->ref++; in tracing_open_pipe()
4628 __trace_array_put(tr); in tracing_open_pipe()
4636 struct trace_array *tr = inode->i_private; in tracing_release_pipe() local
4640 tr->current_trace->ref--; in tracing_release_pipe()
4651 trace_array_put(tr); in tracing_release_pipe()
4659 struct trace_array *tr = iter->tr; in trace_poll() local
4665 if (tr->trace_flags & TRACE_ITER_BLOCK) in trace_poll()
4970 struct trace_array *tr = inode->i_private; in tracing_entries_read() local
4988 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries; in tracing_entries_read()
4989 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) { in tracing_entries_read()
5005 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10); in tracing_entries_read()
5018 struct trace_array *tr = inode->i_private; in tracing_entries_write() local
5032 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); in tracing_entries_write()
5045 struct trace_array *tr = filp->private_data; in tracing_total_entries_read() local
5052 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10; in tracing_total_entries_read()
5082 struct trace_array *tr = inode->i_private; in tracing_free_buffer_release() local
5085 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE) in tracing_free_buffer_release()
5086 tracer_tracing_off(tr); in tracing_free_buffer_release()
5088 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); in tracing_free_buffer_release()
5090 trace_array_put(tr); in tracing_free_buffer_release()
5100 struct trace_array *tr = filp->private_data; in tracing_mark_write() local
5118 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) in tracing_mark_write()
5160 buffer = tr->trace_buffer.buffer; in tracing_mark_write()
5202 struct trace_array *tr = m->private; in tracing_clock_show() local
5208 i == tr->clock_id ? "[" : "", trace_clocks[i].name, in tracing_clock_show()
5209 i == tr->clock_id ? "]" : ""); in tracing_clock_show()
5215 static int tracing_set_clock(struct trace_array *tr, const char *clockstr) in tracing_set_clock() argument
5228 tr->clock_id = i; in tracing_set_clock()
5230 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
5236 tracing_reset_online_cpus(&tr->trace_buffer); in tracing_set_clock()
5239 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer) in tracing_set_clock()
5240 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
5241 tracing_reset_online_cpus(&tr->max_buffer); in tracing_set_clock()
5253 struct trace_array *tr = m->private; in tracing_clock_write() local
5268 ret = tracing_set_clock(tr, clockstr); in tracing_clock_write()
5279 struct trace_array *tr = inode->i_private; in tracing_clock_open() local
5285 if (trace_array_get(tr)) in tracing_clock_open()
5290 trace_array_put(tr); in tracing_clock_open()
5304 struct trace_array *tr = inode->i_private; in tracing_snapshot_open() local
5309 if (trace_array_get(tr) < 0) in tracing_snapshot_open()
5329 iter->tr = tr; in tracing_snapshot_open()
5330 iter->trace_buffer = &tr->max_buffer; in tracing_snapshot_open()
5337 trace_array_put(tr); in tracing_snapshot_open()
5348 struct trace_array *tr = iter->tr; in tracing_snapshot_write() local
5362 if (tr->current_trace->use_max_tr) { in tracing_snapshot_write()
5373 if (tr->allocated_snapshot) in tracing_snapshot_write()
5374 free_snapshot(tr); in tracing_snapshot_write()
5384 if (!tr->allocated_snapshot) { in tracing_snapshot_write()
5385 ret = alloc_snapshot(tr); in tracing_snapshot_write()
5392 update_max_tr(tr, current, smp_processor_id()); in tracing_snapshot_write()
5394 update_max_tr_single(tr, current, iter->cpu_file); in tracing_snapshot_write()
5398 if (tr->allocated_snapshot) { in tracing_snapshot_write()
5400 tracing_reset_online_cpus(&tr->max_buffer); in tracing_snapshot_write()
5402 tracing_reset(&tr->max_buffer, iter->cpu_file); in tracing_snapshot_write()
5458 info->iter.trace_buffer = &info->iter.tr->max_buffer; in snapshot_raw_open()
5555 struct trace_array *tr = inode->i_private; in tracing_buffers_open() local
5562 if (trace_array_get(tr) < 0) in tracing_buffers_open()
5567 trace_array_put(tr); in tracing_buffers_open()
5573 info->iter.tr = tr; in tracing_buffers_open()
5575 info->iter.trace = tr->current_trace; in tracing_buffers_open()
5576 info->iter.trace_buffer = &tr->trace_buffer; in tracing_buffers_open()
5583 tr->current_trace->ref++; in tracing_buffers_open()
5589 trace_array_put(tr); in tracing_buffers_open()
5616 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_read()
5677 iter->tr->current_trace->ref--; in tracing_buffers_release()
5679 __trace_array_put(iter->tr); in tracing_buffers_release()
5765 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_splice_read()
5870 struct trace_array *tr = inode->i_private; in tracing_stats_read() local
5871 struct trace_buffer *trace_buf = &tr->trace_buffer; in tracing_stats_read()
5896 if (trace_clocks[tr->clock_id].in_ns) { in tracing_stats_read()
6081 static struct dentry *tracing_get_dentry(struct trace_array *tr) in tracing_get_dentry() argument
6083 if (WARN_ON(!tr->dir)) in tracing_get_dentry()
6087 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_get_dentry()
6091 return tr->dir; in tracing_get_dentry()
6094 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) in tracing_dentry_percpu() argument
6098 if (tr->percpu_dir) in tracing_dentry_percpu()
6099 return tr->percpu_dir; in tracing_dentry_percpu()
6101 d_tracer = tracing_get_dentry(tr); in tracing_dentry_percpu()
6105 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer); in tracing_dentry_percpu()
6107 WARN_ONCE(!tr->percpu_dir, in tracing_dentry_percpu()
6110 return tr->percpu_dir; in tracing_dentry_percpu()
6125 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) in tracing_init_tracefs_percpu() argument
6127 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); in tracing_init_tracefs_percpu()
6143 tr, cpu, &tracing_pipe_fops); in tracing_init_tracefs_percpu()
6147 tr, cpu, &tracing_fops); in tracing_init_tracefs_percpu()
6150 tr, cpu, &tracing_buffers_fops); in tracing_init_tracefs_percpu()
6153 tr, cpu, &tracing_stats_fops); in tracing_init_tracefs_percpu()
6156 tr, cpu, &tracing_entries_fops); in tracing_init_tracefs_percpu()
6160 tr, cpu, &snapshot_fops); in tracing_init_tracefs_percpu()
6163 tr, cpu, &snapshot_raw_fops); in tracing_init_tracefs_percpu()
6204 ret = __set_tracer_option(topt->tr, topt->flags, in trace_options_write()
6262 struct trace_array *tr; in trace_options_core_read() local
6266 get_tr_index(tr_index, &tr, &index); in trace_options_core_read()
6268 if (tr->trace_flags & (1 << index)) in trace_options_core_read()
6281 struct trace_array *tr; in trace_options_core_write() local
6286 get_tr_index(tr_index, &tr, &index); in trace_options_core_write()
6296 ret = set_tracer_flag(tr, 1 << index, val); in trace_options_core_write()
6330 static struct dentry *trace_options_init_dentry(struct trace_array *tr) in trace_options_init_dentry() argument
6334 if (tr->options) in trace_options_init_dentry()
6335 return tr->options; in trace_options_init_dentry()
6337 d_tracer = tracing_get_dentry(tr); in trace_options_init_dentry()
6341 tr->options = tracefs_create_dir("options", d_tracer); in trace_options_init_dentry()
6342 if (!tr->options) { in trace_options_init_dentry()
6347 return tr->options; in trace_options_init_dentry()
6351 create_trace_option_file(struct trace_array *tr, in create_trace_option_file() argument
6358 t_options = trace_options_init_dentry(tr); in create_trace_option_file()
6364 topt->tr = tr; in create_trace_option_file()
6372 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) in create_trace_option_files() argument
6393 if (!trace_ok_for_array(tracer, tr)) in create_trace_option_files()
6396 for (i = 0; i < tr->nr_topts; i++) { in create_trace_option_files()
6401 if (tr->topts[i].tracer->flags == tracer->flags) in create_trace_option_files()
6414 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), in create_trace_option_files()
6421 tr->topts = tr_topts; in create_trace_option_files()
6422 tr->topts[tr->nr_topts].tracer = tracer; in create_trace_option_files()
6423 tr->topts[tr->nr_topts].topts = topts; in create_trace_option_files()
6424 tr->nr_topts++; in create_trace_option_files()
6427 create_trace_option_file(tr, &topts[cnt], flags, in create_trace_option_files()
6436 create_trace_option_core_file(struct trace_array *tr, in create_trace_option_core_file() argument
6441 t_options = trace_options_init_dentry(tr); in create_trace_option_core_file()
6446 (void *)&tr->trace_flags_index[index], in create_trace_option_core_file()
6450 static void create_trace_options_dir(struct trace_array *tr) in create_trace_options_dir() argument
6453 bool top_level = tr == &global_trace; in create_trace_options_dir()
6456 t_options = trace_options_init_dentry(tr); in create_trace_options_dir()
6463 create_trace_option_core_file(tr, trace_options[i], i); in create_trace_options_dir()
6471 struct trace_array *tr = filp->private_data; in rb_simple_read() local
6475 r = tracer_tracing_is_on(tr); in rb_simple_read()
6485 struct trace_array *tr = filp->private_data; in rb_simple_write() local
6486 struct ring_buffer *buffer = tr->trace_buffer.buffer; in rb_simple_write()
6497 tracer_tracing_on(tr); in rb_simple_write()
6498 if (tr->current_trace->start) in rb_simple_write()
6499 tr->current_trace->start(tr); in rb_simple_write()
6501 tracer_tracing_off(tr); in rb_simple_write()
6502 if (tr->current_trace->stop) in rb_simple_write()
6503 tr->current_trace->stop(tr); in rb_simple_write()
6524 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
6527 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size) in allocate_trace_buffer() argument
6531 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; in allocate_trace_buffer()
6533 buf->tr = tr; in allocate_trace_buffer()
6546 set_buffer_entries(&tr->trace_buffer, in allocate_trace_buffer()
6547 ring_buffer_size(tr->trace_buffer.buffer, 0)); in allocate_trace_buffer()
6552 static int allocate_trace_buffers(struct trace_array *tr, int size) in allocate_trace_buffers() argument
6556 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size); in allocate_trace_buffers()
6561 ret = allocate_trace_buffer(tr, &tr->max_buffer, in allocate_trace_buffers()
6564 ring_buffer_free(tr->trace_buffer.buffer); in allocate_trace_buffers()
6565 free_percpu(tr->trace_buffer.data); in allocate_trace_buffers()
6568 tr->allocated_snapshot = allocate_snapshot; in allocate_trace_buffers()
6589 static void free_trace_buffers(struct trace_array *tr) in free_trace_buffers() argument
6591 if (!tr) in free_trace_buffers()
6594 free_trace_buffer(&tr->trace_buffer); in free_trace_buffers()
6597 free_trace_buffer(&tr->max_buffer); in free_trace_buffers()
6601 static void init_trace_flags_index(struct trace_array *tr) in init_trace_flags_index() argument
6607 tr->trace_flags_index[i] = i; in init_trace_flags_index()
6610 static void __update_tracer_options(struct trace_array *tr) in __update_tracer_options() argument
6615 add_tracer_options(tr, t); in __update_tracer_options()
6618 static void update_tracer_options(struct trace_array *tr) in update_tracer_options() argument
6621 __update_tracer_options(tr); in update_tracer_options()
6627 struct trace_array *tr; in instance_mkdir() local
6633 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in instance_mkdir()
6634 if (tr->name && strcmp(tr->name, name) == 0) in instance_mkdir()
6639 tr = kzalloc(sizeof(*tr), GFP_KERNEL); in instance_mkdir()
6640 if (!tr) in instance_mkdir()
6643 tr->name = kstrdup(name, GFP_KERNEL); in instance_mkdir()
6644 if (!tr->name) in instance_mkdir()
6647 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) in instance_mkdir()
6650 tr->trace_flags = global_trace.trace_flags; in instance_mkdir()
6652 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); in instance_mkdir()
6654 raw_spin_lock_init(&tr->start_lock); in instance_mkdir()
6656 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; in instance_mkdir()
6658 tr->current_trace = &nop_trace; in instance_mkdir()
6660 INIT_LIST_HEAD(&tr->systems); in instance_mkdir()
6661 INIT_LIST_HEAD(&tr->events); in instance_mkdir()
6663 if (allocate_trace_buffers(tr, trace_buf_size) < 0) in instance_mkdir()
6666 tr->dir = tracefs_create_dir(name, trace_instance_dir); in instance_mkdir()
6667 if (!tr->dir) in instance_mkdir()
6670 ret = event_trace_add_tracer(tr->dir, tr); in instance_mkdir()
6672 tracefs_remove_recursive(tr->dir); in instance_mkdir()
6676 init_tracer_tracefs(tr, tr->dir); in instance_mkdir()
6677 init_trace_flags_index(tr); in instance_mkdir()
6678 __update_tracer_options(tr); in instance_mkdir()
6680 list_add(&tr->list, &ftrace_trace_arrays); in instance_mkdir()
6687 free_trace_buffers(tr); in instance_mkdir()
6688 free_cpumask_var(tr->tracing_cpumask); in instance_mkdir()
6689 kfree(tr->name); in instance_mkdir()
6690 kfree(tr); in instance_mkdir()
6701 struct trace_array *tr; in instance_rmdir() local
6709 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in instance_rmdir()
6710 if (tr->name && strcmp(tr->name, name) == 0) { in instance_rmdir()
6719 if (tr->ref || (tr->current_trace && tr->current_trace->ref)) in instance_rmdir()
6722 list_del(&tr->list); in instance_rmdir()
6724 tracing_set_nop(tr); in instance_rmdir()
6725 event_trace_del_tracer(tr); in instance_rmdir()
6726 ftrace_destroy_function_files(tr); in instance_rmdir()
6727 tracefs_remove_recursive(tr->dir); in instance_rmdir()
6728 free_trace_buffers(tr); in instance_rmdir()
6730 for (i = 0; i < tr->nr_topts; i++) { in instance_rmdir()
6731 kfree(tr->topts[i].topts); in instance_rmdir()
6733 kfree(tr->topts); in instance_rmdir()
6735 kfree(tr->name); in instance_rmdir()
6736 kfree(tr); in instance_rmdir()
6756 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) in init_tracer_tracefs() argument
6761 tr, &show_traces_fops); in init_tracer_tracefs()
6764 tr, &set_tracer_fops); in init_tracer_tracefs()
6767 tr, &tracing_cpumask_fops); in init_tracer_tracefs()
6770 tr, &tracing_iter_fops); in init_tracer_tracefs()
6773 tr, &tracing_fops); in init_tracer_tracefs()
6776 tr, &tracing_pipe_fops); in init_tracer_tracefs()
6779 tr, &tracing_entries_fops); in init_tracer_tracefs()
6782 tr, &tracing_total_entries_fops); in init_tracer_tracefs()
6785 tr, &tracing_free_buffer_fops); in init_tracer_tracefs()
6788 tr, &tracing_mark_fops); in init_tracer_tracefs()
6790 trace_create_file("trace_clock", 0644, d_tracer, tr, in init_tracer_tracefs()
6794 tr, &rb_simple_fops); in init_tracer_tracefs()
6796 create_trace_options_dir(tr); in init_tracer_tracefs()
6800 &tr->max_latency, &tracing_max_lat_fops); in init_tracer_tracefs()
6803 if (ftrace_create_function_files(tr, d_tracer)) in init_tracer_tracefs()
6808 tr, &snapshot_fops); in init_tracer_tracefs()
6812 tracing_init_tracefs_percpu(tr, cpu); in init_tracer_tracefs()
6847 struct trace_array *tr = &global_trace; in tracing_init_dentry() local
6850 if (tr->dir) in tracing_init_dentry()
6864 tr->dir = debugfs_create_automount("tracing", NULL, in tracing_init_dentry()
6866 if (!tr->dir) { in tracing_init_dentry()
7072 iter->tr = &global_trace; in trace_init_global_iter()
7073 iter->trace = iter->tr->current_trace; in trace_init_global_iter()
7085 if (trace_clocks[iter->tr->clock_id].in_ns) in trace_init_global_iter()
7094 struct trace_array *tr = &global_trace; in ftrace_dump() local
7124 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ; in ftrace_dump()
7127 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ; in ftrace_dump()
7190 tr->trace_flags |= old_userobj; in ftrace_dump()