Lines Matching refs:tr
101 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) in dummy_set_flag() argument
183 int tracing_set_tracer(struct trace_array *tr, const char *buf);
184 static void ftrace_trace_userstack(struct trace_array *tr,
516 static __always_inline bool printk_binsafe(struct trace_array *tr) in printk_binsafe() argument
524 return !(tr->flags & TRACE_ARRAY_FL_BOOT); in printk_binsafe()
527 static void update_printk_trace(struct trace_array *tr) in update_printk_trace() argument
529 if (printk_trace == tr) in update_printk_trace()
533 printk_trace = tr; in update_printk_trace()
534 tr->trace_flags |= TRACE_ITER_TRACE_PRINTK; in update_printk_trace()
537 void trace_set_ring_buffer_expanded(struct trace_array *tr) in trace_set_ring_buffer_expanded() argument
539 if (!tr) in trace_set_ring_buffer_expanded()
540 tr = &global_trace; in trace_set_ring_buffer_expanded()
541 tr->ring_buffer_expanded = true; in trace_set_ring_buffer_expanded()
548 struct trace_array *tr; in trace_array_get() local
551 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_get()
552 if (tr == this_tr) { in trace_array_get()
553 tr->ref++; in trace_array_get()
587 int tracing_check_open_get_tr(struct trace_array *tr) in tracing_check_open_get_tr() argument
598 if (tr && trace_array_get(tr) < 0) in tracing_check_open_get_tr()
986 static void __ftrace_trace_stack(struct trace_array *tr,
990 static inline void ftrace_trace_stack(struct trace_array *tr,
996 static inline void __ftrace_trace_stack(struct trace_array *tr, in __ftrace_trace_stack() argument
1002 static inline void ftrace_trace_stack(struct trace_array *tr, in ftrace_trace_stack() argument
1035 void tracer_tracing_on(struct trace_array *tr) in tracer_tracing_on() argument
1037 if (tr->array_buffer.buffer) in tracer_tracing_on()
1038 ring_buffer_record_on(tr->array_buffer.buffer); in tracer_tracing_on()
1047 tr->buffer_disabled = 0; in tracer_tracing_on()
1082 int __trace_array_puts(struct trace_array *tr, unsigned long ip, in __trace_array_puts() argument
1091 if (!(tr->trace_flags & TRACE_ITER_PRINTK)) in __trace_array_puts()
1094 if (unlikely(tracing_selftest_running && tr == &global_trace)) in __trace_array_puts()
1103 buffer = tr->array_buffer.buffer; in __trace_array_puts()
1125 ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); in __trace_array_puts()
1151 struct trace_array *tr = READ_ONCE(printk_trace); in __trace_bputs() local
1159 if (!printk_binsafe(tr)) in __trace_bputs()
1162 if (!(tr->trace_flags & TRACE_ITER_PRINTK)) in __trace_bputs()
1169 buffer = tr->array_buffer.buffer; in __trace_bputs()
1182 ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); in __trace_bputs()
1192 static void tracing_snapshot_instance_cond(struct trace_array *tr, in tracing_snapshot_instance_cond() argument
1195 struct tracer *tracer = tr->current_trace; in tracing_snapshot_instance_cond()
1199 trace_array_puts(tr, "*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n"); in tracing_snapshot_instance_cond()
1200 trace_array_puts(tr, "*** snapshot is being ignored ***\n"); in tracing_snapshot_instance_cond()
1204 if (!tr->allocated_snapshot) { in tracing_snapshot_instance_cond()
1205 trace_array_puts(tr, "*** SNAPSHOT NOT ALLOCATED ***\n"); in tracing_snapshot_instance_cond()
1206 trace_array_puts(tr, "*** stopping trace here! ***\n"); in tracing_snapshot_instance_cond()
1207 tracer_tracing_off(tr); in tracing_snapshot_instance_cond()
1213 trace_array_puts(tr, "*** LATENCY TRACER ACTIVE ***\n"); in tracing_snapshot_instance_cond()
1214 trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); in tracing_snapshot_instance_cond()
1218 if (tr->mapped) { in tracing_snapshot_instance_cond()
1219 trace_array_puts(tr, "*** BUFFER MEMORY MAPPED ***\n"); in tracing_snapshot_instance_cond()
1220 trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); in tracing_snapshot_instance_cond()
1225 update_max_tr(tr, current, smp_processor_id(), cond_data); in tracing_snapshot_instance_cond()
1229 void tracing_snapshot_instance(struct trace_array *tr) in tracing_snapshot_instance() argument
1231 tracing_snapshot_instance_cond(tr, NULL); in tracing_snapshot_instance()
1250 struct trace_array *tr = &global_trace; in tracing_snapshot() local
1252 tracing_snapshot_instance(tr); in tracing_snapshot()
1269 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data) in tracing_snapshot_cond() argument
1271 tracing_snapshot_instance_cond(tr, cond_data); in tracing_snapshot_cond()
1289 void *tracing_cond_snapshot_data(struct trace_array *tr) in tracing_cond_snapshot_data() argument
1294 arch_spin_lock(&tr->max_lock); in tracing_cond_snapshot_data()
1296 if (tr->cond_snapshot) in tracing_cond_snapshot_data()
1297 cond_data = tr->cond_snapshot->cond_data; in tracing_cond_snapshot_data()
1299 arch_spin_unlock(&tr->max_lock); in tracing_cond_snapshot_data()
1310 int tracing_alloc_snapshot_instance(struct trace_array *tr) in tracing_alloc_snapshot_instance() argument
1315 if (!tr->allocated_snapshot) { in tracing_alloc_snapshot_instance()
1318 order = ring_buffer_subbuf_order_get(tr->array_buffer.buffer); in tracing_alloc_snapshot_instance()
1319 ret = ring_buffer_subbuf_order_set(tr->max_buffer.buffer, order); in tracing_alloc_snapshot_instance()
1324 ret = resize_buffer_duplicate_size(&tr->max_buffer, in tracing_alloc_snapshot_instance()
1325 &tr->array_buffer, RING_BUFFER_ALL_CPUS); in tracing_alloc_snapshot_instance()
1329 tr->allocated_snapshot = true; in tracing_alloc_snapshot_instance()
1335 static void free_snapshot(struct trace_array *tr) in free_snapshot() argument
1342 ring_buffer_subbuf_order_set(tr->max_buffer.buffer, 0); in free_snapshot()
1343 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); in free_snapshot()
1344 set_buffer_entries(&tr->max_buffer, 1); in free_snapshot()
1345 tracing_reset_online_cpus(&tr->max_buffer); in free_snapshot()
1346 tr->allocated_snapshot = false; in free_snapshot()
1349 static int tracing_arm_snapshot_locked(struct trace_array *tr) in tracing_arm_snapshot_locked() argument
1355 spin_lock(&tr->snapshot_trigger_lock); in tracing_arm_snapshot_locked()
1356 if (tr->snapshot == UINT_MAX || tr->mapped) { in tracing_arm_snapshot_locked()
1357 spin_unlock(&tr->snapshot_trigger_lock); in tracing_arm_snapshot_locked()
1361 tr->snapshot++; in tracing_arm_snapshot_locked()
1362 spin_unlock(&tr->snapshot_trigger_lock); in tracing_arm_snapshot_locked()
1364 ret = tracing_alloc_snapshot_instance(tr); in tracing_arm_snapshot_locked()
1366 spin_lock(&tr->snapshot_trigger_lock); in tracing_arm_snapshot_locked()
1367 tr->snapshot--; in tracing_arm_snapshot_locked()
1368 spin_unlock(&tr->snapshot_trigger_lock); in tracing_arm_snapshot_locked()
1374 int tracing_arm_snapshot(struct trace_array *tr) in tracing_arm_snapshot() argument
1379 ret = tracing_arm_snapshot_locked(tr); in tracing_arm_snapshot()
1385 void tracing_disarm_snapshot(struct trace_array *tr) in tracing_disarm_snapshot() argument
1387 spin_lock(&tr->snapshot_trigger_lock); in tracing_disarm_snapshot()
1388 if (!WARN_ON(!tr->snapshot)) in tracing_disarm_snapshot()
1389 tr->snapshot--; in tracing_disarm_snapshot()
1390 spin_unlock(&tr->snapshot_trigger_lock); in tracing_disarm_snapshot()
1405 struct trace_array *tr = &global_trace; in tracing_alloc_snapshot() local
1408 ret = tracing_alloc_snapshot_instance(tr); in tracing_alloc_snapshot()
1451 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, in tracing_snapshot_cond_enable() argument
1466 if (tr->current_trace->use_max_tr) in tracing_snapshot_cond_enable()
1477 if (tr->cond_snapshot) in tracing_snapshot_cond_enable()
1480 ret = tracing_arm_snapshot_locked(tr); in tracing_snapshot_cond_enable()
1485 arch_spin_lock(&tr->max_lock); in tracing_snapshot_cond_enable()
1486 tr->cond_snapshot = no_free_ptr(cond_snapshot); in tracing_snapshot_cond_enable()
1487 arch_spin_unlock(&tr->max_lock); in tracing_snapshot_cond_enable()
1504 int tracing_snapshot_cond_disable(struct trace_array *tr) in tracing_snapshot_cond_disable() argument
1509 arch_spin_lock(&tr->max_lock); in tracing_snapshot_cond_disable()
1511 if (!tr->cond_snapshot) in tracing_snapshot_cond_disable()
1514 kfree(tr->cond_snapshot); in tracing_snapshot_cond_disable()
1515 tr->cond_snapshot = NULL; in tracing_snapshot_cond_disable()
1518 arch_spin_unlock(&tr->max_lock); in tracing_snapshot_cond_disable()
1521 tracing_disarm_snapshot(tr); in tracing_snapshot_cond_disable()
1532 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data) in tracing_snapshot_cond() argument
1549 void *tracing_cond_snapshot_data(struct trace_array *tr) in tracing_cond_snapshot_data() argument
1554 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, cond_update_fn_t update) in tracing_snapshot_cond_enable() argument
1559 int tracing_snapshot_cond_disable(struct trace_array *tr) in tracing_snapshot_cond_disable() argument
1564 #define free_snapshot(tr) do { } while (0) argument
1565 #define tracing_arm_snapshot_locked(tr) ({ -EBUSY; }) argument
1568 void tracer_tracing_off(struct trace_array *tr) in tracer_tracing_off() argument
1570 if (tr->array_buffer.buffer) in tracer_tracing_off()
1571 ring_buffer_record_off(tr->array_buffer.buffer); in tracer_tracing_off()
1580 tr->buffer_disabled = 1; in tracer_tracing_off()
1614 bool tracer_tracing_is_on(struct trace_array *tr) in tracer_tracing_is_on() argument
1616 if (tr->array_buffer.buffer) in tracer_tracing_is_on()
1617 return ring_buffer_record_is_set_on(tr->array_buffer.buffer); in tracer_tracing_is_on()
1618 return !tr->buffer_disabled; in tracer_tracing_is_on()
1699 bool trace_clock_in_ns(struct trace_array *tr) in trace_clock_in_ns() argument
1701 if (trace_clocks[tr->clock_id].in_ns) in trace_clock_in_ns()
1847 struct trace_array *tr = container_of(work, struct trace_array, in latency_fsnotify_workfn() local
1849 fsnotify_inode(tr->d_max_latency->d_inode, FS_MODIFY); in latency_fsnotify_workfn()
1854 struct trace_array *tr = container_of(iwork, struct trace_array, in latency_fsnotify_workfn_irq() local
1856 queue_work(fsnotify_wq, &tr->fsnotify_work); in latency_fsnotify_workfn_irq()
1859 static void trace_create_maxlat_file(struct trace_array *tr, in trace_create_maxlat_file() argument
1862 INIT_WORK(&tr->fsnotify_work, latency_fsnotify_workfn); in trace_create_maxlat_file()
1863 init_irq_work(&tr->fsnotify_irqwork, latency_fsnotify_workfn_irq); in trace_create_maxlat_file()
1864 tr->d_max_latency = trace_create_file("tracing_max_latency", in trace_create_maxlat_file()
1866 d_tracer, tr, in trace_create_maxlat_file()
1883 void latency_fsnotify(struct trace_array *tr) in latency_fsnotify() argument
1892 irq_work_queue(&tr->fsnotify_irqwork); in latency_fsnotify()
1897 #define trace_create_maxlat_file(tr, d_tracer) \ argument
1899 d_tracer, tr, &tracing_max_lat_fops)
1909 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) in __update_max_tr() argument
1911 struct array_buffer *trace_buf = &tr->array_buffer; in __update_max_tr()
1912 struct array_buffer *max_buf = &tr->max_buffer; in __update_max_tr()
1919 max_data->saved_latency = tr->max_latency; in __update_max_tr()
1940 latency_fsnotify(tr); in __update_max_tr()
1954 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu, in update_max_tr() argument
1957 if (tr->stop_count) in update_max_tr()
1962 if (!tr->allocated_snapshot) { in update_max_tr()
1964 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr()
1968 arch_spin_lock(&tr->max_lock); in update_max_tr()
1971 if (ring_buffer_record_is_set_on(tr->array_buffer.buffer)) in update_max_tr()
1972 ring_buffer_record_on(tr->max_buffer.buffer); in update_max_tr()
1974 ring_buffer_record_off(tr->max_buffer.buffer); in update_max_tr()
1977 if (tr->cond_snapshot && !tr->cond_snapshot->update(tr, cond_data)) { in update_max_tr()
1978 arch_spin_unlock(&tr->max_lock); in update_max_tr()
1982 swap(tr->array_buffer.buffer, tr->max_buffer.buffer); in update_max_tr()
1984 __update_max_tr(tr, tsk, cpu); in update_max_tr()
1986 arch_spin_unlock(&tr->max_lock); in update_max_tr()
1989 ring_buffer_wake_waiters(tr->array_buffer.buffer, RING_BUFFER_ALL_CPUS); in update_max_tr()
2001 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) in update_max_tr_single() argument
2005 if (tr->stop_count) in update_max_tr_single()
2009 if (!tr->allocated_snapshot) { in update_max_tr_single()
2011 WARN_ON_ONCE(tr->current_trace != &nop_trace); in update_max_tr_single()
2015 arch_spin_lock(&tr->max_lock); in update_max_tr_single()
2017 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->array_buffer.buffer, cpu); in update_max_tr_single()
2027 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, in update_max_tr_single()
2033 __update_max_tr(tr, tsk, cpu); in update_max_tr_single()
2034 arch_spin_unlock(&tr->max_lock); in update_max_tr_single()
2076 iter->array_buffer = &iter->tr->max_buffer; in wait_on_pipe()
2106 struct trace_array *tr = &global_trace; in run_tracer_selftest() local
2107 struct tracer *saved_tracer = tr->current_trace; in run_tracer_selftest()
2134 tracing_reset_online_cpus(&tr->array_buffer); in run_tracer_selftest()
2136 tr->current_trace = type; in run_tracer_selftest()
2141 if (tr->ring_buffer_expanded) in run_tracer_selftest()
2142 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, in run_tracer_selftest()
2144 tr->allocated_snapshot = true; in run_tracer_selftest()
2150 ret = type->selftest(type, tr); in run_tracer_selftest()
2152 tr->current_trace = saved_tracer; in run_tracer_selftest()
2160 tracing_reset_online_cpus(&tr->array_buffer); in run_tracer_selftest()
2164 tr->allocated_snapshot = false; in run_tracer_selftest()
2167 if (tr->ring_buffer_expanded) in run_tracer_selftest()
2168 ring_buffer_resize(tr->max_buffer.buffer, 1, in run_tracer_selftest()
2245 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
2394 struct trace_array *tr; in tracing_reset_all_online_cpus_unlocked() local
2398 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in tracing_reset_all_online_cpus_unlocked()
2399 if (!tr->clear_trace) in tracing_reset_all_online_cpus_unlocked()
2401 tr->clear_trace = false; in tracing_reset_all_online_cpus_unlocked()
2402 tracing_reset_online_cpus(&tr->array_buffer); in tracing_reset_all_online_cpus_unlocked()
2404 tracing_reset_online_cpus(&tr->max_buffer); in tracing_reset_all_online_cpus_unlocked()
2421 static void tracing_start_tr(struct trace_array *tr) in tracing_start_tr() argument
2429 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_start_tr()
2430 if (--tr->stop_count) { in tracing_start_tr()
2431 if (WARN_ON_ONCE(tr->stop_count < 0)) { in tracing_start_tr()
2433 tr->stop_count = 0; in tracing_start_tr()
2439 arch_spin_lock(&tr->max_lock); in tracing_start_tr()
2441 buffer = tr->array_buffer.buffer; in tracing_start_tr()
2446 buffer = tr->max_buffer.buffer; in tracing_start_tr()
2451 arch_spin_unlock(&tr->max_lock); in tracing_start_tr()
2454 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_start_tr()
2469 static void tracing_stop_tr(struct trace_array *tr) in tracing_stop_tr() argument
2474 raw_spin_lock_irqsave(&tr->start_lock, flags); in tracing_stop_tr()
2475 if (tr->stop_count++) in tracing_stop_tr()
2479 arch_spin_lock(&tr->max_lock); in tracing_stop_tr()
2481 buffer = tr->array_buffer.buffer; in tracing_stop_tr()
2486 buffer = tr->max_buffer.buffer; in tracing_stop_tr()
2491 arch_spin_unlock(&tr->max_lock); in tracing_stop_tr()
2494 raw_spin_unlock_irqrestore(&tr->start_lock, flags); in tracing_stop_tr()
2683 struct trace_array *tr = trace_file->tr; in trace_event_buffer_lock_reserve() local
2686 *current_rb = tr->array_buffer.buffer; in trace_event_buffer_lock_reserve()
2688 if (!tr->no_filter_buffering_ref && in trace_event_buffer_lock_reserve()
2842 trace_buffer_unlock_commit_regs(file->tr, fbuffer->buffer, in trace_event_buffer_commit()
2861 void trace_buffer_unlock_commit_regs(struct trace_array *tr, in trace_buffer_unlock_commit_regs() argument
2875 ftrace_trace_stack(tr, buffer, trace_ctx, regs ? 0 : STACK_SKIP, regs); in trace_buffer_unlock_commit_regs()
2876 ftrace_trace_userstack(tr, buffer, trace_ctx); in trace_buffer_unlock_commit_regs()
2890 trace_function(struct trace_array *tr, unsigned long ip, unsigned long in trace_function() argument
2893 struct trace_buffer *buffer = tr->array_buffer.buffer; in trace_function()
2939 static void __ftrace_trace_stack(struct trace_array *tr, in __ftrace_trace_stack() argument
2988 if (tr->ops && tr->ops->trampoline) { in __ftrace_trace_stack()
2989 unsigned long tramp_start = tr->ops->trampoline; in __ftrace_trace_stack()
2990 unsigned long tramp_end = tramp_start + tr->ops->trampoline_size; in __ftrace_trace_stack()
3021 static inline void ftrace_trace_stack(struct trace_array *tr, in ftrace_trace_stack() argument
3026 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) in ftrace_trace_stack()
3029 __ftrace_trace_stack(tr, buffer, trace_ctx, skip, regs); in ftrace_trace_stack()
3032 void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, in __trace_stack() argument
3035 struct trace_buffer *buffer = tr->array_buffer.buffer; in __trace_stack()
3038 __ftrace_trace_stack(tr, buffer, trace_ctx, skip, NULL); in __trace_stack()
3055 __ftrace_trace_stack(tr, buffer, trace_ctx, skip, NULL); in __trace_stack()
3081 ftrace_trace_userstack(struct trace_array *tr, in ftrace_trace_userstack() argument
3087 if (!(tr->trace_flags & TRACE_ITER_USERSTACKTRACE)) in ftrace_trace_userstack()
3125 static void ftrace_trace_userstack(struct trace_array *tr, in ftrace_trace_userstack() argument
3142 void trace_last_func_repeats(struct trace_array *tr, in trace_last_func_repeats() argument
3146 struct trace_buffer *buffer = tr->array_buffer.buffer; in trace_last_func_repeats()
3288 struct trace_array *tr = READ_ONCE(printk_trace); in trace_vbprintk() local
3294 if (!printk_binsafe(tr)) in trace_vbprintk()
3318 buffer = tr->array_buffer.buffer; in trace_vbprintk()
3330 ftrace_trace_stack(tr, buffer, trace_ctx, 6, NULL); in trace_vbprintk()
3397 int trace_array_vprintk(struct trace_array *tr, in trace_array_vprintk() argument
3400 if (tracing_selftest_running && tr == &global_trace) in trace_array_vprintk()
3403 return __trace_array_vprintk(tr->array_buffer.buffer, ip, fmt, args); in trace_array_vprintk()
3426 int trace_array_printk(struct trace_array *tr, in trace_array_printk() argument
3432 if (!tr) in trace_array_printk()
3436 if (tr == &global_trace) in trace_array_printk()
3439 if (!(tr->trace_flags & TRACE_ITER_PRINTK)) in trace_array_printk()
3443 ret = trace_array_vprintk(tr, ip, fmt, ap); in trace_array_printk()
3457 int trace_array_init_printk(struct trace_array *tr) in trace_array_init_printk() argument
3459 if (!tr) in trace_array_init_printk()
3463 if (tr == &global_trace) in trace_array_init_printk()
3596 if (!iter->tr || iter->fmt == static_fmt_buf) in trace_iter_expand_format()
3746 if (!iter->tr || iter->tr->trace_flags & TRACE_ITER_HASH_PTR) in trace_event_format()
3909 struct trace_array *tr = iter->tr; in s_start() local
3916 if (unlikely(tr->current_trace != iter->trace)) { in s_start()
3920 iter->trace = tr->current_trace; in s_start()
4017 unsigned long trace_total_entries_cpu(struct trace_array *tr, int cpu) in trace_total_entries_cpu() argument
4021 if (!tr) in trace_total_entries_cpu()
4022 tr = &global_trace; in trace_total_entries_cpu()
4024 get_total_entries_cpu(&tr->array_buffer, &total, &entries, cpu); in trace_total_entries_cpu()
4029 unsigned long trace_total_entries(struct trace_array *tr) in trace_total_entries() argument
4033 if (!tr) in trace_total_entries()
4034 tr = &global_trace; in trace_total_entries()
4036 get_total_entries(&tr->array_buffer, &total, &entries); in trace_total_entries()
4150 struct trace_array *tr = iter->tr; in test_cpu_buff_start() local
4152 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE)) in test_cpu_buff_start()
4176 struct trace_array *tr = iter->tr; in print_trace_fmt() local
4178 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK); in print_trace_fmt()
4188 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_trace_fmt()
4199 if (tr->trace_flags & TRACE_ITER_FIELDS) in print_trace_fmt()
4206 if ((tr->text_delta) && in print_trace_fmt()
4220 struct trace_array *tr = iter->tr; in print_raw_fmt() local
4227 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) in print_raw_fmt()
4245 struct trace_array *tr = iter->tr; in print_hex_fmt() local
4253 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_hex_fmt()
4275 struct trace_array *tr = iter->tr; in print_bin_fmt() local
4282 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { in print_bin_fmt()
4331 struct trace_array *tr = iter->tr; in print_trace_line() local
4332 unsigned long trace_flags = tr->trace_flags; in print_trace_line()
4382 struct trace_array *tr = iter->tr; in trace_latency_header() local
4391 if (!(tr->trace_flags & TRACE_ITER_VERBOSE)) in trace_latency_header()
4398 struct trace_array *tr = iter->tr; in trace_default_header() local
4399 unsigned long trace_flags = tr->trace_flags; in trace_default_header()
4459 if (iter->tr->allocated_snapshot) in print_snapshot_help()
4481 if (iter->tr) { in s_show()
4563 struct trace_array *tr = inode->i_private; in __tracing_open() local
4602 iter->trace = tr->current_trace; in __tracing_open()
4607 iter->tr = tr; in __tracing_open()
4611 if (tr->current_trace->print_max || snapshot) in __tracing_open()
4612 iter->array_buffer = &tr->max_buffer; in __tracing_open()
4615 iter->array_buffer = &tr->array_buffer; in __tracing_open()
4630 if (trace_clocks[tr->clock_id].in_ns) in __tracing_open()
4637 if (!iter->snapshot && (tr->trace_flags & TRACE_ITER_PAUSE_ON_TRACE)) in __tracing_open()
4638 tracing_stop_tr(tr); in __tracing_open()
4696 struct trace_array *tr = inode->i_private; in tracing_open_generic_tr() local
4699 ret = tracing_check_open_get_tr(tr); in tracing_open_generic_tr()
4717 ret = tracing_check_open_get_tr(file->tr); in tracing_open_file_tr()
4725 trace_array_put(file->tr); in tracing_open_file_tr()
4744 trace_array_put(file->tr); in tracing_release_file_tr()
4764 struct trace_array *tr = inode->i_private; in tracing_release() local
4770 trace_array_put(tr); in tracing_release()
4786 if (!iter->snapshot && tr->stop_count) in tracing_release()
4788 tracing_start_tr(tr); in tracing_release()
4790 __trace_array_put(tr); in tracing_release()
4802 struct trace_array *tr = inode->i_private; in tracing_release_generic_tr() local
4804 trace_array_put(tr); in tracing_release_generic_tr()
4810 struct trace_array *tr = inode->i_private; in tracing_single_release_tr() local
4812 trace_array_put(tr); in tracing_single_release_tr()
4819 struct trace_array *tr = inode->i_private; in tracing_open() local
4823 ret = tracing_check_open_get_tr(tr); in tracing_open()
4830 struct array_buffer *trace_buf = &tr->array_buffer; in tracing_open()
4833 if (tr->current_trace->print_max) in tracing_open()
4834 trace_buf = &tr->max_buffer; in tracing_open()
4847 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) in tracing_open()
4852 trace_array_put(tr); in tracing_open()
4863 trace_ok_for_array(struct tracer *t, struct trace_array *tr) in trace_ok_for_array() argument
4867 if (tr->range_addr_start && t->use_max_tr) in trace_ok_for_array()
4870 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; in trace_ok_for_array()
4875 get_tracer_for_array(struct trace_array *tr, struct tracer *t) in get_tracer_for_array() argument
4877 while (t && !trace_ok_for_array(t, tr)) in get_tracer_for_array()
4886 struct trace_array *tr = m->private; in t_next() local
4892 t = get_tracer_for_array(tr, t->next); in t_next()
4899 struct trace_array *tr = m->private; in t_start() local
4905 t = get_tracer_for_array(tr, trace_types); in t_start()
4942 struct trace_array *tr = inode->i_private; in show_traces_open() local
4946 ret = tracing_check_open_get_tr(tr); in show_traces_open()
4952 trace_array_put(tr); in show_traces_open()
4957 m->private = tr; in show_traces_open()
4964 struct trace_array *tr = inode->i_private; in tracing_seq_release() local
4966 trace_array_put(tr); in tracing_seq_release()
5010 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_read() local
5015 cpumask_pr_args(tr->tracing_cpumask)) + 1; in tracing_cpumask_read()
5021 cpumask_pr_args(tr->tracing_cpumask)); in tracing_cpumask_read()
5034 int tracing_set_cpumask(struct trace_array *tr, in tracing_set_cpumask() argument
5039 if (!tr) in tracing_set_cpumask()
5043 arch_spin_lock(&tr->max_lock); in tracing_set_cpumask()
5049 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_set_cpumask()
5051 atomic_inc(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled); in tracing_set_cpumask()
5052 ring_buffer_record_disable_cpu(tr->array_buffer.buffer, cpu); in tracing_set_cpumask()
5054 ring_buffer_record_disable_cpu(tr->max_buffer.buffer, cpu); in tracing_set_cpumask()
5057 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && in tracing_set_cpumask()
5059 atomic_dec(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled); in tracing_set_cpumask()
5060 ring_buffer_record_enable_cpu(tr->array_buffer.buffer, cpu); in tracing_set_cpumask()
5062 ring_buffer_record_enable_cpu(tr->max_buffer.buffer, cpu); in tracing_set_cpumask()
5066 arch_spin_unlock(&tr->max_lock); in tracing_set_cpumask()
5069 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); in tracing_set_cpumask()
5078 struct trace_array *tr = file_inode(filp)->i_private; in tracing_cpumask_write() local
5092 err = tracing_set_cpumask(tr, tracing_cpumask_new); in tracing_cpumask_write()
5117 struct trace_array *tr = m->private; in tracing_trace_options_show() local
5123 tracer_flags = tr->current_trace->flags->val; in tracing_trace_options_show()
5124 trace_opts = tr->current_trace->flags->opts; in tracing_trace_options_show()
5127 if (tr->trace_flags & (1 << i)) in tracing_trace_options_show()
5143 static int __set_tracer_option(struct trace_array *tr, in __set_tracer_option() argument
5150 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); in __set_tracer_option()
5162 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) in set_tracer_option() argument
5164 struct tracer *trace = tr->current_trace; in set_tracer_option()
5173 return __set_tracer_option(tr, trace->flags, opts, neg); in set_tracer_option()
5188 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) in set_tracer_flag() argument
5196 if (!!(tr->trace_flags & mask) == !!enabled) in set_tracer_flag()
5200 if (tr->current_trace->flag_changed) in set_tracer_flag()
5201 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) in set_tracer_flag()
5206 update_printk_trace(tr); in set_tracer_flag()
5218 if (printk_trace == tr) in set_tracer_flag()
5224 tr->trace_flags |= mask; in set_tracer_flag()
5226 tr->trace_flags &= ~mask; in set_tracer_flag()
5234 tr->trace_flags &= ~TRACE_ITER_RECORD_TGID; in set_tracer_flag()
5242 trace_event_follow_fork(tr, enabled); in set_tracer_flag()
5245 ftrace_pid_follow_fork(tr, enabled); in set_tracer_flag()
5248 ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); in set_tracer_flag()
5250 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); in set_tracer_flag()
5262 int trace_set_options(struct trace_array *tr, char *option) in trace_set_options() argument
5284 ret = set_tracer_option(tr, cmp, neg); in trace_set_options()
5286 ret = set_tracer_flag(tr, 1 << ret, !neg); in trace_set_options()
5326 struct trace_array *tr = m->private; in tracing_trace_options_write() local
5338 ret = trace_set_options(tr, buf); in tracing_trace_options_write()
5349 struct trace_array *tr = inode->i_private; in tracing_trace_options_open() local
5352 ret = tracing_check_open_get_tr(tr); in tracing_trace_options_open()
5358 trace_array_put(tr); in tracing_trace_options_open()
5862 struct trace_array *tr = filp->private_data; in tracing_set_trace_read() local
5867 r = sprintf(buf, "%s\n", tr->current_trace->name); in tracing_set_trace_read()
5873 int tracer_init(struct tracer *t, struct trace_array *tr) in tracer_init() argument
5875 tracing_reset_online_cpus(&tr->array_buffer); in tracer_init()
5876 return t->init(tr); in tracer_init()
5924 static int __tracing_resize_ring_buffer(struct trace_array *tr, in __tracing_resize_ring_buffer() argument
5934 trace_set_ring_buffer_expanded(tr); in __tracing_resize_ring_buffer()
5937 if (!tr->array_buffer.buffer) in __tracing_resize_ring_buffer()
5941 tracing_stop_tr(tr); in __tracing_resize_ring_buffer()
5943 ret = ring_buffer_resize(tr->array_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
5948 if (!tr->allocated_snapshot) in __tracing_resize_ring_buffer()
5951 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); in __tracing_resize_ring_buffer()
5953 int r = resize_buffer_duplicate_size(&tr->array_buffer, in __tracing_resize_ring_buffer()
5954 &tr->array_buffer, cpu); in __tracing_resize_ring_buffer()
5976 update_buffer_entries(&tr->max_buffer, cpu); in __tracing_resize_ring_buffer()
5981 update_buffer_entries(&tr->array_buffer, cpu); in __tracing_resize_ring_buffer()
5983 tracing_start_tr(tr); in __tracing_resize_ring_buffer()
5987 ssize_t tracing_resize_ring_buffer(struct trace_array *tr, in tracing_resize_ring_buffer() argument
5998 return __tracing_resize_ring_buffer(tr, size, cpu_id); in tracing_resize_ring_buffer()
6030 unsigned long trace_adjust_address(struct trace_array *tr, unsigned long addr) in trace_adjust_address() argument
6038 if (!(tr->flags & TRACE_ARRAY_FL_LAST_BOOT)) in trace_adjust_address()
6043 tscratch = tr->scratch; in trace_adjust_address()
6045 module_delta = READ_ONCE(tr->module_delta); in trace_adjust_address()
6048 return addr + tr->text_delta; in trace_adjust_address()
6072 struct trace_array *tr = data; in save_mod() local
6077 tscratch = tr->scratch; in save_mod()
6080 size = tr->scratch_size; in save_mod()
6101 static void update_last_data(struct trace_array *tr) in update_last_data() argument
6106 if (!(tr->flags & TRACE_ARRAY_FL_BOOT)) in update_last_data()
6109 if (!(tr->flags & TRACE_ARRAY_FL_LAST_BOOT)) in update_last_data()
6113 tr->flags &= ~TRACE_ARRAY_FL_LAST_BOOT; in update_last_data()
6116 if (tr->scratch) { in update_last_data()
6117 struct trace_scratch *tscratch = tr->scratch; in update_last_data()
6124 module_for_each_mod(save_mod, tr); in update_last_data()
6133 tracing_reset_all_cpus(&tr->array_buffer); in update_last_data()
6136 tr->text_delta = 0; in update_last_data()
6138 if (!tr->scratch) in update_last_data()
6141 tscratch = tr->scratch; in update_last_data()
6142 module_delta = READ_ONCE(tr->module_delta); in update_last_data()
6143 WRITE_ONCE(tr->module_delta, NULL); in update_last_data()
6161 int tracing_update_buffers(struct trace_array *tr) in tracing_update_buffers() argument
6167 update_last_data(tr); in tracing_update_buffers()
6169 if (!tr->ring_buffer_expanded) in tracing_update_buffers()
6170 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, in tracing_update_buffers()
6180 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
6186 static void tracing_set_nop(struct trace_array *tr) in tracing_set_nop() argument
6188 if (tr->current_trace == &nop_trace) in tracing_set_nop()
6191 tr->current_trace->enabled--; in tracing_set_nop()
6193 if (tr->current_trace->reset) in tracing_set_nop()
6194 tr->current_trace->reset(tr); in tracing_set_nop()
6196 tr->current_trace = &nop_trace; in tracing_set_nop()
6201 static void add_tracer_options(struct trace_array *tr, struct tracer *t) in add_tracer_options() argument
6204 if (!tr->dir) in add_tracer_options()
6211 create_trace_option_files(tr, t); in add_tracer_options()
6214 int tracing_set_tracer(struct trace_array *tr, const char *buf) in tracing_set_tracer() argument
6224 update_last_data(tr); in tracing_set_tracer()
6226 if (!tr->ring_buffer_expanded) { in tracing_set_tracer()
6227 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, in tracing_set_tracer()
6241 if (t == tr->current_trace) in tracing_set_tracer()
6247 arch_spin_lock(&tr->max_lock); in tracing_set_tracer()
6248 ret = tr->cond_snapshot ? -EBUSY : 0; in tracing_set_tracer()
6249 arch_spin_unlock(&tr->max_lock); in tracing_set_tracer()
6263 if (!trace_ok_for_array(t, tr)) in tracing_set_tracer()
6267 if (tr->trace_ref) in tracing_set_tracer()
6272 tr->current_trace->enabled--; in tracing_set_tracer()
6274 if (tr->current_trace->reset) in tracing_set_tracer()
6275 tr->current_trace->reset(tr); in tracing_set_tracer()
6278 had_max_tr = tr->current_trace->use_max_tr; in tracing_set_tracer()
6281 tr->current_trace = &nop_trace; in tracing_set_tracer()
6292 free_snapshot(tr); in tracing_set_tracer()
6293 tracing_disarm_snapshot(tr); in tracing_set_tracer()
6297 ret = tracing_arm_snapshot_locked(tr); in tracing_set_tracer()
6302 tr->current_trace = &nop_trace; in tracing_set_tracer()
6306 ret = tracer_init(t, tr); in tracing_set_tracer()
6310 tracing_disarm_snapshot(tr); in tracing_set_tracer()
6316 tr->current_trace = t; in tracing_set_tracer()
6317 tr->current_trace->enabled++; in tracing_set_tracer()
6318 trace_branch_enable(tr); in tracing_set_tracer()
6327 struct trace_array *tr = filp->private_data; in tracing_set_trace_write() local
6345 err = tracing_set_tracer(tr, name); in tracing_set_trace_write()
6395 struct trace_array *tr = filp->private_data; in tracing_thresh_write() local
6403 if (tr->current_trace->update_thresh) { in tracing_thresh_write()
6404 ret = tr->current_trace->update_thresh(tr); in tracing_thresh_write()
6418 struct trace_array *tr = filp->private_data; in tracing_max_lat_read() local
6420 return tracing_nsecs_read(&tr->max_latency, ubuf, cnt, ppos); in tracing_max_lat_read()
6427 struct trace_array *tr = filp->private_data; in tracing_max_lat_write() local
6429 return tracing_nsecs_write(&tr->max_latency, ubuf, cnt, ppos); in tracing_max_lat_write()
6434 static int open_pipe_on_cpu(struct trace_array *tr, int cpu) in open_pipe_on_cpu() argument
6437 if (cpumask_empty(tr->pipe_cpumask)) { in open_pipe_on_cpu()
6438 cpumask_setall(tr->pipe_cpumask); in open_pipe_on_cpu()
6441 } else if (!cpumask_test_cpu(cpu, tr->pipe_cpumask)) { in open_pipe_on_cpu()
6442 cpumask_set_cpu(cpu, tr->pipe_cpumask); in open_pipe_on_cpu()
6448 static void close_pipe_on_cpu(struct trace_array *tr, int cpu) in close_pipe_on_cpu() argument
6451 WARN_ON(!cpumask_full(tr->pipe_cpumask)); in close_pipe_on_cpu()
6452 cpumask_clear(tr->pipe_cpumask); in close_pipe_on_cpu()
6454 WARN_ON(!cpumask_test_cpu(cpu, tr->pipe_cpumask)); in close_pipe_on_cpu()
6455 cpumask_clear_cpu(cpu, tr->pipe_cpumask); in close_pipe_on_cpu()
6461 struct trace_array *tr = inode->i_private; in tracing_open_pipe() local
6466 ret = tracing_check_open_get_tr(tr); in tracing_open_pipe()
6472 ret = open_pipe_on_cpu(tr, cpu); in tracing_open_pipe()
6484 iter->trace = tr->current_trace; in tracing_open_pipe()
6494 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) in tracing_open_pipe()
6498 if (trace_clocks[tr->clock_id].in_ns) in tracing_open_pipe()
6501 iter->tr = tr; in tracing_open_pipe()
6502 iter->array_buffer = &tr->array_buffer; in tracing_open_pipe()
6512 tr->trace_ref++; in tracing_open_pipe()
6520 close_pipe_on_cpu(tr, cpu); in tracing_open_pipe()
6522 __trace_array_put(tr); in tracing_open_pipe()
6530 struct trace_array *tr = inode->i_private; in tracing_release_pipe() local
6534 tr->trace_ref--; in tracing_release_pipe()
6538 close_pipe_on_cpu(tr, iter->cpu_file); in tracing_release_pipe()
6544 trace_array_put(tr); in tracing_release_pipe()
6552 struct trace_array *tr = iter->tr; in trace_poll() local
6558 if (tr->trace_flags & TRACE_ITER_BLOCK) in trace_poll()
6565 filp, poll_table, iter->tr->buffer_percent); in trace_poll()
6597 if (!tracer_tracing_is_on(iter->tr) && iter->pos) in tracing_wait_pipe()
6862 struct trace_array *tr = inode->i_private; in tracing_entries_read() local
6880 size = per_cpu_ptr(tr->array_buffer.data, cpu)->entries; in tracing_entries_read()
6881 if (size != per_cpu_ptr(tr->array_buffer.data, cpu)->entries) { in tracing_entries_read()
6888 if (!tr->ring_buffer_expanded) in tracing_entries_read()
6897 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10); in tracing_entries_read()
6910 struct trace_array *tr = inode->i_private; in tracing_entries_write() local
6924 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); in tracing_entries_write()
6937 struct trace_array *tr = filp->private_data; in tracing_total_entries_read() local
6944 size += per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10; in tracing_total_entries_read()
6945 if (!tr->ring_buffer_expanded) in tracing_total_entries_read()
6948 if (tr->ring_buffer_expanded) in tracing_total_entries_read()
6961 struct trace_array *tr = m->private; in l_next() local
6962 struct trace_scratch *tscratch = tr->scratch; in l_next()
6971 if (!tscratch || !(tr->flags & TRACE_ARRAY_FL_LAST_BOOT)) in l_next()
6995 static void show_last_boot_header(struct seq_file *m, struct trace_array *tr) in show_last_boot_header() argument
6997 struct trace_scratch *tscratch = tr->scratch; in show_last_boot_header()
7006 if (tscratch && (tr->flags & TRACE_ARRAY_FL_LAST_BOOT)) in show_last_boot_header()
7014 struct trace_array *tr = m->private; in l_show() local
7018 show_last_boot_header(m, tr); in l_show()
7035 struct trace_array *tr = inode->i_private; in tracing_last_boot_open() local
7039 ret = tracing_check_open_get_tr(tr); in tracing_last_boot_open()
7045 trace_array_put(tr); in tracing_last_boot_open()
7050 m->private = tr; in tracing_last_boot_open()
7057 struct trace_array *tr = inode->i_private; in tracing_buffer_meta_open() local
7061 ret = tracing_check_open_get_tr(tr); in tracing_buffer_meta_open()
7065 ret = ring_buffer_meta_seq_init(filp, tr->array_buffer.buffer, cpu); in tracing_buffer_meta_open()
7067 __trace_array_put(tr); in tracing_buffer_meta_open()
7088 struct trace_array *tr = inode->i_private; in tracing_free_buffer_release() local
7091 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE) in tracing_free_buffer_release()
7092 tracer_tracing_off(tr); in tracing_free_buffer_release()
7094 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); in tracing_free_buffer_release()
7096 trace_array_put(tr); in tracing_free_buffer_release()
7107 struct trace_array *tr = filp->private_data; in tracing_mark_write() local
7124 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) in tracing_mark_write()
7141 buffer = tr->array_buffer.buffer; in tracing_mark_write()
7175 if (tr->trace_marker_file && !list_empty(&tr->trace_marker_file->triggers)) { in tracing_mark_write()
7178 tt = event_triggers_call(tr->trace_marker_file, buffer, entry, event); in tracing_mark_write()
7192 event_triggers_post_call(tr->trace_marker_file, tt); in tracing_mark_write()
7201 struct trace_array *tr = filp->private_data; in tracing_mark_raw_write() local
7214 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) in tracing_mark_raw_write()
7225 buffer = tr->array_buffer.buffer; in tracing_mark_raw_write()
7253 struct trace_array *tr = m->private; in tracing_clock_show() local
7259 i == tr->clock_id ? "[" : "", trace_clocks[i].name, in tracing_clock_show()
7260 i == tr->clock_id ? "]" : ""); in tracing_clock_show()
7266 int tracing_set_clock(struct trace_array *tr, const char *clockstr) in tracing_set_clock() argument
7279 tr->clock_id = i; in tracing_set_clock()
7281 ring_buffer_set_clock(tr->array_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
7287 tracing_reset_online_cpus(&tr->array_buffer); in tracing_set_clock()
7290 if (tr->max_buffer.buffer) in tracing_set_clock()
7291 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); in tracing_set_clock()
7292 tracing_reset_online_cpus(&tr->max_buffer); in tracing_set_clock()
7304 struct trace_array *tr = m->private; in tracing_clock_write() local
7319 ret = tracing_set_clock(tr, clockstr); in tracing_clock_write()
7330 struct trace_array *tr = inode->i_private; in tracing_clock_open() local
7333 ret = tracing_check_open_get_tr(tr); in tracing_clock_open()
7339 trace_array_put(tr); in tracing_clock_open()
7346 struct trace_array *tr = m->private; in tracing_time_stamp_mode_show() local
7350 if (ring_buffer_time_stamp_abs(tr->array_buffer.buffer)) in tracing_time_stamp_mode_show()
7362 struct trace_array *tr = inode->i_private; in tracing_time_stamp_mode_open() local
7365 ret = tracing_check_open_get_tr(tr); in tracing_time_stamp_mode_open()
7371 trace_array_put(tr); in tracing_time_stamp_mode_open()
7387 int tracing_set_filter_buffering(struct trace_array *tr, bool set) in tracing_set_filter_buffering() argument
7391 if (set && tr->no_filter_buffering_ref++) in tracing_set_filter_buffering()
7395 if (WARN_ON_ONCE(!tr->no_filter_buffering_ref)) in tracing_set_filter_buffering()
7398 --tr->no_filter_buffering_ref; in tracing_set_filter_buffering()
7415 struct trace_array *tr = inode->i_private; in tracing_snapshot_open() local
7420 ret = tracing_check_open_get_tr(tr); in tracing_snapshot_open()
7441 iter->tr = tr; in tracing_snapshot_open()
7442 iter->array_buffer = &tr->max_buffer; in tracing_snapshot_open()
7449 trace_array_put(tr); in tracing_snapshot_open()
7454 static void tracing_swap_cpu_buffer(void *tr) in tracing_swap_cpu_buffer() argument
7456 update_max_tr_single((struct trace_array *)tr, current, smp_processor_id()); in tracing_swap_cpu_buffer()
7465 struct trace_array *tr = iter->tr; in tracing_snapshot_write() local
7469 ret = tracing_update_buffers(tr); in tracing_snapshot_write()
7479 if (tr->current_trace->use_max_tr) in tracing_snapshot_write()
7483 arch_spin_lock(&tr->max_lock); in tracing_snapshot_write()
7484 if (tr->cond_snapshot) in tracing_snapshot_write()
7486 arch_spin_unlock(&tr->max_lock); in tracing_snapshot_write()
7495 if (tr->allocated_snapshot) in tracing_snapshot_write()
7496 free_snapshot(tr); in tracing_snapshot_write()
7504 if (tr->allocated_snapshot) in tracing_snapshot_write()
7505 ret = resize_buffer_duplicate_size(&tr->max_buffer, in tracing_snapshot_write()
7506 &tr->array_buffer, iter->cpu_file); in tracing_snapshot_write()
7508 ret = tracing_arm_snapshot_locked(tr); in tracing_snapshot_write()
7515 update_max_tr(tr, current, smp_processor_id(), NULL); in tracing_snapshot_write()
7519 (void *)tr, 1); in tracing_snapshot_write()
7521 tracing_disarm_snapshot(tr); in tracing_snapshot_write()
7524 if (tr->allocated_snapshot) { in tracing_snapshot_write()
7526 tracing_reset_online_cpus(&tr->max_buffer); in tracing_snapshot_write()
7528 tracing_reset_cpu(&tr->max_buffer, iter->cpu_file); in tracing_snapshot_write()
7584 info->iter.array_buffer = &info->iter.tr->max_buffer; in snapshot_raw_open()
7834 static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr, in get_tracing_log_err() argument
7840 if (tr->n_err_log_entries < TRACING_LOG_ERRS_MAX) { in get_tracing_log_err()
7843 tr->n_err_log_entries++; in get_tracing_log_err()
7850 err = list_first_entry(&tr->err_log, struct tracing_log_err, list); in get_tracing_log_err()
7911 void tracing_log_err(struct trace_array *tr, in tracing_log_err() argument
7918 if (!tr) in tracing_log_err()
7919 tr = &global_trace; in tracing_log_err()
7925 err = get_tracing_log_err(tr, len); in tracing_log_err()
7937 list_add_tail(&err->list, &tr->err_log); in tracing_log_err()
7940 static void clear_tracing_err_log(struct trace_array *tr) in clear_tracing_err_log() argument
7945 list_for_each_entry_safe(err, next, &tr->err_log, list) { in clear_tracing_err_log()
7950 tr->n_err_log_entries = 0; in clear_tracing_err_log()
7956 struct trace_array *tr = m->private; in tracing_err_log_seq_start() local
7960 return seq_list_start(&tr->err_log, *pos); in tracing_err_log_seq_start()
7965 struct trace_array *tr = m->private; in tracing_err_log_seq_next() local
7967 return seq_list_next(v, &tr->err_log, pos); in tracing_err_log_seq_next()
8014 struct trace_array *tr = inode->i_private; in tracing_err_log_open() local
8017 ret = tracing_check_open_get_tr(tr); in tracing_err_log_open()
8023 clear_tracing_err_log(tr); in tracing_err_log_open()
8029 m->private = tr; in tracing_err_log_open()
8031 trace_array_put(tr); in tracing_err_log_open()
8046 struct trace_array *tr = inode->i_private; in tracing_err_log_release() local
8048 trace_array_put(tr); in tracing_err_log_release()
8066 struct trace_array *tr = inode->i_private; in tracing_buffers_open() local
8070 ret = tracing_check_open_get_tr(tr); in tracing_buffers_open()
8076 trace_array_put(tr); in tracing_buffers_open()
8082 info->iter.tr = tr; in tracing_buffers_open()
8084 info->iter.trace = tr->current_trace; in tracing_buffers_open()
8085 info->iter.array_buffer = &tr->array_buffer; in tracing_buffers_open()
8092 tr->trace_ref++; in tracing_buffers_open()
8098 trace_array_put(tr); in tracing_buffers_open()
8127 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_read()
8221 iter->tr->trace_ref--; in tracing_buffers_release()
8223 __trace_array_put(iter->tr); in tracing_buffers_release()
8313 if (iter->snapshot && iter->tr->current_trace->use_max_tr) in tracing_buffers_splice_read()
8392 ret = wait_on_pipe(iter, iter->snapshot ? 0 : iter->tr->buffer_percent); in tracing_buffers_splice_read()
8397 if (!tracer_tracing_is_on(iter->tr)) in tracing_buffers_splice_read()
8423 iter->tr->buffer_percent, in tracing_buffers_ioctl()
8451 static int get_snapshot_map(struct trace_array *tr) in get_snapshot_map() argument
8460 spin_lock(&tr->snapshot_trigger_lock); in get_snapshot_map()
8462 if (tr->snapshot || tr->mapped == UINT_MAX) in get_snapshot_map()
8465 tr->mapped++; in get_snapshot_map()
8467 spin_unlock(&tr->snapshot_trigger_lock); in get_snapshot_map()
8470 if (tr->mapped == 1) in get_snapshot_map()
8476 static void put_snapshot_map(struct trace_array *tr) in put_snapshot_map() argument
8478 spin_lock(&tr->snapshot_trigger_lock); in put_snapshot_map()
8479 if (!WARN_ON(!tr->mapped)) in put_snapshot_map()
8480 tr->mapped--; in put_snapshot_map()
8481 spin_unlock(&tr->snapshot_trigger_lock); in put_snapshot_map()
8484 static inline int get_snapshot_map(struct trace_array *tr) { return 0; } in get_snapshot_map() argument
8485 static inline void put_snapshot_map(struct trace_array *tr) { } in put_snapshot_map() argument
8494 put_snapshot_map(iter->tr); in tracing_buffers_mmap_close()
8508 if (iter->tr->flags & TRACE_ARRAY_FL_MEMMAP) in tracing_buffers_mmap()
8512 if (iter->tr->flags & TRACE_ARRAY_FL_BOOT) in tracing_buffers_mmap()
8515 ret = get_snapshot_map(iter->tr); in tracing_buffers_mmap()
8521 put_snapshot_map(iter->tr); in tracing_buffers_mmap()
8544 struct trace_array *tr = inode->i_private; in tracing_stats_read() local
8545 struct array_buffer *trace_buf = &tr->array_buffer; in tracing_stats_read()
8570 if (trace_clocks[tr->clock_id].in_ns) { in tracing_stats_read()
8652 struct trace_array *tr, struct ftrace_probe_ops *ops, in ftrace_snapshot() argument
8655 tracing_snapshot_instance(tr); in ftrace_snapshot()
8660 struct trace_array *tr, struct ftrace_probe_ops *ops, in ftrace_count_snapshot() argument
8677 tracing_snapshot_instance(tr); in ftrace_count_snapshot()
8703 ftrace_snapshot_init(struct ftrace_probe_ops *ops, struct trace_array *tr, in ftrace_snapshot_init() argument
8719 ftrace_snapshot_free(struct ftrace_probe_ops *ops, struct trace_array *tr, in ftrace_snapshot_free() argument
8747 ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash, in ftrace_trace_snapshot_callback() argument
8755 if (!tr) in ftrace_trace_snapshot_callback()
8765 ret = unregister_ftrace_function_probe_func(glob+1, tr, ops); in ftrace_trace_snapshot_callback()
8767 tracing_disarm_snapshot(tr); in ftrace_trace_snapshot_callback()
8789 ret = tracing_arm_snapshot(tr); in ftrace_trace_snapshot_callback()
8793 ret = register_ftrace_function_probe(glob, tr, ops, count); in ftrace_trace_snapshot_callback()
8795 tracing_disarm_snapshot(tr); in ftrace_trace_snapshot_callback()
8813 static struct dentry *tracing_get_dentry(struct trace_array *tr) in tracing_get_dentry() argument
8815 if (WARN_ON(!tr->dir)) in tracing_get_dentry()
8819 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) in tracing_get_dentry()
8823 return tr->dir; in tracing_get_dentry()
8826 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) in tracing_dentry_percpu() argument
8830 if (tr->percpu_dir) in tracing_dentry_percpu()
8831 return tr->percpu_dir; in tracing_dentry_percpu()
8833 d_tracer = tracing_get_dentry(tr); in tracing_dentry_percpu()
8837 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer); in tracing_dentry_percpu()
8839 MEM_FAIL(!tr->percpu_dir, in tracing_dentry_percpu()
8842 return tr->percpu_dir; in tracing_dentry_percpu()
8857 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) in tracing_init_tracefs_percpu() argument
8859 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); in tracing_init_tracefs_percpu()
8875 tr, cpu, &tracing_pipe_fops); in tracing_init_tracefs_percpu()
8879 tr, cpu, &tracing_fops); in tracing_init_tracefs_percpu()
8882 tr, cpu, &tracing_buffers_fops); in tracing_init_tracefs_percpu()
8885 tr, cpu, &tracing_stats_fops); in tracing_init_tracefs_percpu()
8888 tr, cpu, &tracing_entries_fops); in tracing_init_tracefs_percpu()
8890 if (tr->range_addr_start) in tracing_init_tracefs_percpu()
8892 tr, cpu, &tracing_buffer_meta_fops); in tracing_init_tracefs_percpu()
8894 if (!tr->range_addr_start) { in tracing_init_tracefs_percpu()
8896 tr, cpu, &snapshot_fops); in tracing_init_tracefs_percpu()
8899 tr, cpu, &snapshot_raw_fops); in tracing_init_tracefs_percpu()
8941 ret = __set_tracer_option(topt->tr, topt->flags, in trace_options_write()
8958 ret = tracing_check_open_get_tr(topt->tr); in tracing_open_options()
8970 trace_array_put(topt->tr); in tracing_release_options()
9020 struct trace_array *tr; in trace_options_core_read() local
9024 get_tr_index(tr_index, &tr, &index); in trace_options_core_read()
9026 if (tr->trace_flags & (1 << index)) in trace_options_core_read()
9039 struct trace_array *tr; in trace_options_core_write() local
9044 get_tr_index(tr_index, &tr, &index); in trace_options_core_write()
9055 ret = set_tracer_flag(tr, 1 << index, val); in trace_options_core_write()
9090 static struct dentry *trace_options_init_dentry(struct trace_array *tr) in trace_options_init_dentry() argument
9094 if (tr->options) in trace_options_init_dentry()
9095 return tr->options; in trace_options_init_dentry()
9097 d_tracer = tracing_get_dentry(tr); in trace_options_init_dentry()
9101 tr->options = tracefs_create_dir("options", d_tracer); in trace_options_init_dentry()
9102 if (!tr->options) { in trace_options_init_dentry()
9107 return tr->options; in trace_options_init_dentry()
9111 create_trace_option_file(struct trace_array *tr, in create_trace_option_file() argument
9118 t_options = trace_options_init_dentry(tr); in create_trace_option_file()
9124 topt->tr = tr; in create_trace_option_file()
9132 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) in create_trace_option_files() argument
9153 if (!trace_ok_for_array(tracer, tr)) in create_trace_option_files()
9156 for (i = 0; i < tr->nr_topts; i++) { in create_trace_option_files()
9158 if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags)) in create_trace_option_files()
9171 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), in create_trace_option_files()
9178 tr->topts = tr_topts; in create_trace_option_files()
9179 tr->topts[tr->nr_topts].tracer = tracer; in create_trace_option_files()
9180 tr->topts[tr->nr_topts].topts = topts; in create_trace_option_files()
9181 tr->nr_topts++; in create_trace_option_files()
9184 create_trace_option_file(tr, &topts[cnt], flags, in create_trace_option_files()
9193 create_trace_option_core_file(struct trace_array *tr, in create_trace_option_core_file() argument
9198 t_options = trace_options_init_dentry(tr); in create_trace_option_core_file()
9203 (void *)&tr->trace_flags_index[index], in create_trace_option_core_file()
9207 static void create_trace_options_dir(struct trace_array *tr) in create_trace_options_dir() argument
9210 bool top_level = tr == &global_trace; in create_trace_options_dir()
9213 t_options = trace_options_init_dentry(tr); in create_trace_options_dir()
9220 create_trace_option_core_file(tr, trace_options[i], i); in create_trace_options_dir()
9228 struct trace_array *tr = filp->private_data; in rb_simple_read() local
9232 r = tracer_tracing_is_on(tr); in rb_simple_read()
9242 struct trace_array *tr = filp->private_data; in rb_simple_write() local
9243 struct trace_buffer *buffer = tr->array_buffer.buffer; in rb_simple_write()
9253 if (!!val == tracer_tracing_is_on(tr)) { in rb_simple_write()
9256 tracer_tracing_on(tr); in rb_simple_write()
9257 if (tr->current_trace->start) in rb_simple_write()
9258 tr->current_trace->start(tr); in rb_simple_write()
9260 tracer_tracing_off(tr); in rb_simple_write()
9261 if (tr->current_trace->stop) in rb_simple_write()
9262 tr->current_trace->stop(tr); in rb_simple_write()
9286 struct trace_array *tr = filp->private_data; in buffer_percent_read() local
9290 r = tr->buffer_percent; in buffer_percent_read()
9300 struct trace_array *tr = filp->private_data; in buffer_percent_write() local
9311 tr->buffer_percent = val; in buffer_percent_write()
9329 struct trace_array *tr = filp->private_data; in buffer_subbuf_size_read() local
9335 order = ring_buffer_subbuf_order_get(tr->array_buffer.buffer); in buffer_subbuf_size_read()
9347 struct trace_array *tr = filp->private_data; in buffer_subbuf_size_write() local
9368 tracing_stop_tr(tr); in buffer_subbuf_size_write()
9370 old_order = ring_buffer_subbuf_order_get(tr->array_buffer.buffer); in buffer_subbuf_size_write()
9374 ret = ring_buffer_subbuf_order_set(tr->array_buffer.buffer, order); in buffer_subbuf_size_write()
9380 if (!tr->allocated_snapshot) in buffer_subbuf_size_write()
9383 ret = ring_buffer_subbuf_order_set(tr->max_buffer.buffer, order); in buffer_subbuf_size_write()
9386 cnt = ring_buffer_subbuf_order_set(tr->array_buffer.buffer, old_order); in buffer_subbuf_size_write()
9411 tracing_start_tr(tr); in buffer_subbuf_size_write()
9426 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
9434 struct trace_array *tr = data; in make_mod_delta() local
9437 tscratch = tr->scratch; in make_mod_delta()
9438 module_delta = READ_ONCE(tr->module_delta); in make_mod_delta()
9467 static void setup_trace_scratch(struct trace_array *tr, in setup_trace_scratch() argument
9477 tr->scratch = tscratch; in setup_trace_scratch()
9478 tr->scratch_size = size; in setup_trace_scratch()
9481 tr->text_delta = (unsigned long)_text - tscratch->text_addr; in setup_trace_scratch()
9516 WRITE_ONCE(tr->module_delta, module_delta); in setup_trace_scratch()
9519 module_for_each_mod(make_mod_delta, tr); in setup_trace_scratch()
9527 allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, int size) in allocate_trace_buffer() argument
9533 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; in allocate_trace_buffer()
9535 buf->tr = tr; in allocate_trace_buffer()
9537 if (tr->range_addr_start && tr->range_addr_size) { in allocate_trace_buffer()
9540 tr->range_addr_start, in allocate_trace_buffer()
9541 tr->range_addr_size, in allocate_trace_buffer()
9545 setup_trace_scratch(tr, tscratch, scratch_size); in allocate_trace_buffer()
9551 tr->mapped++; in allocate_trace_buffer()
9566 set_buffer_entries(&tr->array_buffer, in allocate_trace_buffer()
9567 ring_buffer_size(tr->array_buffer.buffer, 0)); in allocate_trace_buffer()
9582 static int allocate_trace_buffers(struct trace_array *tr, int size) in allocate_trace_buffers() argument
9586 ret = allocate_trace_buffer(tr, &tr->array_buffer, size); in allocate_trace_buffers()
9592 if (tr->range_addr_start) in allocate_trace_buffers()
9595 ret = allocate_trace_buffer(tr, &tr->max_buffer, in allocate_trace_buffers()
9598 free_trace_buffer(&tr->array_buffer); in allocate_trace_buffers()
9601 tr->allocated_snapshot = allocate_snapshot; in allocate_trace_buffers()
9609 static void free_trace_buffers(struct trace_array *tr) in free_trace_buffers() argument
9611 if (!tr) in free_trace_buffers()
9614 free_trace_buffer(&tr->array_buffer); in free_trace_buffers()
9615 kfree(tr->module_delta); in free_trace_buffers()
9618 free_trace_buffer(&tr->max_buffer); in free_trace_buffers()
9622 static void init_trace_flags_index(struct trace_array *tr) in init_trace_flags_index() argument
9628 tr->trace_flags_index[i] = i; in init_trace_flags_index()
9631 static void __update_tracer_options(struct trace_array *tr) in __update_tracer_options() argument
9636 add_tracer_options(tr, t); in __update_tracer_options()
9639 static void update_tracer_options(struct trace_array *tr) in update_tracer_options() argument
9643 __update_tracer_options(tr); in update_tracer_options()
9650 struct trace_array *tr, *found = NULL; in trace_array_find() local
9652 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_find()
9653 if (tr->name && strcmp(tr->name, instance) == 0) { in trace_array_find()
9654 found = tr; in trace_array_find()
9664 struct trace_array *tr; in trace_array_find_get() local
9667 tr = trace_array_find(instance); in trace_array_find_get()
9668 if (tr) in trace_array_find_get()
9669 tr->ref++; in trace_array_find_get()
9672 return tr; in trace_array_find_get()
9675 static int trace_array_create_dir(struct trace_array *tr) in trace_array_create_dir() argument
9679 tr->dir = tracefs_create_dir(tr->name, trace_instance_dir); in trace_array_create_dir()
9680 if (!tr->dir) in trace_array_create_dir()
9683 ret = event_trace_add_tracer(tr->dir, tr); in trace_array_create_dir()
9685 tracefs_remove(tr->dir); in trace_array_create_dir()
9689 init_tracer_tracefs(tr, tr->dir); in trace_array_create_dir()
9690 __update_tracer_options(tr); in trace_array_create_dir()
9700 struct trace_array *tr; in trace_array_create_systems() local
9704 tr = kzalloc(sizeof(*tr), GFP_KERNEL); in trace_array_create_systems()
9705 if (!tr) in trace_array_create_systems()
9708 tr->name = kstrdup(name, GFP_KERNEL); in trace_array_create_systems()
9709 if (!tr->name) in trace_array_create_systems()
9712 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) in trace_array_create_systems()
9715 if (!zalloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL)) in trace_array_create_systems()
9719 tr->system_names = kstrdup_const(systems, GFP_KERNEL); in trace_array_create_systems()
9720 if (!tr->system_names) in trace_array_create_systems()
9725 tr->range_addr_start = range_addr_start; in trace_array_create_systems()
9726 tr->range_addr_size = range_addr_size; in trace_array_create_systems()
9728 tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS; in trace_array_create_systems()
9730 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); in trace_array_create_systems()
9732 raw_spin_lock_init(&tr->start_lock); in trace_array_create_systems()
9734 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; in trace_array_create_systems()
9736 spin_lock_init(&tr->snapshot_trigger_lock); in trace_array_create_systems()
9738 tr->current_trace = &nop_trace; in trace_array_create_systems()
9740 INIT_LIST_HEAD(&tr->systems); in trace_array_create_systems()
9741 INIT_LIST_HEAD(&tr->events); in trace_array_create_systems()
9742 INIT_LIST_HEAD(&tr->hist_vars); in trace_array_create_systems()
9743 INIT_LIST_HEAD(&tr->err_log); in trace_array_create_systems()
9746 INIT_LIST_HEAD(&tr->mod_events); in trace_array_create_systems()
9749 if (allocate_trace_buffers(tr, trace_buf_size) < 0) in trace_array_create_systems()
9753 trace_set_ring_buffer_expanded(tr); in trace_array_create_systems()
9755 if (ftrace_allocate_ftrace_ops(tr) < 0) in trace_array_create_systems()
9758 ftrace_init_trace_array(tr); in trace_array_create_systems()
9760 init_trace_flags_index(tr); in trace_array_create_systems()
9763 ret = trace_array_create_dir(tr); in trace_array_create_systems()
9767 __trace_early_add_events(tr); in trace_array_create_systems()
9769 list_add(&tr->list, &ftrace_trace_arrays); in trace_array_create_systems()
9771 tr->ref++; in trace_array_create_systems()
9773 return tr; in trace_array_create_systems()
9776 ftrace_free_ftrace_ops(tr); in trace_array_create_systems()
9777 free_trace_buffers(tr); in trace_array_create_systems()
9778 free_cpumask_var(tr->pipe_cpumask); in trace_array_create_systems()
9779 free_cpumask_var(tr->tracing_cpumask); in trace_array_create_systems()
9780 kfree_const(tr->system_names); in trace_array_create_systems()
9781 kfree(tr->range_name); in trace_array_create_systems()
9782 kfree(tr->name); in trace_array_create_systems()
9783 kfree(tr); in trace_array_create_systems()
9795 struct trace_array *tr; in instance_mkdir() local
9805 tr = trace_array_create(name); in instance_mkdir()
9807 ret = PTR_ERR_OR_ZERO(tr); in instance_mkdir()
9861 struct trace_array *tr; in trace_array_get_by_name() local
9866 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_get_by_name()
9867 if (tr->name && strcmp(tr->name, name) == 0) { in trace_array_get_by_name()
9868 tr->ref++; in trace_array_get_by_name()
9869 return tr; in trace_array_get_by_name()
9873 tr = trace_array_create_systems(name, systems, 0, 0); in trace_array_get_by_name()
9875 if (IS_ERR(tr)) in trace_array_get_by_name()
9876 tr = NULL; in trace_array_get_by_name()
9878 tr->ref++; in trace_array_get_by_name()
9880 return tr; in trace_array_get_by_name()
9884 static int __remove_instance(struct trace_array *tr) in __remove_instance() argument
9889 if (tr->ref > 1 || (tr->current_trace && tr->trace_ref)) in __remove_instance()
9892 list_del(&tr->list); in __remove_instance()
9897 set_tracer_flag(tr, 1 << i, 0); in __remove_instance()
9900 if (printk_trace == tr) in __remove_instance()
9903 tracing_set_nop(tr); in __remove_instance()
9904 clear_ftrace_function_probes(tr); in __remove_instance()
9905 event_trace_del_tracer(tr); in __remove_instance()
9906 ftrace_clear_pids(tr); in __remove_instance()
9907 ftrace_destroy_function_files(tr); in __remove_instance()
9908 tracefs_remove(tr->dir); in __remove_instance()
9909 free_percpu(tr->last_func_repeats); in __remove_instance()
9910 free_trace_buffers(tr); in __remove_instance()
9911 clear_tracing_err_log(tr); in __remove_instance()
9913 if (tr->range_name) { in __remove_instance()
9914 reserve_mem_release_by_name(tr->range_name); in __remove_instance()
9915 kfree(tr->range_name); in __remove_instance()
9918 for (i = 0; i < tr->nr_topts; i++) { in __remove_instance()
9919 kfree(tr->topts[i].topts); in __remove_instance()
9921 kfree(tr->topts); in __remove_instance()
9923 free_cpumask_var(tr->pipe_cpumask); in __remove_instance()
9924 free_cpumask_var(tr->tracing_cpumask); in __remove_instance()
9925 kfree_const(tr->system_names); in __remove_instance()
9926 kfree(tr->name); in __remove_instance()
9927 kfree(tr); in __remove_instance()
9934 struct trace_array *tr; in trace_array_destroy() local
9944 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_array_destroy()
9945 if (tr == this_tr) in trace_array_destroy()
9946 return __remove_instance(tr); in trace_array_destroy()
9955 struct trace_array *tr; in instance_rmdir() local
9960 tr = trace_array_find(name); in instance_rmdir()
9961 if (!tr) in instance_rmdir()
9964 return __remove_instance(tr); in instance_rmdir()
9969 struct trace_array *tr; in create_trace_instances() local
9980 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in create_trace_instances()
9981 if (!tr->name) in create_trace_instances()
9983 if (MEM_FAIL(trace_array_create_dir(tr) < 0, in create_trace_instances()
9990 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) in init_tracer_tracefs() argument
9995 tr, &show_traces_fops); in init_tracer_tracefs()
9998 tr, &set_tracer_fops); in init_tracer_tracefs()
10001 tr, &tracing_cpumask_fops); in init_tracer_tracefs()
10004 tr, &tracing_iter_fops); in init_tracer_tracefs()
10007 tr, &tracing_fops); in init_tracer_tracefs()
10010 tr, &tracing_pipe_fops); in init_tracer_tracefs()
10013 tr, &tracing_entries_fops); in init_tracer_tracefs()
10016 tr, &tracing_total_entries_fops); in init_tracer_tracefs()
10019 tr, &tracing_free_buffer_fops); in init_tracer_tracefs()
10022 tr, &tracing_mark_fops); in init_tracer_tracefs()
10024 tr->trace_marker_file = __find_event_file(tr, "ftrace", "print"); in init_tracer_tracefs()
10027 tr, &tracing_mark_raw_fops); in init_tracer_tracefs()
10029 trace_create_file("trace_clock", TRACE_MODE_WRITE, d_tracer, tr, in init_tracer_tracefs()
10033 tr, &rb_simple_fops); in init_tracer_tracefs()
10035 trace_create_file("timestamp_mode", TRACE_MODE_READ, d_tracer, tr, in init_tracer_tracefs()
10038 tr->buffer_percent = 50; in init_tracer_tracefs()
10041 tr, &buffer_percent_fops); in init_tracer_tracefs()
10044 tr, &buffer_subbuf_size_fops); in init_tracer_tracefs()
10046 create_trace_options_dir(tr); in init_tracer_tracefs()
10049 trace_create_maxlat_file(tr, d_tracer); in init_tracer_tracefs()
10052 if (ftrace_create_function_files(tr, d_tracer)) in init_tracer_tracefs()
10055 if (tr->range_addr_start) { in init_tracer_tracefs()
10057 tr, &last_boot_fops); in init_tracer_tracefs()
10061 tr, &snapshot_fops); in init_tracer_tracefs()
10066 tr, &tracing_err_log_fops); in init_tracer_tracefs()
10069 tracing_init_tracefs_percpu(tr, cpu); in init_tracer_tracefs()
10071 ftrace_init_tracefs(tr, d_tracer); in init_tracer_tracefs()
10105 struct trace_array *tr = &global_trace; in tracing_init_dentry() local
10113 if (tr->dir) in tracing_init_dentry()
10125 tr->dir = debugfs_create_automount("tracing", NULL, in tracing_init_dentry()
10241 struct trace_array *tr; in trace_module_record() local
10244 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in trace_module_record()
10245 flags = tr->flags & (TRACE_ARRAY_FL_BOOT | TRACE_ARRAY_FL_LAST_BOOT); in trace_module_record()
10249 save_mod(mod, tr); in trace_module_record()
10252 make_mod_delta(mod, tr); in trace_module_record()
10415 static void trace_init_iter(struct trace_iterator *iter, struct trace_array *tr) in trace_init_iter() argument
10417 iter->tr = tr; in trace_init_iter()
10418 iter->trace = iter->tr->current_trace; in trace_init_iter()
10420 iter->array_buffer = &tr->array_buffer; in trace_init_iter()
10430 if (trace_clocks[iter->tr->clock_id].in_ns) in trace_init_iter()
10445 static void ftrace_dump_one(struct trace_array *tr, enum ftrace_dump_mode dump_mode) in ftrace_dump_one() argument
10461 tracer_tracing_off(tr); in ftrace_dump_one()
10466 trace_init_iter(&iter, tr); in ftrace_dump_one()
10472 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ; in ftrace_dump_one()
10475 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ; in ftrace_dump_one()
10482 if (tr == &global_trace) in ftrace_dump_one()
10485 printk(KERN_TRACE "Dumping ftrace instance %s buffer:\n", tr->name); in ftrace_dump_one()
10527 tr->trace_flags |= old_userobj; in ftrace_dump_one()
10540 struct trace_array *tr; in ftrace_dump_by_param() local
10562 tr = trace_array_find(inst_name); in ftrace_dump_by_param()
10563 if (!tr) { in ftrace_dump_by_param()
10570 ftrace_dump_one(tr, DUMP_ORIG); in ftrace_dump_by_param()
10572 ftrace_dump_one(tr, DUMP_ALL); in ftrace_dump_by_param()
10717 struct trace_array *tr; in enable_instances() local
10825 tr = trace_array_create_systems(name, NULL, addr, size); in enable_instances()
10826 if (IS_ERR(tr)) { in enable_instances()
10832 tracer_tracing_off(tr); in enable_instances()
10835 update_printk_trace(tr); in enable_instances()
10841 tr->flags |= TRACE_ARRAY_FL_MEMMAP; in enable_instances()
10842 tr->ref++; in enable_instances()
10846 tr->flags |= TRACE_ARRAY_FL_BOOT | TRACE_ARRAY_FL_LAST_BOOT; in enable_instances()
10847 tr->range_name = no_free_ptr(rname); in enable_instances()
10851 early_enable_events(tr, tok, true); in enable_instances()
11006 struct trace_array *tr; in ftrace_boot_snapshot() local
11011 list_for_each_entry(tr, &ftrace_trace_arrays, list) { in ftrace_boot_snapshot()
11012 if (!tr->allocated_snapshot) in ftrace_boot_snapshot()
11015 tracing_snapshot_instance(tr); in ftrace_boot_snapshot()
11016 trace_array_puts(tr, "** Boot snapshot taken **\n"); in ftrace_boot_snapshot()