1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * ring buffer based function tracer 4 * 5 * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com> 6 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com> 7 * 8 * Originally taken from the RT patch by: 9 * Arnaldo Carvalho de Melo <acme@redhat.com> 10 * 11 * Based on code from the latency_tracer, that is: 12 * Copyright (C) 2004-2006 Ingo Molnar 13 * Copyright (C) 2004 Nadia Yvette Chambers 14 */ 15 #include <linux/ring_buffer.h> 16 #include <generated/utsrelease.h> 17 #include <linux/stacktrace.h> 18 #include <linux/writeback.h> 19 #include <linux/kallsyms.h> 20 #include <linux/security.h> 21 #include <linux/seq_file.h> 22 #include <linux/irqflags.h> 23 #include <linux/debugfs.h> 24 #include <linux/tracefs.h> 25 #include <linux/pagemap.h> 26 #include <linux/hardirq.h> 27 #include <linux/linkage.h> 28 #include <linux/uaccess.h> 29 #include <linux/vmalloc.h> 30 #include <linux/ftrace.h> 31 #include <linux/module.h> 32 #include <linux/percpu.h> 33 #include <linux/splice.h> 34 #include <linux/kdebug.h> 35 #include <linux/string.h> 36 #include <linux/mount.h> 37 #include <linux/rwsem.h> 38 #include <linux/slab.h> 39 #include <linux/ctype.h> 40 #include <linux/init.h> 41 #include <linux/panic_notifier.h> 42 #include <linux/kmemleak.h> 43 #include <linux/poll.h> 44 #include <linux/nmi.h> 45 #include <linux/fs.h> 46 #include <linux/trace.h> 47 #include <linux/sched/clock.h> 48 #include <linux/sched/rt.h> 49 #include <linux/fsnotify.h> 50 #include <linux/irq_work.h> 51 #include <linux/workqueue.h> 52 53 #include <asm/setup.h> /* COMMAND_LINE_SIZE */ 54 55 #include "trace.h" 56 #include "trace_output.h" 57 58 /* 59 * On boot up, the ring buffer is set to the minimum size, so that 60 * we do not waste memory on systems that are not using tracing. 61 */ 62 bool ring_buffer_expanded; 63 64 #ifdef CONFIG_FTRACE_STARTUP_TEST 65 /* 66 * We need to change this state when a selftest is running. 67 * A selftest will lurk into the ring-buffer to count the 68 * entries inserted during the selftest although some concurrent 69 * insertions into the ring-buffer such as trace_printk could occurred 70 * at the same time, giving false positive or negative results. 71 */ 72 static bool __read_mostly tracing_selftest_running; 73 74 /* 75 * If boot-time tracing including tracers/events via kernel cmdline 76 * is running, we do not want to run SELFTEST. 77 */ 78 bool __read_mostly tracing_selftest_disabled; 79 80 void __init disable_tracing_selftest(const char *reason) 81 { 82 if (!tracing_selftest_disabled) { 83 tracing_selftest_disabled = true; 84 pr_info("Ftrace startup test is disabled due to %s\n", reason); 85 } 86 } 87 #else 88 #define tracing_selftest_running 0 89 #define tracing_selftest_disabled 0 90 #endif 91 92 /* Pipe tracepoints to printk */ 93 static struct trace_iterator *tracepoint_print_iter; 94 int tracepoint_printk; 95 static bool tracepoint_printk_stop_on_boot __initdata; 96 static DEFINE_STATIC_KEY_FALSE(tracepoint_printk_key); 97 98 /* For tracers that don't implement custom flags */ 99 static struct tracer_opt dummy_tracer_opt[] = { 100 { } 101 }; 102 103 static int 104 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) 105 { 106 return 0; 107 } 108 109 /* 110 * To prevent the comm cache from being overwritten when no 111 * tracing is active, only save the comm when a trace event 112 * occurred. 113 */ 114 static DEFINE_PER_CPU(bool, trace_taskinfo_save); 115 116 /* 117 * Kill all tracing for good (never come back). 118 * It is initialized to 1 but will turn to zero if the initialization 119 * of the tracer is successful. But that is the only place that sets 120 * this back to zero. 121 */ 122 static int tracing_disabled = 1; 123 124 cpumask_var_t __read_mostly tracing_buffer_mask; 125 126 /* 127 * ftrace_dump_on_oops - variable to dump ftrace buffer on oops 128 * 129 * If there is an oops (or kernel panic) and the ftrace_dump_on_oops 130 * is set, then ftrace_dump is called. This will output the contents 131 * of the ftrace buffers to the console. This is very useful for 132 * capturing traces that lead to crashes and outputing it to a 133 * serial console. 134 * 135 * It is default off, but you can enable it with either specifying 136 * "ftrace_dump_on_oops" in the kernel command line, or setting 137 * /proc/sys/kernel/ftrace_dump_on_oops 138 * Set 1 if you want to dump buffers of all CPUs 139 * Set 2 if you want to dump the buffer of the CPU that triggered oops 140 */ 141 142 enum ftrace_dump_mode ftrace_dump_on_oops; 143 144 /* When set, tracing will stop when a WARN*() is hit */ 145 int __disable_trace_on_warning; 146 147 #ifdef CONFIG_TRACE_EVAL_MAP_FILE 148 /* Map of enums to their values, for "eval_map" file */ 149 struct trace_eval_map_head { 150 struct module *mod; 151 unsigned long length; 152 }; 153 154 union trace_eval_map_item; 155 156 struct trace_eval_map_tail { 157 /* 158 * "end" is first and points to NULL as it must be different 159 * than "mod" or "eval_string" 160 */ 161 union trace_eval_map_item *next; 162 const char *end; /* points to NULL */ 163 }; 164 165 static DEFINE_MUTEX(trace_eval_mutex); 166 167 /* 168 * The trace_eval_maps are saved in an array with two extra elements, 169 * one at the beginning, and one at the end. The beginning item contains 170 * the count of the saved maps (head.length), and the module they 171 * belong to if not built in (head.mod). The ending item contains a 172 * pointer to the next array of saved eval_map items. 173 */ 174 union trace_eval_map_item { 175 struct trace_eval_map map; 176 struct trace_eval_map_head head; 177 struct trace_eval_map_tail tail; 178 }; 179 180 static union trace_eval_map_item *trace_eval_maps; 181 #endif /* CONFIG_TRACE_EVAL_MAP_FILE */ 182 183 int tracing_set_tracer(struct trace_array *tr, const char *buf); 184 static void ftrace_trace_userstack(struct trace_array *tr, 185 struct trace_buffer *buffer, 186 unsigned int trace_ctx); 187 188 #define MAX_TRACER_SIZE 100 189 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata; 190 static char *default_bootup_tracer; 191 192 static bool allocate_snapshot; 193 static bool snapshot_at_boot; 194 195 static char boot_instance_info[COMMAND_LINE_SIZE] __initdata; 196 static int boot_instance_index; 197 198 static char boot_snapshot_info[COMMAND_LINE_SIZE] __initdata; 199 static int boot_snapshot_index; 200 201 static int __init set_cmdline_ftrace(char *str) 202 { 203 strscpy(bootup_tracer_buf, str, MAX_TRACER_SIZE); 204 default_bootup_tracer = bootup_tracer_buf; 205 /* We are using ftrace early, expand it */ 206 ring_buffer_expanded = true; 207 return 1; 208 } 209 __setup("ftrace=", set_cmdline_ftrace); 210 211 static int __init set_ftrace_dump_on_oops(char *str) 212 { 213 if (*str++ != '=' || !*str || !strcmp("1", str)) { 214 ftrace_dump_on_oops = DUMP_ALL; 215 return 1; 216 } 217 218 if (!strcmp("orig_cpu", str) || !strcmp("2", str)) { 219 ftrace_dump_on_oops = DUMP_ORIG; 220 return 1; 221 } 222 223 return 0; 224 } 225 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops); 226 227 static int __init stop_trace_on_warning(char *str) 228 { 229 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0)) 230 __disable_trace_on_warning = 1; 231 return 1; 232 } 233 __setup("traceoff_on_warning", stop_trace_on_warning); 234 235 static int __init boot_alloc_snapshot(char *str) 236 { 237 char *slot = boot_snapshot_info + boot_snapshot_index; 238 int left = sizeof(boot_snapshot_info) - boot_snapshot_index; 239 int ret; 240 241 if (str[0] == '=') { 242 str++; 243 if (strlen(str) >= left) 244 return -1; 245 246 ret = snprintf(slot, left, "%s\t", str); 247 boot_snapshot_index += ret; 248 } else { 249 allocate_snapshot = true; 250 /* We also need the main ring buffer expanded */ 251 ring_buffer_expanded = true; 252 } 253 return 1; 254 } 255 __setup("alloc_snapshot", boot_alloc_snapshot); 256 257 258 static int __init boot_snapshot(char *str) 259 { 260 snapshot_at_boot = true; 261 boot_alloc_snapshot(str); 262 return 1; 263 } 264 __setup("ftrace_boot_snapshot", boot_snapshot); 265 266 267 static int __init boot_instance(char *str) 268 { 269 char *slot = boot_instance_info + boot_instance_index; 270 int left = sizeof(boot_instance_info) - boot_instance_index; 271 int ret; 272 273 if (strlen(str) >= left) 274 return -1; 275 276 ret = snprintf(slot, left, "%s\t", str); 277 boot_instance_index += ret; 278 279 return 1; 280 } 281 __setup("trace_instance=", boot_instance); 282 283 284 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata; 285 286 static int __init set_trace_boot_options(char *str) 287 { 288 strscpy(trace_boot_options_buf, str, MAX_TRACER_SIZE); 289 return 1; 290 } 291 __setup("trace_options=", set_trace_boot_options); 292 293 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata; 294 static char *trace_boot_clock __initdata; 295 296 static int __init set_trace_boot_clock(char *str) 297 { 298 strscpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE); 299 trace_boot_clock = trace_boot_clock_buf; 300 return 1; 301 } 302 __setup("trace_clock=", set_trace_boot_clock); 303 304 static int __init set_tracepoint_printk(char *str) 305 { 306 /* Ignore the "tp_printk_stop_on_boot" param */ 307 if (*str == '_') 308 return 0; 309 310 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0)) 311 tracepoint_printk = 1; 312 return 1; 313 } 314 __setup("tp_printk", set_tracepoint_printk); 315 316 static int __init set_tracepoint_printk_stop(char *str) 317 { 318 tracepoint_printk_stop_on_boot = true; 319 return 1; 320 } 321 __setup("tp_printk_stop_on_boot", set_tracepoint_printk_stop); 322 323 unsigned long long ns2usecs(u64 nsec) 324 { 325 nsec += 500; 326 do_div(nsec, 1000); 327 return nsec; 328 } 329 330 static void 331 trace_process_export(struct trace_export *export, 332 struct ring_buffer_event *event, int flag) 333 { 334 struct trace_entry *entry; 335 unsigned int size = 0; 336 337 if (export->flags & flag) { 338 entry = ring_buffer_event_data(event); 339 size = ring_buffer_event_length(event); 340 export->write(export, entry, size); 341 } 342 } 343 344 static DEFINE_MUTEX(ftrace_export_lock); 345 346 static struct trace_export __rcu *ftrace_exports_list __read_mostly; 347 348 static DEFINE_STATIC_KEY_FALSE(trace_function_exports_enabled); 349 static DEFINE_STATIC_KEY_FALSE(trace_event_exports_enabled); 350 static DEFINE_STATIC_KEY_FALSE(trace_marker_exports_enabled); 351 352 static inline void ftrace_exports_enable(struct trace_export *export) 353 { 354 if (export->flags & TRACE_EXPORT_FUNCTION) 355 static_branch_inc(&trace_function_exports_enabled); 356 357 if (export->flags & TRACE_EXPORT_EVENT) 358 static_branch_inc(&trace_event_exports_enabled); 359 360 if (export->flags & TRACE_EXPORT_MARKER) 361 static_branch_inc(&trace_marker_exports_enabled); 362 } 363 364 static inline void ftrace_exports_disable(struct trace_export *export) 365 { 366 if (export->flags & TRACE_EXPORT_FUNCTION) 367 static_branch_dec(&trace_function_exports_enabled); 368 369 if (export->flags & TRACE_EXPORT_EVENT) 370 static_branch_dec(&trace_event_exports_enabled); 371 372 if (export->flags & TRACE_EXPORT_MARKER) 373 static_branch_dec(&trace_marker_exports_enabled); 374 } 375 376 static void ftrace_exports(struct ring_buffer_event *event, int flag) 377 { 378 struct trace_export *export; 379 380 preempt_disable_notrace(); 381 382 export = rcu_dereference_raw_check(ftrace_exports_list); 383 while (export) { 384 trace_process_export(export, event, flag); 385 export = rcu_dereference_raw_check(export->next); 386 } 387 388 preempt_enable_notrace(); 389 } 390 391 static inline void 392 add_trace_export(struct trace_export **list, struct trace_export *export) 393 { 394 rcu_assign_pointer(export->next, *list); 395 /* 396 * We are entering export into the list but another 397 * CPU might be walking that list. We need to make sure 398 * the export->next pointer is valid before another CPU sees 399 * the export pointer included into the list. 400 */ 401 rcu_assign_pointer(*list, export); 402 } 403 404 static inline int 405 rm_trace_export(struct trace_export **list, struct trace_export *export) 406 { 407 struct trace_export **p; 408 409 for (p = list; *p != NULL; p = &(*p)->next) 410 if (*p == export) 411 break; 412 413 if (*p != export) 414 return -1; 415 416 rcu_assign_pointer(*p, (*p)->next); 417 418 return 0; 419 } 420 421 static inline void 422 add_ftrace_export(struct trace_export **list, struct trace_export *export) 423 { 424 ftrace_exports_enable(export); 425 426 add_trace_export(list, export); 427 } 428 429 static inline int 430 rm_ftrace_export(struct trace_export **list, struct trace_export *export) 431 { 432 int ret; 433 434 ret = rm_trace_export(list, export); 435 ftrace_exports_disable(export); 436 437 return ret; 438 } 439 440 int register_ftrace_export(struct trace_export *export) 441 { 442 if (WARN_ON_ONCE(!export->write)) 443 return -1; 444 445 mutex_lock(&ftrace_export_lock); 446 447 add_ftrace_export(&ftrace_exports_list, export); 448 449 mutex_unlock(&ftrace_export_lock); 450 451 return 0; 452 } 453 EXPORT_SYMBOL_GPL(register_ftrace_export); 454 455 int unregister_ftrace_export(struct trace_export *export) 456 { 457 int ret; 458 459 mutex_lock(&ftrace_export_lock); 460 461 ret = rm_ftrace_export(&ftrace_exports_list, export); 462 463 mutex_unlock(&ftrace_export_lock); 464 465 return ret; 466 } 467 EXPORT_SYMBOL_GPL(unregister_ftrace_export); 468 469 /* trace_flags holds trace_options default values */ 470 #define TRACE_DEFAULT_FLAGS \ 471 (FUNCTION_DEFAULT_FLAGS | \ 472 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | \ 473 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | \ 474 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | \ 475 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | \ 476 TRACE_ITER_HASH_PTR) 477 478 /* trace_options that are only supported by global_trace */ 479 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK | \ 480 TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD) 481 482 /* trace_flags that are default zero for instances */ 483 #define ZEROED_TRACE_FLAGS \ 484 (TRACE_ITER_EVENT_FORK | TRACE_ITER_FUNC_FORK) 485 486 /* 487 * The global_trace is the descriptor that holds the top-level tracing 488 * buffers for the live tracing. 489 */ 490 static struct trace_array global_trace = { 491 .trace_flags = TRACE_DEFAULT_FLAGS, 492 }; 493 494 LIST_HEAD(ftrace_trace_arrays); 495 496 int trace_array_get(struct trace_array *this_tr) 497 { 498 struct trace_array *tr; 499 int ret = -ENODEV; 500 501 mutex_lock(&trace_types_lock); 502 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 503 if (tr == this_tr) { 504 tr->ref++; 505 ret = 0; 506 break; 507 } 508 } 509 mutex_unlock(&trace_types_lock); 510 511 return ret; 512 } 513 514 static void __trace_array_put(struct trace_array *this_tr) 515 { 516 WARN_ON(!this_tr->ref); 517 this_tr->ref--; 518 } 519 520 /** 521 * trace_array_put - Decrement the reference counter for this trace array. 522 * @this_tr : pointer to the trace array 523 * 524 * NOTE: Use this when we no longer need the trace array returned by 525 * trace_array_get_by_name(). This ensures the trace array can be later 526 * destroyed. 527 * 528 */ 529 void trace_array_put(struct trace_array *this_tr) 530 { 531 if (!this_tr) 532 return; 533 534 mutex_lock(&trace_types_lock); 535 __trace_array_put(this_tr); 536 mutex_unlock(&trace_types_lock); 537 } 538 EXPORT_SYMBOL_GPL(trace_array_put); 539 540 int tracing_check_open_get_tr(struct trace_array *tr) 541 { 542 int ret; 543 544 ret = security_locked_down(LOCKDOWN_TRACEFS); 545 if (ret) 546 return ret; 547 548 if (tracing_disabled) 549 return -ENODEV; 550 551 if (tr && trace_array_get(tr) < 0) 552 return -ENODEV; 553 554 return 0; 555 } 556 557 int call_filter_check_discard(struct trace_event_call *call, void *rec, 558 struct trace_buffer *buffer, 559 struct ring_buffer_event *event) 560 { 561 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) && 562 !filter_match_preds(call->filter, rec)) { 563 __trace_event_discard_commit(buffer, event); 564 return 1; 565 } 566 567 return 0; 568 } 569 570 /** 571 * trace_find_filtered_pid - check if a pid exists in a filtered_pid list 572 * @filtered_pids: The list of pids to check 573 * @search_pid: The PID to find in @filtered_pids 574 * 575 * Returns true if @search_pid is found in @filtered_pids, and false otherwise. 576 */ 577 bool 578 trace_find_filtered_pid(struct trace_pid_list *filtered_pids, pid_t search_pid) 579 { 580 return trace_pid_list_is_set(filtered_pids, search_pid); 581 } 582 583 /** 584 * trace_ignore_this_task - should a task be ignored for tracing 585 * @filtered_pids: The list of pids to check 586 * @filtered_no_pids: The list of pids not to be traced 587 * @task: The task that should be ignored if not filtered 588 * 589 * Checks if @task should be traced or not from @filtered_pids. 590 * Returns true if @task should *NOT* be traced. 591 * Returns false if @task should be traced. 592 */ 593 bool 594 trace_ignore_this_task(struct trace_pid_list *filtered_pids, 595 struct trace_pid_list *filtered_no_pids, 596 struct task_struct *task) 597 { 598 /* 599 * If filtered_no_pids is not empty, and the task's pid is listed 600 * in filtered_no_pids, then return true. 601 * Otherwise, if filtered_pids is empty, that means we can 602 * trace all tasks. If it has content, then only trace pids 603 * within filtered_pids. 604 */ 605 606 return (filtered_pids && 607 !trace_find_filtered_pid(filtered_pids, task->pid)) || 608 (filtered_no_pids && 609 trace_find_filtered_pid(filtered_no_pids, task->pid)); 610 } 611 612 /** 613 * trace_filter_add_remove_task - Add or remove a task from a pid_list 614 * @pid_list: The list to modify 615 * @self: The current task for fork or NULL for exit 616 * @task: The task to add or remove 617 * 618 * If adding a task, if @self is defined, the task is only added if @self 619 * is also included in @pid_list. This happens on fork and tasks should 620 * only be added when the parent is listed. If @self is NULL, then the 621 * @task pid will be removed from the list, which would happen on exit 622 * of a task. 623 */ 624 void trace_filter_add_remove_task(struct trace_pid_list *pid_list, 625 struct task_struct *self, 626 struct task_struct *task) 627 { 628 if (!pid_list) 629 return; 630 631 /* For forks, we only add if the forking task is listed */ 632 if (self) { 633 if (!trace_find_filtered_pid(pid_list, self->pid)) 634 return; 635 } 636 637 /* "self" is set for forks, and NULL for exits */ 638 if (self) 639 trace_pid_list_set(pid_list, task->pid); 640 else 641 trace_pid_list_clear(pid_list, task->pid); 642 } 643 644 /** 645 * trace_pid_next - Used for seq_file to get to the next pid of a pid_list 646 * @pid_list: The pid list to show 647 * @v: The last pid that was shown (+1 the actual pid to let zero be displayed) 648 * @pos: The position of the file 649 * 650 * This is used by the seq_file "next" operation to iterate the pids 651 * listed in a trace_pid_list structure. 652 * 653 * Returns the pid+1 as we want to display pid of zero, but NULL would 654 * stop the iteration. 655 */ 656 void *trace_pid_next(struct trace_pid_list *pid_list, void *v, loff_t *pos) 657 { 658 long pid = (unsigned long)v; 659 unsigned int next; 660 661 (*pos)++; 662 663 /* pid already is +1 of the actual previous bit */ 664 if (trace_pid_list_next(pid_list, pid, &next) < 0) 665 return NULL; 666 667 pid = next; 668 669 /* Return pid + 1 to allow zero to be represented */ 670 return (void *)(pid + 1); 671 } 672 673 /** 674 * trace_pid_start - Used for seq_file to start reading pid lists 675 * @pid_list: The pid list to show 676 * @pos: The position of the file 677 * 678 * This is used by seq_file "start" operation to start the iteration 679 * of listing pids. 680 * 681 * Returns the pid+1 as we want to display pid of zero, but NULL would 682 * stop the iteration. 683 */ 684 void *trace_pid_start(struct trace_pid_list *pid_list, loff_t *pos) 685 { 686 unsigned long pid; 687 unsigned int first; 688 loff_t l = 0; 689 690 if (trace_pid_list_first(pid_list, &first) < 0) 691 return NULL; 692 693 pid = first; 694 695 /* Return pid + 1 so that zero can be the exit value */ 696 for (pid++; pid && l < *pos; 697 pid = (unsigned long)trace_pid_next(pid_list, (void *)pid, &l)) 698 ; 699 return (void *)pid; 700 } 701 702 /** 703 * trace_pid_show - show the current pid in seq_file processing 704 * @m: The seq_file structure to write into 705 * @v: A void pointer of the pid (+1) value to display 706 * 707 * Can be directly used by seq_file operations to display the current 708 * pid value. 709 */ 710 int trace_pid_show(struct seq_file *m, void *v) 711 { 712 unsigned long pid = (unsigned long)v - 1; 713 714 seq_printf(m, "%lu\n", pid); 715 return 0; 716 } 717 718 /* 128 should be much more than enough */ 719 #define PID_BUF_SIZE 127 720 721 int trace_pid_write(struct trace_pid_list *filtered_pids, 722 struct trace_pid_list **new_pid_list, 723 const char __user *ubuf, size_t cnt) 724 { 725 struct trace_pid_list *pid_list; 726 struct trace_parser parser; 727 unsigned long val; 728 int nr_pids = 0; 729 ssize_t read = 0; 730 ssize_t ret; 731 loff_t pos; 732 pid_t pid; 733 734 if (trace_parser_get_init(&parser, PID_BUF_SIZE + 1)) 735 return -ENOMEM; 736 737 /* 738 * Always recreate a new array. The write is an all or nothing 739 * operation. Always create a new array when adding new pids by 740 * the user. If the operation fails, then the current list is 741 * not modified. 742 */ 743 pid_list = trace_pid_list_alloc(); 744 if (!pid_list) { 745 trace_parser_put(&parser); 746 return -ENOMEM; 747 } 748 749 if (filtered_pids) { 750 /* copy the current bits to the new max */ 751 ret = trace_pid_list_first(filtered_pids, &pid); 752 while (!ret) { 753 trace_pid_list_set(pid_list, pid); 754 ret = trace_pid_list_next(filtered_pids, pid + 1, &pid); 755 nr_pids++; 756 } 757 } 758 759 ret = 0; 760 while (cnt > 0) { 761 762 pos = 0; 763 764 ret = trace_get_user(&parser, ubuf, cnt, &pos); 765 if (ret < 0) 766 break; 767 768 read += ret; 769 ubuf += ret; 770 cnt -= ret; 771 772 if (!trace_parser_loaded(&parser)) 773 break; 774 775 ret = -EINVAL; 776 if (kstrtoul(parser.buffer, 0, &val)) 777 break; 778 779 pid = (pid_t)val; 780 781 if (trace_pid_list_set(pid_list, pid) < 0) { 782 ret = -1; 783 break; 784 } 785 nr_pids++; 786 787 trace_parser_clear(&parser); 788 ret = 0; 789 } 790 trace_parser_put(&parser); 791 792 if (ret < 0) { 793 trace_pid_list_free(pid_list); 794 return ret; 795 } 796 797 if (!nr_pids) { 798 /* Cleared the list of pids */ 799 trace_pid_list_free(pid_list); 800 pid_list = NULL; 801 } 802 803 *new_pid_list = pid_list; 804 805 return read; 806 } 807 808 static u64 buffer_ftrace_now(struct array_buffer *buf, int cpu) 809 { 810 u64 ts; 811 812 /* Early boot up does not have a buffer yet */ 813 if (!buf->buffer) 814 return trace_clock_local(); 815 816 ts = ring_buffer_time_stamp(buf->buffer); 817 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts); 818 819 return ts; 820 } 821 822 u64 ftrace_now(int cpu) 823 { 824 return buffer_ftrace_now(&global_trace.array_buffer, cpu); 825 } 826 827 /** 828 * tracing_is_enabled - Show if global_trace has been enabled 829 * 830 * Shows if the global trace has been enabled or not. It uses the 831 * mirror flag "buffer_disabled" to be used in fast paths such as for 832 * the irqsoff tracer. But it may be inaccurate due to races. If you 833 * need to know the accurate state, use tracing_is_on() which is a little 834 * slower, but accurate. 835 */ 836 int tracing_is_enabled(void) 837 { 838 /* 839 * For quick access (irqsoff uses this in fast path), just 840 * return the mirror variable of the state of the ring buffer. 841 * It's a little racy, but we don't really care. 842 */ 843 smp_rmb(); 844 return !global_trace.buffer_disabled; 845 } 846 847 /* 848 * trace_buf_size is the size in bytes that is allocated 849 * for a buffer. Note, the number of bytes is always rounded 850 * to page size. 851 * 852 * This number is purposely set to a low number of 16384. 853 * If the dump on oops happens, it will be much appreciated 854 * to not have to wait for all that output. Anyway this can be 855 * boot time and run time configurable. 856 */ 857 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */ 858 859 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT; 860 861 /* trace_types holds a link list of available tracers. */ 862 static struct tracer *trace_types __read_mostly; 863 864 /* 865 * trace_types_lock is used to protect the trace_types list. 866 */ 867 DEFINE_MUTEX(trace_types_lock); 868 869 /* 870 * serialize the access of the ring buffer 871 * 872 * ring buffer serializes readers, but it is low level protection. 873 * The validity of the events (which returns by ring_buffer_peek() ..etc) 874 * are not protected by ring buffer. 875 * 876 * The content of events may become garbage if we allow other process consumes 877 * these events concurrently: 878 * A) the page of the consumed events may become a normal page 879 * (not reader page) in ring buffer, and this page will be rewritten 880 * by events producer. 881 * B) The page of the consumed events may become a page for splice_read, 882 * and this page will be returned to system. 883 * 884 * These primitives allow multi process access to different cpu ring buffer 885 * concurrently. 886 * 887 * These primitives don't distinguish read-only and read-consume access. 888 * Multi read-only access are also serialized. 889 */ 890 891 #ifdef CONFIG_SMP 892 static DECLARE_RWSEM(all_cpu_access_lock); 893 static DEFINE_PER_CPU(struct mutex, cpu_access_lock); 894 895 static inline void trace_access_lock(int cpu) 896 { 897 if (cpu == RING_BUFFER_ALL_CPUS) { 898 /* gain it for accessing the whole ring buffer. */ 899 down_write(&all_cpu_access_lock); 900 } else { 901 /* gain it for accessing a cpu ring buffer. */ 902 903 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */ 904 down_read(&all_cpu_access_lock); 905 906 /* Secondly block other access to this @cpu ring buffer. */ 907 mutex_lock(&per_cpu(cpu_access_lock, cpu)); 908 } 909 } 910 911 static inline void trace_access_unlock(int cpu) 912 { 913 if (cpu == RING_BUFFER_ALL_CPUS) { 914 up_write(&all_cpu_access_lock); 915 } else { 916 mutex_unlock(&per_cpu(cpu_access_lock, cpu)); 917 up_read(&all_cpu_access_lock); 918 } 919 } 920 921 static inline void trace_access_lock_init(void) 922 { 923 int cpu; 924 925 for_each_possible_cpu(cpu) 926 mutex_init(&per_cpu(cpu_access_lock, cpu)); 927 } 928 929 #else 930 931 static DEFINE_MUTEX(access_lock); 932 933 static inline void trace_access_lock(int cpu) 934 { 935 (void)cpu; 936 mutex_lock(&access_lock); 937 } 938 939 static inline void trace_access_unlock(int cpu) 940 { 941 (void)cpu; 942 mutex_unlock(&access_lock); 943 } 944 945 static inline void trace_access_lock_init(void) 946 { 947 } 948 949 #endif 950 951 #ifdef CONFIG_STACKTRACE 952 static void __ftrace_trace_stack(struct trace_buffer *buffer, 953 unsigned int trace_ctx, 954 int skip, struct pt_regs *regs); 955 static inline void ftrace_trace_stack(struct trace_array *tr, 956 struct trace_buffer *buffer, 957 unsigned int trace_ctx, 958 int skip, struct pt_regs *regs); 959 960 #else 961 static inline void __ftrace_trace_stack(struct trace_buffer *buffer, 962 unsigned int trace_ctx, 963 int skip, struct pt_regs *regs) 964 { 965 } 966 static inline void ftrace_trace_stack(struct trace_array *tr, 967 struct trace_buffer *buffer, 968 unsigned long trace_ctx, 969 int skip, struct pt_regs *regs) 970 { 971 } 972 973 #endif 974 975 static __always_inline void 976 trace_event_setup(struct ring_buffer_event *event, 977 int type, unsigned int trace_ctx) 978 { 979 struct trace_entry *ent = ring_buffer_event_data(event); 980 981 tracing_generic_entry_update(ent, type, trace_ctx); 982 } 983 984 static __always_inline struct ring_buffer_event * 985 __trace_buffer_lock_reserve(struct trace_buffer *buffer, 986 int type, 987 unsigned long len, 988 unsigned int trace_ctx) 989 { 990 struct ring_buffer_event *event; 991 992 event = ring_buffer_lock_reserve(buffer, len); 993 if (event != NULL) 994 trace_event_setup(event, type, trace_ctx); 995 996 return event; 997 } 998 999 void tracer_tracing_on(struct trace_array *tr) 1000 { 1001 if (tr->array_buffer.buffer) 1002 ring_buffer_record_on(tr->array_buffer.buffer); 1003 /* 1004 * This flag is looked at when buffers haven't been allocated 1005 * yet, or by some tracers (like irqsoff), that just want to 1006 * know if the ring buffer has been disabled, but it can handle 1007 * races of where it gets disabled but we still do a record. 1008 * As the check is in the fast path of the tracers, it is more 1009 * important to be fast than accurate. 1010 */ 1011 tr->buffer_disabled = 0; 1012 /* Make the flag seen by readers */ 1013 smp_wmb(); 1014 } 1015 1016 /** 1017 * tracing_on - enable tracing buffers 1018 * 1019 * This function enables tracing buffers that may have been 1020 * disabled with tracing_off. 1021 */ 1022 void tracing_on(void) 1023 { 1024 tracer_tracing_on(&global_trace); 1025 } 1026 EXPORT_SYMBOL_GPL(tracing_on); 1027 1028 1029 static __always_inline void 1030 __buffer_unlock_commit(struct trace_buffer *buffer, struct ring_buffer_event *event) 1031 { 1032 __this_cpu_write(trace_taskinfo_save, true); 1033 1034 /* If this is the temp buffer, we need to commit fully */ 1035 if (this_cpu_read(trace_buffered_event) == event) { 1036 /* Length is in event->array[0] */ 1037 ring_buffer_write(buffer, event->array[0], &event->array[1]); 1038 /* Release the temp buffer */ 1039 this_cpu_dec(trace_buffered_event_cnt); 1040 /* ring_buffer_unlock_commit() enables preemption */ 1041 preempt_enable_notrace(); 1042 } else 1043 ring_buffer_unlock_commit(buffer); 1044 } 1045 1046 int __trace_array_puts(struct trace_array *tr, unsigned long ip, 1047 const char *str, int size) 1048 { 1049 struct ring_buffer_event *event; 1050 struct trace_buffer *buffer; 1051 struct print_entry *entry; 1052 unsigned int trace_ctx; 1053 int alloc; 1054 1055 if (!(tr->trace_flags & TRACE_ITER_PRINTK)) 1056 return 0; 1057 1058 if (unlikely(tracing_selftest_running && tr == &global_trace)) 1059 return 0; 1060 1061 if (unlikely(tracing_disabled)) 1062 return 0; 1063 1064 alloc = sizeof(*entry) + size + 2; /* possible \n added */ 1065 1066 trace_ctx = tracing_gen_ctx(); 1067 buffer = tr->array_buffer.buffer; 1068 ring_buffer_nest_start(buffer); 1069 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, 1070 trace_ctx); 1071 if (!event) { 1072 size = 0; 1073 goto out; 1074 } 1075 1076 entry = ring_buffer_event_data(event); 1077 entry->ip = ip; 1078 1079 memcpy(&entry->buf, str, size); 1080 1081 /* Add a newline if necessary */ 1082 if (entry->buf[size - 1] != '\n') { 1083 entry->buf[size] = '\n'; 1084 entry->buf[size + 1] = '\0'; 1085 } else 1086 entry->buf[size] = '\0'; 1087 1088 __buffer_unlock_commit(buffer, event); 1089 ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); 1090 out: 1091 ring_buffer_nest_end(buffer); 1092 return size; 1093 } 1094 EXPORT_SYMBOL_GPL(__trace_array_puts); 1095 1096 /** 1097 * __trace_puts - write a constant string into the trace buffer. 1098 * @ip: The address of the caller 1099 * @str: The constant string to write 1100 * @size: The size of the string. 1101 */ 1102 int __trace_puts(unsigned long ip, const char *str, int size) 1103 { 1104 return __trace_array_puts(&global_trace, ip, str, size); 1105 } 1106 EXPORT_SYMBOL_GPL(__trace_puts); 1107 1108 /** 1109 * __trace_bputs - write the pointer to a constant string into trace buffer 1110 * @ip: The address of the caller 1111 * @str: The constant string to write to the buffer to 1112 */ 1113 int __trace_bputs(unsigned long ip, const char *str) 1114 { 1115 struct ring_buffer_event *event; 1116 struct trace_buffer *buffer; 1117 struct bputs_entry *entry; 1118 unsigned int trace_ctx; 1119 int size = sizeof(struct bputs_entry); 1120 int ret = 0; 1121 1122 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 1123 return 0; 1124 1125 if (unlikely(tracing_selftest_running || tracing_disabled)) 1126 return 0; 1127 1128 trace_ctx = tracing_gen_ctx(); 1129 buffer = global_trace.array_buffer.buffer; 1130 1131 ring_buffer_nest_start(buffer); 1132 event = __trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, 1133 trace_ctx); 1134 if (!event) 1135 goto out; 1136 1137 entry = ring_buffer_event_data(event); 1138 entry->ip = ip; 1139 entry->str = str; 1140 1141 __buffer_unlock_commit(buffer, event); 1142 ftrace_trace_stack(&global_trace, buffer, trace_ctx, 4, NULL); 1143 1144 ret = 1; 1145 out: 1146 ring_buffer_nest_end(buffer); 1147 return ret; 1148 } 1149 EXPORT_SYMBOL_GPL(__trace_bputs); 1150 1151 #ifdef CONFIG_TRACER_SNAPSHOT 1152 static void tracing_snapshot_instance_cond(struct trace_array *tr, 1153 void *cond_data) 1154 { 1155 struct tracer *tracer = tr->current_trace; 1156 unsigned long flags; 1157 1158 if (in_nmi()) { 1159 trace_array_puts(tr, "*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n"); 1160 trace_array_puts(tr, "*** snapshot is being ignored ***\n"); 1161 return; 1162 } 1163 1164 if (!tr->allocated_snapshot) { 1165 trace_array_puts(tr, "*** SNAPSHOT NOT ALLOCATED ***\n"); 1166 trace_array_puts(tr, "*** stopping trace here! ***\n"); 1167 tracer_tracing_off(tr); 1168 return; 1169 } 1170 1171 /* Note, snapshot can not be used when the tracer uses it */ 1172 if (tracer->use_max_tr) { 1173 trace_array_puts(tr, "*** LATENCY TRACER ACTIVE ***\n"); 1174 trace_array_puts(tr, "*** Can not use snapshot (sorry) ***\n"); 1175 return; 1176 } 1177 1178 local_irq_save(flags); 1179 update_max_tr(tr, current, smp_processor_id(), cond_data); 1180 local_irq_restore(flags); 1181 } 1182 1183 void tracing_snapshot_instance(struct trace_array *tr) 1184 { 1185 tracing_snapshot_instance_cond(tr, NULL); 1186 } 1187 1188 /** 1189 * tracing_snapshot - take a snapshot of the current buffer. 1190 * 1191 * This causes a swap between the snapshot buffer and the current live 1192 * tracing buffer. You can use this to take snapshots of the live 1193 * trace when some condition is triggered, but continue to trace. 1194 * 1195 * Note, make sure to allocate the snapshot with either 1196 * a tracing_snapshot_alloc(), or by doing it manually 1197 * with: echo 1 > /sys/kernel/tracing/snapshot 1198 * 1199 * If the snapshot buffer is not allocated, it will stop tracing. 1200 * Basically making a permanent snapshot. 1201 */ 1202 void tracing_snapshot(void) 1203 { 1204 struct trace_array *tr = &global_trace; 1205 1206 tracing_snapshot_instance(tr); 1207 } 1208 EXPORT_SYMBOL_GPL(tracing_snapshot); 1209 1210 /** 1211 * tracing_snapshot_cond - conditionally take a snapshot of the current buffer. 1212 * @tr: The tracing instance to snapshot 1213 * @cond_data: The data to be tested conditionally, and possibly saved 1214 * 1215 * This is the same as tracing_snapshot() except that the snapshot is 1216 * conditional - the snapshot will only happen if the 1217 * cond_snapshot.update() implementation receiving the cond_data 1218 * returns true, which means that the trace array's cond_snapshot 1219 * update() operation used the cond_data to determine whether the 1220 * snapshot should be taken, and if it was, presumably saved it along 1221 * with the snapshot. 1222 */ 1223 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data) 1224 { 1225 tracing_snapshot_instance_cond(tr, cond_data); 1226 } 1227 EXPORT_SYMBOL_GPL(tracing_snapshot_cond); 1228 1229 /** 1230 * tracing_cond_snapshot_data - get the user data associated with a snapshot 1231 * @tr: The tracing instance 1232 * 1233 * When the user enables a conditional snapshot using 1234 * tracing_snapshot_cond_enable(), the user-defined cond_data is saved 1235 * with the snapshot. This accessor is used to retrieve it. 1236 * 1237 * Should not be called from cond_snapshot.update(), since it takes 1238 * the tr->max_lock lock, which the code calling 1239 * cond_snapshot.update() has already done. 1240 * 1241 * Returns the cond_data associated with the trace array's snapshot. 1242 */ 1243 void *tracing_cond_snapshot_data(struct trace_array *tr) 1244 { 1245 void *cond_data = NULL; 1246 1247 local_irq_disable(); 1248 arch_spin_lock(&tr->max_lock); 1249 1250 if (tr->cond_snapshot) 1251 cond_data = tr->cond_snapshot->cond_data; 1252 1253 arch_spin_unlock(&tr->max_lock); 1254 local_irq_enable(); 1255 1256 return cond_data; 1257 } 1258 EXPORT_SYMBOL_GPL(tracing_cond_snapshot_data); 1259 1260 static int resize_buffer_duplicate_size(struct array_buffer *trace_buf, 1261 struct array_buffer *size_buf, int cpu_id); 1262 static void set_buffer_entries(struct array_buffer *buf, unsigned long val); 1263 1264 int tracing_alloc_snapshot_instance(struct trace_array *tr) 1265 { 1266 int ret; 1267 1268 if (!tr->allocated_snapshot) { 1269 1270 /* allocate spare buffer */ 1271 ret = resize_buffer_duplicate_size(&tr->max_buffer, 1272 &tr->array_buffer, RING_BUFFER_ALL_CPUS); 1273 if (ret < 0) 1274 return ret; 1275 1276 tr->allocated_snapshot = true; 1277 } 1278 1279 return 0; 1280 } 1281 1282 static void free_snapshot(struct trace_array *tr) 1283 { 1284 /* 1285 * We don't free the ring buffer. instead, resize it because 1286 * The max_tr ring buffer has some state (e.g. ring->clock) and 1287 * we want preserve it. 1288 */ 1289 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); 1290 set_buffer_entries(&tr->max_buffer, 1); 1291 tracing_reset_online_cpus(&tr->max_buffer); 1292 tr->allocated_snapshot = false; 1293 } 1294 1295 /** 1296 * tracing_alloc_snapshot - allocate snapshot buffer. 1297 * 1298 * This only allocates the snapshot buffer if it isn't already 1299 * allocated - it doesn't also take a snapshot. 1300 * 1301 * This is meant to be used in cases where the snapshot buffer needs 1302 * to be set up for events that can't sleep but need to be able to 1303 * trigger a snapshot. 1304 */ 1305 int tracing_alloc_snapshot(void) 1306 { 1307 struct trace_array *tr = &global_trace; 1308 int ret; 1309 1310 ret = tracing_alloc_snapshot_instance(tr); 1311 WARN_ON(ret < 0); 1312 1313 return ret; 1314 } 1315 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 1316 1317 /** 1318 * tracing_snapshot_alloc - allocate and take a snapshot of the current buffer. 1319 * 1320 * This is similar to tracing_snapshot(), but it will allocate the 1321 * snapshot buffer if it isn't already allocated. Use this only 1322 * where it is safe to sleep, as the allocation may sleep. 1323 * 1324 * This causes a swap between the snapshot buffer and the current live 1325 * tracing buffer. You can use this to take snapshots of the live 1326 * trace when some condition is triggered, but continue to trace. 1327 */ 1328 void tracing_snapshot_alloc(void) 1329 { 1330 int ret; 1331 1332 ret = tracing_alloc_snapshot(); 1333 if (ret < 0) 1334 return; 1335 1336 tracing_snapshot(); 1337 } 1338 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 1339 1340 /** 1341 * tracing_snapshot_cond_enable - enable conditional snapshot for an instance 1342 * @tr: The tracing instance 1343 * @cond_data: User data to associate with the snapshot 1344 * @update: Implementation of the cond_snapshot update function 1345 * 1346 * Check whether the conditional snapshot for the given instance has 1347 * already been enabled, or if the current tracer is already using a 1348 * snapshot; if so, return -EBUSY, else create a cond_snapshot and 1349 * save the cond_data and update function inside. 1350 * 1351 * Returns 0 if successful, error otherwise. 1352 */ 1353 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, 1354 cond_update_fn_t update) 1355 { 1356 struct cond_snapshot *cond_snapshot; 1357 int ret = 0; 1358 1359 cond_snapshot = kzalloc(sizeof(*cond_snapshot), GFP_KERNEL); 1360 if (!cond_snapshot) 1361 return -ENOMEM; 1362 1363 cond_snapshot->cond_data = cond_data; 1364 cond_snapshot->update = update; 1365 1366 mutex_lock(&trace_types_lock); 1367 1368 ret = tracing_alloc_snapshot_instance(tr); 1369 if (ret) 1370 goto fail_unlock; 1371 1372 if (tr->current_trace->use_max_tr) { 1373 ret = -EBUSY; 1374 goto fail_unlock; 1375 } 1376 1377 /* 1378 * The cond_snapshot can only change to NULL without the 1379 * trace_types_lock. We don't care if we race with it going 1380 * to NULL, but we want to make sure that it's not set to 1381 * something other than NULL when we get here, which we can 1382 * do safely with only holding the trace_types_lock and not 1383 * having to take the max_lock. 1384 */ 1385 if (tr->cond_snapshot) { 1386 ret = -EBUSY; 1387 goto fail_unlock; 1388 } 1389 1390 local_irq_disable(); 1391 arch_spin_lock(&tr->max_lock); 1392 tr->cond_snapshot = cond_snapshot; 1393 arch_spin_unlock(&tr->max_lock); 1394 local_irq_enable(); 1395 1396 mutex_unlock(&trace_types_lock); 1397 1398 return ret; 1399 1400 fail_unlock: 1401 mutex_unlock(&trace_types_lock); 1402 kfree(cond_snapshot); 1403 return ret; 1404 } 1405 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_enable); 1406 1407 /** 1408 * tracing_snapshot_cond_disable - disable conditional snapshot for an instance 1409 * @tr: The tracing instance 1410 * 1411 * Check whether the conditional snapshot for the given instance is 1412 * enabled; if so, free the cond_snapshot associated with it, 1413 * otherwise return -EINVAL. 1414 * 1415 * Returns 0 if successful, error otherwise. 1416 */ 1417 int tracing_snapshot_cond_disable(struct trace_array *tr) 1418 { 1419 int ret = 0; 1420 1421 local_irq_disable(); 1422 arch_spin_lock(&tr->max_lock); 1423 1424 if (!tr->cond_snapshot) 1425 ret = -EINVAL; 1426 else { 1427 kfree(tr->cond_snapshot); 1428 tr->cond_snapshot = NULL; 1429 } 1430 1431 arch_spin_unlock(&tr->max_lock); 1432 local_irq_enable(); 1433 1434 return ret; 1435 } 1436 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_disable); 1437 #else 1438 void tracing_snapshot(void) 1439 { 1440 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used"); 1441 } 1442 EXPORT_SYMBOL_GPL(tracing_snapshot); 1443 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data) 1444 { 1445 WARN_ONCE(1, "Snapshot feature not enabled, but internal conditional snapshot used"); 1446 } 1447 EXPORT_SYMBOL_GPL(tracing_snapshot_cond); 1448 int tracing_alloc_snapshot(void) 1449 { 1450 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used"); 1451 return -ENODEV; 1452 } 1453 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 1454 void tracing_snapshot_alloc(void) 1455 { 1456 /* Give warning */ 1457 tracing_snapshot(); 1458 } 1459 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 1460 void *tracing_cond_snapshot_data(struct trace_array *tr) 1461 { 1462 return NULL; 1463 } 1464 EXPORT_SYMBOL_GPL(tracing_cond_snapshot_data); 1465 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, cond_update_fn_t update) 1466 { 1467 return -ENODEV; 1468 } 1469 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_enable); 1470 int tracing_snapshot_cond_disable(struct trace_array *tr) 1471 { 1472 return false; 1473 } 1474 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_disable); 1475 #define free_snapshot(tr) do { } while (0) 1476 #endif /* CONFIG_TRACER_SNAPSHOT */ 1477 1478 void tracer_tracing_off(struct trace_array *tr) 1479 { 1480 if (tr->array_buffer.buffer) 1481 ring_buffer_record_off(tr->array_buffer.buffer); 1482 /* 1483 * This flag is looked at when buffers haven't been allocated 1484 * yet, or by some tracers (like irqsoff), that just want to 1485 * know if the ring buffer has been disabled, but it can handle 1486 * races of where it gets disabled but we still do a record. 1487 * As the check is in the fast path of the tracers, it is more 1488 * important to be fast than accurate. 1489 */ 1490 tr->buffer_disabled = 1; 1491 /* Make the flag seen by readers */ 1492 smp_wmb(); 1493 } 1494 1495 /** 1496 * tracing_off - turn off tracing buffers 1497 * 1498 * This function stops the tracing buffers from recording data. 1499 * It does not disable any overhead the tracers themselves may 1500 * be causing. This function simply causes all recording to 1501 * the ring buffers to fail. 1502 */ 1503 void tracing_off(void) 1504 { 1505 tracer_tracing_off(&global_trace); 1506 } 1507 EXPORT_SYMBOL_GPL(tracing_off); 1508 1509 void disable_trace_on_warning(void) 1510 { 1511 if (__disable_trace_on_warning) { 1512 trace_array_printk_buf(global_trace.array_buffer.buffer, _THIS_IP_, 1513 "Disabling tracing due to warning\n"); 1514 tracing_off(); 1515 } 1516 } 1517 1518 /** 1519 * tracer_tracing_is_on - show real state of ring buffer enabled 1520 * @tr : the trace array to know if ring buffer is enabled 1521 * 1522 * Shows real state of the ring buffer if it is enabled or not. 1523 */ 1524 bool tracer_tracing_is_on(struct trace_array *tr) 1525 { 1526 if (tr->array_buffer.buffer) 1527 return ring_buffer_record_is_on(tr->array_buffer.buffer); 1528 return !tr->buffer_disabled; 1529 } 1530 1531 /** 1532 * tracing_is_on - show state of ring buffers enabled 1533 */ 1534 int tracing_is_on(void) 1535 { 1536 return tracer_tracing_is_on(&global_trace); 1537 } 1538 EXPORT_SYMBOL_GPL(tracing_is_on); 1539 1540 static int __init set_buf_size(char *str) 1541 { 1542 unsigned long buf_size; 1543 1544 if (!str) 1545 return 0; 1546 buf_size = memparse(str, &str); 1547 /* 1548 * nr_entries can not be zero and the startup 1549 * tests require some buffer space. Therefore 1550 * ensure we have at least 4096 bytes of buffer. 1551 */ 1552 trace_buf_size = max(4096UL, buf_size); 1553 return 1; 1554 } 1555 __setup("trace_buf_size=", set_buf_size); 1556 1557 static int __init set_tracing_thresh(char *str) 1558 { 1559 unsigned long threshold; 1560 int ret; 1561 1562 if (!str) 1563 return 0; 1564 ret = kstrtoul(str, 0, &threshold); 1565 if (ret < 0) 1566 return 0; 1567 tracing_thresh = threshold * 1000; 1568 return 1; 1569 } 1570 __setup("tracing_thresh=", set_tracing_thresh); 1571 1572 unsigned long nsecs_to_usecs(unsigned long nsecs) 1573 { 1574 return nsecs / 1000; 1575 } 1576 1577 /* 1578 * TRACE_FLAGS is defined as a tuple matching bit masks with strings. 1579 * It uses C(a, b) where 'a' is the eval (enum) name and 'b' is the string that 1580 * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list 1581 * of strings in the order that the evals (enum) were defined. 1582 */ 1583 #undef C 1584 #define C(a, b) b 1585 1586 /* These must match the bit positions in trace_iterator_flags */ 1587 static const char *trace_options[] = { 1588 TRACE_FLAGS 1589 NULL 1590 }; 1591 1592 static struct { 1593 u64 (*func)(void); 1594 const char *name; 1595 int in_ns; /* is this clock in nanoseconds? */ 1596 } trace_clocks[] = { 1597 { trace_clock_local, "local", 1 }, 1598 { trace_clock_global, "global", 1 }, 1599 { trace_clock_counter, "counter", 0 }, 1600 { trace_clock_jiffies, "uptime", 0 }, 1601 { trace_clock, "perf", 1 }, 1602 { ktime_get_mono_fast_ns, "mono", 1 }, 1603 { ktime_get_raw_fast_ns, "mono_raw", 1 }, 1604 { ktime_get_boot_fast_ns, "boot", 1 }, 1605 { ktime_get_tai_fast_ns, "tai", 1 }, 1606 ARCH_TRACE_CLOCKS 1607 }; 1608 1609 bool trace_clock_in_ns(struct trace_array *tr) 1610 { 1611 if (trace_clocks[tr->clock_id].in_ns) 1612 return true; 1613 1614 return false; 1615 } 1616 1617 /* 1618 * trace_parser_get_init - gets the buffer for trace parser 1619 */ 1620 int trace_parser_get_init(struct trace_parser *parser, int size) 1621 { 1622 memset(parser, 0, sizeof(*parser)); 1623 1624 parser->buffer = kmalloc(size, GFP_KERNEL); 1625 if (!parser->buffer) 1626 return 1; 1627 1628 parser->size = size; 1629 return 0; 1630 } 1631 1632 /* 1633 * trace_parser_put - frees the buffer for trace parser 1634 */ 1635 void trace_parser_put(struct trace_parser *parser) 1636 { 1637 kfree(parser->buffer); 1638 parser->buffer = NULL; 1639 } 1640 1641 /* 1642 * trace_get_user - reads the user input string separated by space 1643 * (matched by isspace(ch)) 1644 * 1645 * For each string found the 'struct trace_parser' is updated, 1646 * and the function returns. 1647 * 1648 * Returns number of bytes read. 1649 * 1650 * See kernel/trace/trace.h for 'struct trace_parser' details. 1651 */ 1652 int trace_get_user(struct trace_parser *parser, const char __user *ubuf, 1653 size_t cnt, loff_t *ppos) 1654 { 1655 char ch; 1656 size_t read = 0; 1657 ssize_t ret; 1658 1659 if (!*ppos) 1660 trace_parser_clear(parser); 1661 1662 ret = get_user(ch, ubuf++); 1663 if (ret) 1664 goto out; 1665 1666 read++; 1667 cnt--; 1668 1669 /* 1670 * The parser is not finished with the last write, 1671 * continue reading the user input without skipping spaces. 1672 */ 1673 if (!parser->cont) { 1674 /* skip white space */ 1675 while (cnt && isspace(ch)) { 1676 ret = get_user(ch, ubuf++); 1677 if (ret) 1678 goto out; 1679 read++; 1680 cnt--; 1681 } 1682 1683 parser->idx = 0; 1684 1685 /* only spaces were written */ 1686 if (isspace(ch) || !ch) { 1687 *ppos += read; 1688 ret = read; 1689 goto out; 1690 } 1691 } 1692 1693 /* read the non-space input */ 1694 while (cnt && !isspace(ch) && ch) { 1695 if (parser->idx < parser->size - 1) 1696 parser->buffer[parser->idx++] = ch; 1697 else { 1698 ret = -EINVAL; 1699 goto out; 1700 } 1701 ret = get_user(ch, ubuf++); 1702 if (ret) 1703 goto out; 1704 read++; 1705 cnt--; 1706 } 1707 1708 /* We either got finished input or we have to wait for another call. */ 1709 if (isspace(ch) || !ch) { 1710 parser->buffer[parser->idx] = 0; 1711 parser->cont = false; 1712 } else if (parser->idx < parser->size - 1) { 1713 parser->cont = true; 1714 parser->buffer[parser->idx++] = ch; 1715 /* Make sure the parsed string always terminates with '\0'. */ 1716 parser->buffer[parser->idx] = 0; 1717 } else { 1718 ret = -EINVAL; 1719 goto out; 1720 } 1721 1722 *ppos += read; 1723 ret = read; 1724 1725 out: 1726 return ret; 1727 } 1728 1729 /* TODO add a seq_buf_to_buffer() */ 1730 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt) 1731 { 1732 int len; 1733 1734 if (trace_seq_used(s) <= s->seq.readpos) 1735 return -EBUSY; 1736 1737 len = trace_seq_used(s) - s->seq.readpos; 1738 if (cnt > len) 1739 cnt = len; 1740 memcpy(buf, s->buffer + s->seq.readpos, cnt); 1741 1742 s->seq.readpos += cnt; 1743 return cnt; 1744 } 1745 1746 unsigned long __read_mostly tracing_thresh; 1747 1748 #ifdef CONFIG_TRACER_MAX_TRACE 1749 static const struct file_operations tracing_max_lat_fops; 1750 1751 #ifdef LATENCY_FS_NOTIFY 1752 1753 static struct workqueue_struct *fsnotify_wq; 1754 1755 static void latency_fsnotify_workfn(struct work_struct *work) 1756 { 1757 struct trace_array *tr = container_of(work, struct trace_array, 1758 fsnotify_work); 1759 fsnotify_inode(tr->d_max_latency->d_inode, FS_MODIFY); 1760 } 1761 1762 static void latency_fsnotify_workfn_irq(struct irq_work *iwork) 1763 { 1764 struct trace_array *tr = container_of(iwork, struct trace_array, 1765 fsnotify_irqwork); 1766 queue_work(fsnotify_wq, &tr->fsnotify_work); 1767 } 1768 1769 static void trace_create_maxlat_file(struct trace_array *tr, 1770 struct dentry *d_tracer) 1771 { 1772 INIT_WORK(&tr->fsnotify_work, latency_fsnotify_workfn); 1773 init_irq_work(&tr->fsnotify_irqwork, latency_fsnotify_workfn_irq); 1774 tr->d_max_latency = trace_create_file("tracing_max_latency", 1775 TRACE_MODE_WRITE, 1776 d_tracer, tr, 1777 &tracing_max_lat_fops); 1778 } 1779 1780 __init static int latency_fsnotify_init(void) 1781 { 1782 fsnotify_wq = alloc_workqueue("tr_max_lat_wq", 1783 WQ_UNBOUND | WQ_HIGHPRI, 0); 1784 if (!fsnotify_wq) { 1785 pr_err("Unable to allocate tr_max_lat_wq\n"); 1786 return -ENOMEM; 1787 } 1788 return 0; 1789 } 1790 1791 late_initcall_sync(latency_fsnotify_init); 1792 1793 void latency_fsnotify(struct trace_array *tr) 1794 { 1795 if (!fsnotify_wq) 1796 return; 1797 /* 1798 * We cannot call queue_work(&tr->fsnotify_work) from here because it's 1799 * possible that we are called from __schedule() or do_idle(), which 1800 * could cause a deadlock. 1801 */ 1802 irq_work_queue(&tr->fsnotify_irqwork); 1803 } 1804 1805 #else /* !LATENCY_FS_NOTIFY */ 1806 1807 #define trace_create_maxlat_file(tr, d_tracer) \ 1808 trace_create_file("tracing_max_latency", TRACE_MODE_WRITE, \ 1809 d_tracer, tr, &tracing_max_lat_fops) 1810 1811 #endif 1812 1813 /* 1814 * Copy the new maximum trace into the separate maximum-trace 1815 * structure. (this way the maximum trace is permanently saved, 1816 * for later retrieval via /sys/kernel/tracing/tracing_max_latency) 1817 */ 1818 static void 1819 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 1820 { 1821 struct array_buffer *trace_buf = &tr->array_buffer; 1822 struct array_buffer *max_buf = &tr->max_buffer; 1823 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu); 1824 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu); 1825 1826 max_buf->cpu = cpu; 1827 max_buf->time_start = data->preempt_timestamp; 1828 1829 max_data->saved_latency = tr->max_latency; 1830 max_data->critical_start = data->critical_start; 1831 max_data->critical_end = data->critical_end; 1832 1833 strncpy(max_data->comm, tsk->comm, TASK_COMM_LEN); 1834 max_data->pid = tsk->pid; 1835 /* 1836 * If tsk == current, then use current_uid(), as that does not use 1837 * RCU. The irq tracer can be called out of RCU scope. 1838 */ 1839 if (tsk == current) 1840 max_data->uid = current_uid(); 1841 else 1842 max_data->uid = task_uid(tsk); 1843 1844 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; 1845 max_data->policy = tsk->policy; 1846 max_data->rt_priority = tsk->rt_priority; 1847 1848 /* record this tasks comm */ 1849 tracing_record_cmdline(tsk); 1850 latency_fsnotify(tr); 1851 } 1852 1853 /** 1854 * update_max_tr - snapshot all trace buffers from global_trace to max_tr 1855 * @tr: tracer 1856 * @tsk: the task with the latency 1857 * @cpu: The cpu that initiated the trace. 1858 * @cond_data: User data associated with a conditional snapshot 1859 * 1860 * Flip the buffers between the @tr and the max_tr and record information 1861 * about which task was the cause of this latency. 1862 */ 1863 void 1864 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu, 1865 void *cond_data) 1866 { 1867 if (tr->stop_count) 1868 return; 1869 1870 WARN_ON_ONCE(!irqs_disabled()); 1871 1872 if (!tr->allocated_snapshot) { 1873 /* Only the nop tracer should hit this when disabling */ 1874 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1875 return; 1876 } 1877 1878 arch_spin_lock(&tr->max_lock); 1879 1880 /* Inherit the recordable setting from array_buffer */ 1881 if (ring_buffer_record_is_set_on(tr->array_buffer.buffer)) 1882 ring_buffer_record_on(tr->max_buffer.buffer); 1883 else 1884 ring_buffer_record_off(tr->max_buffer.buffer); 1885 1886 #ifdef CONFIG_TRACER_SNAPSHOT 1887 if (tr->cond_snapshot && !tr->cond_snapshot->update(tr, cond_data)) { 1888 arch_spin_unlock(&tr->max_lock); 1889 return; 1890 } 1891 #endif 1892 swap(tr->array_buffer.buffer, tr->max_buffer.buffer); 1893 1894 __update_max_tr(tr, tsk, cpu); 1895 1896 arch_spin_unlock(&tr->max_lock); 1897 1898 /* Any waiters on the old snapshot buffer need to wake up */ 1899 ring_buffer_wake_waiters(tr->array_buffer.buffer, RING_BUFFER_ALL_CPUS); 1900 } 1901 1902 /** 1903 * update_max_tr_single - only copy one trace over, and reset the rest 1904 * @tr: tracer 1905 * @tsk: task with the latency 1906 * @cpu: the cpu of the buffer to copy. 1907 * 1908 * Flip the trace of a single CPU buffer between the @tr and the max_tr. 1909 */ 1910 void 1911 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) 1912 { 1913 int ret; 1914 1915 if (tr->stop_count) 1916 return; 1917 1918 WARN_ON_ONCE(!irqs_disabled()); 1919 if (!tr->allocated_snapshot) { 1920 /* Only the nop tracer should hit this when disabling */ 1921 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1922 return; 1923 } 1924 1925 arch_spin_lock(&tr->max_lock); 1926 1927 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->array_buffer.buffer, cpu); 1928 1929 if (ret == -EBUSY) { 1930 /* 1931 * We failed to swap the buffer due to a commit taking 1932 * place on this CPU. We fail to record, but we reset 1933 * the max trace buffer (no one writes directly to it) 1934 * and flag that it failed. 1935 * Another reason is resize is in progress. 1936 */ 1937 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, 1938 "Failed to swap buffers due to commit or resize in progress\n"); 1939 } 1940 1941 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY); 1942 1943 __update_max_tr(tr, tsk, cpu); 1944 arch_spin_unlock(&tr->max_lock); 1945 } 1946 1947 #endif /* CONFIG_TRACER_MAX_TRACE */ 1948 1949 static int wait_on_pipe(struct trace_iterator *iter, int full) 1950 { 1951 int ret; 1952 1953 /* Iterators are static, they should be filled or empty */ 1954 if (trace_buffer_iter(iter, iter->cpu_file)) 1955 return 0; 1956 1957 ret = ring_buffer_wait(iter->array_buffer->buffer, iter->cpu_file, full); 1958 1959 #ifdef CONFIG_TRACER_MAX_TRACE 1960 /* 1961 * Make sure this is still the snapshot buffer, as if a snapshot were 1962 * to happen, this would now be the main buffer. 1963 */ 1964 if (iter->snapshot) 1965 iter->array_buffer = &iter->tr->max_buffer; 1966 #endif 1967 return ret; 1968 } 1969 1970 #ifdef CONFIG_FTRACE_STARTUP_TEST 1971 static bool selftests_can_run; 1972 1973 struct trace_selftests { 1974 struct list_head list; 1975 struct tracer *type; 1976 }; 1977 1978 static LIST_HEAD(postponed_selftests); 1979 1980 static int save_selftest(struct tracer *type) 1981 { 1982 struct trace_selftests *selftest; 1983 1984 selftest = kmalloc(sizeof(*selftest), GFP_KERNEL); 1985 if (!selftest) 1986 return -ENOMEM; 1987 1988 selftest->type = type; 1989 list_add(&selftest->list, &postponed_selftests); 1990 return 0; 1991 } 1992 1993 static int run_tracer_selftest(struct tracer *type) 1994 { 1995 struct trace_array *tr = &global_trace; 1996 struct tracer *saved_tracer = tr->current_trace; 1997 int ret; 1998 1999 if (!type->selftest || tracing_selftest_disabled) 2000 return 0; 2001 2002 /* 2003 * If a tracer registers early in boot up (before scheduling is 2004 * initialized and such), then do not run its selftests yet. 2005 * Instead, run it a little later in the boot process. 2006 */ 2007 if (!selftests_can_run) 2008 return save_selftest(type); 2009 2010 if (!tracing_is_on()) { 2011 pr_warn("Selftest for tracer %s skipped due to tracing disabled\n", 2012 type->name); 2013 return 0; 2014 } 2015 2016 /* 2017 * Run a selftest on this tracer. 2018 * Here we reset the trace buffer, and set the current 2019 * tracer to be this tracer. The tracer can then run some 2020 * internal tracing to verify that everything is in order. 2021 * If we fail, we do not register this tracer. 2022 */ 2023 tracing_reset_online_cpus(&tr->array_buffer); 2024 2025 tr->current_trace = type; 2026 2027 #ifdef CONFIG_TRACER_MAX_TRACE 2028 if (type->use_max_tr) { 2029 /* If we expanded the buffers, make sure the max is expanded too */ 2030 if (ring_buffer_expanded) 2031 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, 2032 RING_BUFFER_ALL_CPUS); 2033 tr->allocated_snapshot = true; 2034 } 2035 #endif 2036 2037 /* the test is responsible for initializing and enabling */ 2038 pr_info("Testing tracer %s: ", type->name); 2039 ret = type->selftest(type, tr); 2040 /* the test is responsible for resetting too */ 2041 tr->current_trace = saved_tracer; 2042 if (ret) { 2043 printk(KERN_CONT "FAILED!\n"); 2044 /* Add the warning after printing 'FAILED' */ 2045 WARN_ON(1); 2046 return -1; 2047 } 2048 /* Only reset on passing, to avoid touching corrupted buffers */ 2049 tracing_reset_online_cpus(&tr->array_buffer); 2050 2051 #ifdef CONFIG_TRACER_MAX_TRACE 2052 if (type->use_max_tr) { 2053 tr->allocated_snapshot = false; 2054 2055 /* Shrink the max buffer again */ 2056 if (ring_buffer_expanded) 2057 ring_buffer_resize(tr->max_buffer.buffer, 1, 2058 RING_BUFFER_ALL_CPUS); 2059 } 2060 #endif 2061 2062 printk(KERN_CONT "PASSED\n"); 2063 return 0; 2064 } 2065 2066 static int do_run_tracer_selftest(struct tracer *type) 2067 { 2068 int ret; 2069 2070 /* 2071 * Tests can take a long time, especially if they are run one after the 2072 * other, as does happen during bootup when all the tracers are 2073 * registered. This could cause the soft lockup watchdog to trigger. 2074 */ 2075 cond_resched(); 2076 2077 tracing_selftest_running = true; 2078 ret = run_tracer_selftest(type); 2079 tracing_selftest_running = false; 2080 2081 return ret; 2082 } 2083 2084 static __init int init_trace_selftests(void) 2085 { 2086 struct trace_selftests *p, *n; 2087 struct tracer *t, **last; 2088 int ret; 2089 2090 selftests_can_run = true; 2091 2092 mutex_lock(&trace_types_lock); 2093 2094 if (list_empty(&postponed_selftests)) 2095 goto out; 2096 2097 pr_info("Running postponed tracer tests:\n"); 2098 2099 tracing_selftest_running = true; 2100 list_for_each_entry_safe(p, n, &postponed_selftests, list) { 2101 /* This loop can take minutes when sanitizers are enabled, so 2102 * lets make sure we allow RCU processing. 2103 */ 2104 cond_resched(); 2105 ret = run_tracer_selftest(p->type); 2106 /* If the test fails, then warn and remove from available_tracers */ 2107 if (ret < 0) { 2108 WARN(1, "tracer: %s failed selftest, disabling\n", 2109 p->type->name); 2110 last = &trace_types; 2111 for (t = trace_types; t; t = t->next) { 2112 if (t == p->type) { 2113 *last = t->next; 2114 break; 2115 } 2116 last = &t->next; 2117 } 2118 } 2119 list_del(&p->list); 2120 kfree(p); 2121 } 2122 tracing_selftest_running = false; 2123 2124 out: 2125 mutex_unlock(&trace_types_lock); 2126 2127 return 0; 2128 } 2129 core_initcall(init_trace_selftests); 2130 #else 2131 static inline int run_tracer_selftest(struct tracer *type) 2132 { 2133 return 0; 2134 } 2135 static inline int do_run_tracer_selftest(struct tracer *type) 2136 { 2137 return 0; 2138 } 2139 #endif /* CONFIG_FTRACE_STARTUP_TEST */ 2140 2141 static void add_tracer_options(struct trace_array *tr, struct tracer *t); 2142 2143 static void __init apply_trace_boot_options(void); 2144 2145 /** 2146 * register_tracer - register a tracer with the ftrace system. 2147 * @type: the plugin for the tracer 2148 * 2149 * Register a new plugin tracer. 2150 */ 2151 int __init register_tracer(struct tracer *type) 2152 { 2153 struct tracer *t; 2154 int ret = 0; 2155 2156 if (!type->name) { 2157 pr_info("Tracer must have a name\n"); 2158 return -1; 2159 } 2160 2161 if (strlen(type->name) >= MAX_TRACER_SIZE) { 2162 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE); 2163 return -1; 2164 } 2165 2166 if (security_locked_down(LOCKDOWN_TRACEFS)) { 2167 pr_warn("Can not register tracer %s due to lockdown\n", 2168 type->name); 2169 return -EPERM; 2170 } 2171 2172 mutex_lock(&trace_types_lock); 2173 2174 for (t = trace_types; t; t = t->next) { 2175 if (strcmp(type->name, t->name) == 0) { 2176 /* already found */ 2177 pr_info("Tracer %s already registered\n", 2178 type->name); 2179 ret = -1; 2180 goto out; 2181 } 2182 } 2183 2184 if (!type->set_flag) 2185 type->set_flag = &dummy_set_flag; 2186 if (!type->flags) { 2187 /*allocate a dummy tracer_flags*/ 2188 type->flags = kmalloc(sizeof(*type->flags), GFP_KERNEL); 2189 if (!type->flags) { 2190 ret = -ENOMEM; 2191 goto out; 2192 } 2193 type->flags->val = 0; 2194 type->flags->opts = dummy_tracer_opt; 2195 } else 2196 if (!type->flags->opts) 2197 type->flags->opts = dummy_tracer_opt; 2198 2199 /* store the tracer for __set_tracer_option */ 2200 type->flags->trace = type; 2201 2202 ret = do_run_tracer_selftest(type); 2203 if (ret < 0) 2204 goto out; 2205 2206 type->next = trace_types; 2207 trace_types = type; 2208 add_tracer_options(&global_trace, type); 2209 2210 out: 2211 mutex_unlock(&trace_types_lock); 2212 2213 if (ret || !default_bootup_tracer) 2214 goto out_unlock; 2215 2216 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE)) 2217 goto out_unlock; 2218 2219 printk(KERN_INFO "Starting tracer '%s'\n", type->name); 2220 /* Do we want this tracer to start on bootup? */ 2221 tracing_set_tracer(&global_trace, type->name); 2222 default_bootup_tracer = NULL; 2223 2224 apply_trace_boot_options(); 2225 2226 /* disable other selftests, since this will break it. */ 2227 disable_tracing_selftest("running a tracer"); 2228 2229 out_unlock: 2230 return ret; 2231 } 2232 2233 static void tracing_reset_cpu(struct array_buffer *buf, int cpu) 2234 { 2235 struct trace_buffer *buffer = buf->buffer; 2236 2237 if (!buffer) 2238 return; 2239 2240 ring_buffer_record_disable(buffer); 2241 2242 /* Make sure all commits have finished */ 2243 synchronize_rcu(); 2244 ring_buffer_reset_cpu(buffer, cpu); 2245 2246 ring_buffer_record_enable(buffer); 2247 } 2248 2249 void tracing_reset_online_cpus(struct array_buffer *buf) 2250 { 2251 struct trace_buffer *buffer = buf->buffer; 2252 2253 if (!buffer) 2254 return; 2255 2256 ring_buffer_record_disable(buffer); 2257 2258 /* Make sure all commits have finished */ 2259 synchronize_rcu(); 2260 2261 buf->time_start = buffer_ftrace_now(buf, buf->cpu); 2262 2263 ring_buffer_reset_online_cpus(buffer); 2264 2265 ring_buffer_record_enable(buffer); 2266 } 2267 2268 /* Must have trace_types_lock held */ 2269 void tracing_reset_all_online_cpus_unlocked(void) 2270 { 2271 struct trace_array *tr; 2272 2273 lockdep_assert_held(&trace_types_lock); 2274 2275 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 2276 if (!tr->clear_trace) 2277 continue; 2278 tr->clear_trace = false; 2279 tracing_reset_online_cpus(&tr->array_buffer); 2280 #ifdef CONFIG_TRACER_MAX_TRACE 2281 tracing_reset_online_cpus(&tr->max_buffer); 2282 #endif 2283 } 2284 } 2285 2286 void tracing_reset_all_online_cpus(void) 2287 { 2288 mutex_lock(&trace_types_lock); 2289 tracing_reset_all_online_cpus_unlocked(); 2290 mutex_unlock(&trace_types_lock); 2291 } 2292 2293 /* 2294 * The tgid_map array maps from pid to tgid; i.e. the value stored at index i 2295 * is the tgid last observed corresponding to pid=i. 2296 */ 2297 static int *tgid_map; 2298 2299 /* The maximum valid index into tgid_map. */ 2300 static size_t tgid_map_max; 2301 2302 #define SAVED_CMDLINES_DEFAULT 128 2303 #define NO_CMDLINE_MAP UINT_MAX 2304 /* 2305 * Preemption must be disabled before acquiring trace_cmdline_lock. 2306 * The various trace_arrays' max_lock must be acquired in a context 2307 * where interrupt is disabled. 2308 */ 2309 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED; 2310 struct saved_cmdlines_buffer { 2311 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1]; 2312 unsigned *map_cmdline_to_pid; 2313 unsigned cmdline_num; 2314 int cmdline_idx; 2315 char saved_cmdlines[]; 2316 }; 2317 static struct saved_cmdlines_buffer *savedcmd; 2318 2319 static inline char *get_saved_cmdlines(int idx) 2320 { 2321 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN]; 2322 } 2323 2324 static inline void set_cmdline(int idx, const char *cmdline) 2325 { 2326 strncpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN); 2327 } 2328 2329 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s) 2330 { 2331 int order = get_order(sizeof(*s) + s->cmdline_num * TASK_COMM_LEN); 2332 2333 kfree(s->map_cmdline_to_pid); 2334 kmemleak_free(s); 2335 free_pages((unsigned long)s, order); 2336 } 2337 2338 static struct saved_cmdlines_buffer *allocate_cmdlines_buffer(unsigned int val) 2339 { 2340 struct saved_cmdlines_buffer *s; 2341 struct page *page; 2342 int orig_size, size; 2343 int order; 2344 2345 /* Figure out how much is needed to hold the given number of cmdlines */ 2346 orig_size = sizeof(*s) + val * TASK_COMM_LEN; 2347 order = get_order(orig_size); 2348 size = 1 << (order + PAGE_SHIFT); 2349 page = alloc_pages(GFP_KERNEL, order); 2350 if (!page) 2351 return NULL; 2352 2353 s = page_address(page); 2354 kmemleak_alloc(s, size, 1, GFP_KERNEL); 2355 memset(s, 0, sizeof(*s)); 2356 2357 /* Round up to actual allocation */ 2358 val = (size - sizeof(*s)) / TASK_COMM_LEN; 2359 s->cmdline_num = val; 2360 2361 s->map_cmdline_to_pid = kmalloc_array(val, 2362 sizeof(*s->map_cmdline_to_pid), 2363 GFP_KERNEL); 2364 if (!s->map_cmdline_to_pid) { 2365 free_saved_cmdlines_buffer(s); 2366 return NULL; 2367 } 2368 2369 s->cmdline_idx = 0; 2370 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP, 2371 sizeof(s->map_pid_to_cmdline)); 2372 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP, 2373 val * sizeof(*s->map_cmdline_to_pid)); 2374 2375 return s; 2376 } 2377 2378 static int trace_create_savedcmd(void) 2379 { 2380 savedcmd = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT); 2381 2382 return savedcmd ? 0 : -ENOMEM; 2383 } 2384 2385 int is_tracing_stopped(void) 2386 { 2387 return global_trace.stop_count; 2388 } 2389 2390 static void tracing_start_tr(struct trace_array *tr) 2391 { 2392 struct trace_buffer *buffer; 2393 unsigned long flags; 2394 2395 if (tracing_disabled) 2396 return; 2397 2398 raw_spin_lock_irqsave(&tr->start_lock, flags); 2399 if (--tr->stop_count) { 2400 if (WARN_ON_ONCE(tr->stop_count < 0)) { 2401 /* Someone screwed up their debugging */ 2402 tr->stop_count = 0; 2403 } 2404 goto out; 2405 } 2406 2407 /* Prevent the buffers from switching */ 2408 arch_spin_lock(&tr->max_lock); 2409 2410 buffer = tr->array_buffer.buffer; 2411 if (buffer) 2412 ring_buffer_record_enable(buffer); 2413 2414 #ifdef CONFIG_TRACER_MAX_TRACE 2415 buffer = tr->max_buffer.buffer; 2416 if (buffer) 2417 ring_buffer_record_enable(buffer); 2418 #endif 2419 2420 arch_spin_unlock(&tr->max_lock); 2421 2422 out: 2423 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 2424 } 2425 2426 /** 2427 * tracing_start - quick start of the tracer 2428 * 2429 * If tracing is enabled but was stopped by tracing_stop, 2430 * this will start the tracer back up. 2431 */ 2432 void tracing_start(void) 2433 2434 { 2435 return tracing_start_tr(&global_trace); 2436 } 2437 2438 static void tracing_stop_tr(struct trace_array *tr) 2439 { 2440 struct trace_buffer *buffer; 2441 unsigned long flags; 2442 2443 raw_spin_lock_irqsave(&tr->start_lock, flags); 2444 if (tr->stop_count++) 2445 goto out; 2446 2447 /* Prevent the buffers from switching */ 2448 arch_spin_lock(&tr->max_lock); 2449 2450 buffer = tr->array_buffer.buffer; 2451 if (buffer) 2452 ring_buffer_record_disable(buffer); 2453 2454 #ifdef CONFIG_TRACER_MAX_TRACE 2455 buffer = tr->max_buffer.buffer; 2456 if (buffer) 2457 ring_buffer_record_disable(buffer); 2458 #endif 2459 2460 arch_spin_unlock(&tr->max_lock); 2461 2462 out: 2463 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 2464 } 2465 2466 /** 2467 * tracing_stop - quick stop of the tracer 2468 * 2469 * Light weight way to stop tracing. Use in conjunction with 2470 * tracing_start. 2471 */ 2472 void tracing_stop(void) 2473 { 2474 return tracing_stop_tr(&global_trace); 2475 } 2476 2477 static int trace_save_cmdline(struct task_struct *tsk) 2478 { 2479 unsigned tpid, idx; 2480 2481 /* treat recording of idle task as a success */ 2482 if (!tsk->pid) 2483 return 1; 2484 2485 tpid = tsk->pid & (PID_MAX_DEFAULT - 1); 2486 2487 /* 2488 * It's not the end of the world if we don't get 2489 * the lock, but we also don't want to spin 2490 * nor do we want to disable interrupts, 2491 * so if we miss here, then better luck next time. 2492 * 2493 * This is called within the scheduler and wake up, so interrupts 2494 * had better been disabled and run queue lock been held. 2495 */ 2496 lockdep_assert_preemption_disabled(); 2497 if (!arch_spin_trylock(&trace_cmdline_lock)) 2498 return 0; 2499 2500 idx = savedcmd->map_pid_to_cmdline[tpid]; 2501 if (idx == NO_CMDLINE_MAP) { 2502 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num; 2503 2504 savedcmd->map_pid_to_cmdline[tpid] = idx; 2505 savedcmd->cmdline_idx = idx; 2506 } 2507 2508 savedcmd->map_cmdline_to_pid[idx] = tsk->pid; 2509 set_cmdline(idx, tsk->comm); 2510 2511 arch_spin_unlock(&trace_cmdline_lock); 2512 2513 return 1; 2514 } 2515 2516 static void __trace_find_cmdline(int pid, char comm[]) 2517 { 2518 unsigned map; 2519 int tpid; 2520 2521 if (!pid) { 2522 strcpy(comm, "<idle>"); 2523 return; 2524 } 2525 2526 if (WARN_ON_ONCE(pid < 0)) { 2527 strcpy(comm, "<XXX>"); 2528 return; 2529 } 2530 2531 tpid = pid & (PID_MAX_DEFAULT - 1); 2532 map = savedcmd->map_pid_to_cmdline[tpid]; 2533 if (map != NO_CMDLINE_MAP) { 2534 tpid = savedcmd->map_cmdline_to_pid[map]; 2535 if (tpid == pid) { 2536 strscpy(comm, get_saved_cmdlines(map), TASK_COMM_LEN); 2537 return; 2538 } 2539 } 2540 strcpy(comm, "<...>"); 2541 } 2542 2543 void trace_find_cmdline(int pid, char comm[]) 2544 { 2545 preempt_disable(); 2546 arch_spin_lock(&trace_cmdline_lock); 2547 2548 __trace_find_cmdline(pid, comm); 2549 2550 arch_spin_unlock(&trace_cmdline_lock); 2551 preempt_enable(); 2552 } 2553 2554 static int *trace_find_tgid_ptr(int pid) 2555 { 2556 /* 2557 * Pairs with the smp_store_release in set_tracer_flag() to ensure that 2558 * if we observe a non-NULL tgid_map then we also observe the correct 2559 * tgid_map_max. 2560 */ 2561 int *map = smp_load_acquire(&tgid_map); 2562 2563 if (unlikely(!map || pid > tgid_map_max)) 2564 return NULL; 2565 2566 return &map[pid]; 2567 } 2568 2569 int trace_find_tgid(int pid) 2570 { 2571 int *ptr = trace_find_tgid_ptr(pid); 2572 2573 return ptr ? *ptr : 0; 2574 } 2575 2576 static int trace_save_tgid(struct task_struct *tsk) 2577 { 2578 int *ptr; 2579 2580 /* treat recording of idle task as a success */ 2581 if (!tsk->pid) 2582 return 1; 2583 2584 ptr = trace_find_tgid_ptr(tsk->pid); 2585 if (!ptr) 2586 return 0; 2587 2588 *ptr = tsk->tgid; 2589 return 1; 2590 } 2591 2592 static bool tracing_record_taskinfo_skip(int flags) 2593 { 2594 if (unlikely(!(flags & (TRACE_RECORD_CMDLINE | TRACE_RECORD_TGID)))) 2595 return true; 2596 if (!__this_cpu_read(trace_taskinfo_save)) 2597 return true; 2598 return false; 2599 } 2600 2601 /** 2602 * tracing_record_taskinfo - record the task info of a task 2603 * 2604 * @task: task to record 2605 * @flags: TRACE_RECORD_CMDLINE for recording comm 2606 * TRACE_RECORD_TGID for recording tgid 2607 */ 2608 void tracing_record_taskinfo(struct task_struct *task, int flags) 2609 { 2610 bool done; 2611 2612 if (tracing_record_taskinfo_skip(flags)) 2613 return; 2614 2615 /* 2616 * Record as much task information as possible. If some fail, continue 2617 * to try to record the others. 2618 */ 2619 done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(task); 2620 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(task); 2621 2622 /* If recording any information failed, retry again soon. */ 2623 if (!done) 2624 return; 2625 2626 __this_cpu_write(trace_taskinfo_save, false); 2627 } 2628 2629 /** 2630 * tracing_record_taskinfo_sched_switch - record task info for sched_switch 2631 * 2632 * @prev: previous task during sched_switch 2633 * @next: next task during sched_switch 2634 * @flags: TRACE_RECORD_CMDLINE for recording comm 2635 * TRACE_RECORD_TGID for recording tgid 2636 */ 2637 void tracing_record_taskinfo_sched_switch(struct task_struct *prev, 2638 struct task_struct *next, int flags) 2639 { 2640 bool done; 2641 2642 if (tracing_record_taskinfo_skip(flags)) 2643 return; 2644 2645 /* 2646 * Record as much task information as possible. If some fail, continue 2647 * to try to record the others. 2648 */ 2649 done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(prev); 2650 done &= !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(next); 2651 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(prev); 2652 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(next); 2653 2654 /* If recording any information failed, retry again soon. */ 2655 if (!done) 2656 return; 2657 2658 __this_cpu_write(trace_taskinfo_save, false); 2659 } 2660 2661 /* Helpers to record a specific task information */ 2662 void tracing_record_cmdline(struct task_struct *task) 2663 { 2664 tracing_record_taskinfo(task, TRACE_RECORD_CMDLINE); 2665 } 2666 2667 void tracing_record_tgid(struct task_struct *task) 2668 { 2669 tracing_record_taskinfo(task, TRACE_RECORD_TGID); 2670 } 2671 2672 /* 2673 * Several functions return TRACE_TYPE_PARTIAL_LINE if the trace_seq 2674 * overflowed, and TRACE_TYPE_HANDLED otherwise. This helper function 2675 * simplifies those functions and keeps them in sync. 2676 */ 2677 enum print_line_t trace_handle_return(struct trace_seq *s) 2678 { 2679 return trace_seq_has_overflowed(s) ? 2680 TRACE_TYPE_PARTIAL_LINE : TRACE_TYPE_HANDLED; 2681 } 2682 EXPORT_SYMBOL_GPL(trace_handle_return); 2683 2684 static unsigned short migration_disable_value(void) 2685 { 2686 #if defined(CONFIG_SMP) 2687 return current->migration_disabled; 2688 #else 2689 return 0; 2690 #endif 2691 } 2692 2693 unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status) 2694 { 2695 unsigned int trace_flags = irqs_status; 2696 unsigned int pc; 2697 2698 pc = preempt_count(); 2699 2700 if (pc & NMI_MASK) 2701 trace_flags |= TRACE_FLAG_NMI; 2702 if (pc & HARDIRQ_MASK) 2703 trace_flags |= TRACE_FLAG_HARDIRQ; 2704 if (in_serving_softirq()) 2705 trace_flags |= TRACE_FLAG_SOFTIRQ; 2706 if (softirq_count() >> (SOFTIRQ_SHIFT + 1)) 2707 trace_flags |= TRACE_FLAG_BH_OFF; 2708 2709 if (tif_need_resched()) 2710 trace_flags |= TRACE_FLAG_NEED_RESCHED; 2711 if (test_preempt_need_resched()) 2712 trace_flags |= TRACE_FLAG_PREEMPT_RESCHED; 2713 return (trace_flags << 16) | (min_t(unsigned int, pc & 0xff, 0xf)) | 2714 (min_t(unsigned int, migration_disable_value(), 0xf)) << 4; 2715 } 2716 2717 struct ring_buffer_event * 2718 trace_buffer_lock_reserve(struct trace_buffer *buffer, 2719 int type, 2720 unsigned long len, 2721 unsigned int trace_ctx) 2722 { 2723 return __trace_buffer_lock_reserve(buffer, type, len, trace_ctx); 2724 } 2725 2726 DEFINE_PER_CPU(struct ring_buffer_event *, trace_buffered_event); 2727 DEFINE_PER_CPU(int, trace_buffered_event_cnt); 2728 static int trace_buffered_event_ref; 2729 2730 /** 2731 * trace_buffered_event_enable - enable buffering events 2732 * 2733 * When events are being filtered, it is quicker to use a temporary 2734 * buffer to write the event data into if there's a likely chance 2735 * that it will not be committed. The discard of the ring buffer 2736 * is not as fast as committing, and is much slower than copying 2737 * a commit. 2738 * 2739 * When an event is to be filtered, allocate per cpu buffers to 2740 * write the event data into, and if the event is filtered and discarded 2741 * it is simply dropped, otherwise, the entire data is to be committed 2742 * in one shot. 2743 */ 2744 void trace_buffered_event_enable(void) 2745 { 2746 struct ring_buffer_event *event; 2747 struct page *page; 2748 int cpu; 2749 2750 WARN_ON_ONCE(!mutex_is_locked(&event_mutex)); 2751 2752 if (trace_buffered_event_ref++) 2753 return; 2754 2755 for_each_tracing_cpu(cpu) { 2756 page = alloc_pages_node(cpu_to_node(cpu), 2757 GFP_KERNEL | __GFP_NORETRY, 0); 2758 /* This is just an optimization and can handle failures */ 2759 if (!page) { 2760 pr_err("Failed to allocate event buffer\n"); 2761 break; 2762 } 2763 2764 event = page_address(page); 2765 memset(event, 0, sizeof(*event)); 2766 2767 per_cpu(trace_buffered_event, cpu) = event; 2768 2769 preempt_disable(); 2770 if (cpu == smp_processor_id() && 2771 __this_cpu_read(trace_buffered_event) != 2772 per_cpu(trace_buffered_event, cpu)) 2773 WARN_ON_ONCE(1); 2774 preempt_enable(); 2775 } 2776 } 2777 2778 static void enable_trace_buffered_event(void *data) 2779 { 2780 /* Probably not needed, but do it anyway */ 2781 smp_rmb(); 2782 this_cpu_dec(trace_buffered_event_cnt); 2783 } 2784 2785 static void disable_trace_buffered_event(void *data) 2786 { 2787 this_cpu_inc(trace_buffered_event_cnt); 2788 } 2789 2790 /** 2791 * trace_buffered_event_disable - disable buffering events 2792 * 2793 * When a filter is removed, it is faster to not use the buffered 2794 * events, and to commit directly into the ring buffer. Free up 2795 * the temp buffers when there are no more users. This requires 2796 * special synchronization with current events. 2797 */ 2798 void trace_buffered_event_disable(void) 2799 { 2800 int cpu; 2801 2802 WARN_ON_ONCE(!mutex_is_locked(&event_mutex)); 2803 2804 if (WARN_ON_ONCE(!trace_buffered_event_ref)) 2805 return; 2806 2807 if (--trace_buffered_event_ref) 2808 return; 2809 2810 /* For each CPU, set the buffer as used. */ 2811 on_each_cpu_mask(tracing_buffer_mask, disable_trace_buffered_event, 2812 NULL, true); 2813 2814 /* Wait for all current users to finish */ 2815 synchronize_rcu(); 2816 2817 for_each_tracing_cpu(cpu) { 2818 free_page((unsigned long)per_cpu(trace_buffered_event, cpu)); 2819 per_cpu(trace_buffered_event, cpu) = NULL; 2820 } 2821 2822 /* 2823 * Wait for all CPUs that potentially started checking if they can use 2824 * their event buffer only after the previous synchronize_rcu() call and 2825 * they still read a valid pointer from trace_buffered_event. It must be 2826 * ensured they don't see cleared trace_buffered_event_cnt else they 2827 * could wrongly decide to use the pointed-to buffer which is now freed. 2828 */ 2829 synchronize_rcu(); 2830 2831 /* For each CPU, relinquish the buffer */ 2832 on_each_cpu_mask(tracing_buffer_mask, enable_trace_buffered_event, NULL, 2833 true); 2834 } 2835 2836 static struct trace_buffer *temp_buffer; 2837 2838 struct ring_buffer_event * 2839 trace_event_buffer_lock_reserve(struct trace_buffer **current_rb, 2840 struct trace_event_file *trace_file, 2841 int type, unsigned long len, 2842 unsigned int trace_ctx) 2843 { 2844 struct ring_buffer_event *entry; 2845 struct trace_array *tr = trace_file->tr; 2846 int val; 2847 2848 *current_rb = tr->array_buffer.buffer; 2849 2850 if (!tr->no_filter_buffering_ref && 2851 (trace_file->flags & (EVENT_FILE_FL_SOFT_DISABLED | EVENT_FILE_FL_FILTERED))) { 2852 preempt_disable_notrace(); 2853 /* 2854 * Filtering is on, so try to use the per cpu buffer first. 2855 * This buffer will simulate a ring_buffer_event, 2856 * where the type_len is zero and the array[0] will 2857 * hold the full length. 2858 * (see include/linux/ring-buffer.h for details on 2859 * how the ring_buffer_event is structured). 2860 * 2861 * Using a temp buffer during filtering and copying it 2862 * on a matched filter is quicker than writing directly 2863 * into the ring buffer and then discarding it when 2864 * it doesn't match. That is because the discard 2865 * requires several atomic operations to get right. 2866 * Copying on match and doing nothing on a failed match 2867 * is still quicker than no copy on match, but having 2868 * to discard out of the ring buffer on a failed match. 2869 */ 2870 if ((entry = __this_cpu_read(trace_buffered_event))) { 2871 int max_len = PAGE_SIZE - struct_size(entry, array, 1); 2872 2873 val = this_cpu_inc_return(trace_buffered_event_cnt); 2874 2875 /* 2876 * Preemption is disabled, but interrupts and NMIs 2877 * can still come in now. If that happens after 2878 * the above increment, then it will have to go 2879 * back to the old method of allocating the event 2880 * on the ring buffer, and if the filter fails, it 2881 * will have to call ring_buffer_discard_commit() 2882 * to remove it. 2883 * 2884 * Need to also check the unlikely case that the 2885 * length is bigger than the temp buffer size. 2886 * If that happens, then the reserve is pretty much 2887 * guaranteed to fail, as the ring buffer currently 2888 * only allows events less than a page. But that may 2889 * change in the future, so let the ring buffer reserve 2890 * handle the failure in that case. 2891 */ 2892 if (val == 1 && likely(len <= max_len)) { 2893 trace_event_setup(entry, type, trace_ctx); 2894 entry->array[0] = len; 2895 /* Return with preemption disabled */ 2896 return entry; 2897 } 2898 this_cpu_dec(trace_buffered_event_cnt); 2899 } 2900 /* __trace_buffer_lock_reserve() disables preemption */ 2901 preempt_enable_notrace(); 2902 } 2903 2904 entry = __trace_buffer_lock_reserve(*current_rb, type, len, 2905 trace_ctx); 2906 /* 2907 * If tracing is off, but we have triggers enabled 2908 * we still need to look at the event data. Use the temp_buffer 2909 * to store the trace event for the trigger to use. It's recursive 2910 * safe and will not be recorded anywhere. 2911 */ 2912 if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) { 2913 *current_rb = temp_buffer; 2914 entry = __trace_buffer_lock_reserve(*current_rb, type, len, 2915 trace_ctx); 2916 } 2917 return entry; 2918 } 2919 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve); 2920 2921 static DEFINE_RAW_SPINLOCK(tracepoint_iter_lock); 2922 static DEFINE_MUTEX(tracepoint_printk_mutex); 2923 2924 static void output_printk(struct trace_event_buffer *fbuffer) 2925 { 2926 struct trace_event_call *event_call; 2927 struct trace_event_file *file; 2928 struct trace_event *event; 2929 unsigned long flags; 2930 struct trace_iterator *iter = tracepoint_print_iter; 2931 2932 /* We should never get here if iter is NULL */ 2933 if (WARN_ON_ONCE(!iter)) 2934 return; 2935 2936 event_call = fbuffer->trace_file->event_call; 2937 if (!event_call || !event_call->event.funcs || 2938 !event_call->event.funcs->trace) 2939 return; 2940 2941 file = fbuffer->trace_file; 2942 if (test_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags) || 2943 (unlikely(file->flags & EVENT_FILE_FL_FILTERED) && 2944 !filter_match_preds(file->filter, fbuffer->entry))) 2945 return; 2946 2947 event = &fbuffer->trace_file->event_call->event; 2948 2949 raw_spin_lock_irqsave(&tracepoint_iter_lock, flags); 2950 trace_seq_init(&iter->seq); 2951 iter->ent = fbuffer->entry; 2952 event_call->event.funcs->trace(iter, 0, event); 2953 trace_seq_putc(&iter->seq, 0); 2954 printk("%s", iter->seq.buffer); 2955 2956 raw_spin_unlock_irqrestore(&tracepoint_iter_lock, flags); 2957 } 2958 2959 int tracepoint_printk_sysctl(struct ctl_table *table, int write, 2960 void *buffer, size_t *lenp, 2961 loff_t *ppos) 2962 { 2963 int save_tracepoint_printk; 2964 int ret; 2965 2966 mutex_lock(&tracepoint_printk_mutex); 2967 save_tracepoint_printk = tracepoint_printk; 2968 2969 ret = proc_dointvec(table, write, buffer, lenp, ppos); 2970 2971 /* 2972 * This will force exiting early, as tracepoint_printk 2973 * is always zero when tracepoint_printk_iter is not allocated 2974 */ 2975 if (!tracepoint_print_iter) 2976 tracepoint_printk = 0; 2977 2978 if (save_tracepoint_printk == tracepoint_printk) 2979 goto out; 2980 2981 if (tracepoint_printk) 2982 static_key_enable(&tracepoint_printk_key.key); 2983 else 2984 static_key_disable(&tracepoint_printk_key.key); 2985 2986 out: 2987 mutex_unlock(&tracepoint_printk_mutex); 2988 2989 return ret; 2990 } 2991 2992 void trace_event_buffer_commit(struct trace_event_buffer *fbuffer) 2993 { 2994 enum event_trigger_type tt = ETT_NONE; 2995 struct trace_event_file *file = fbuffer->trace_file; 2996 2997 if (__event_trigger_test_discard(file, fbuffer->buffer, fbuffer->event, 2998 fbuffer->entry, &tt)) 2999 goto discard; 3000 3001 if (static_key_false(&tracepoint_printk_key.key)) 3002 output_printk(fbuffer); 3003 3004 if (static_branch_unlikely(&trace_event_exports_enabled)) 3005 ftrace_exports(fbuffer->event, TRACE_EXPORT_EVENT); 3006 3007 trace_buffer_unlock_commit_regs(file->tr, fbuffer->buffer, 3008 fbuffer->event, fbuffer->trace_ctx, fbuffer->regs); 3009 3010 discard: 3011 if (tt) 3012 event_triggers_post_call(file, tt); 3013 3014 } 3015 EXPORT_SYMBOL_GPL(trace_event_buffer_commit); 3016 3017 /* 3018 * Skip 3: 3019 * 3020 * trace_buffer_unlock_commit_regs() 3021 * trace_event_buffer_commit() 3022 * trace_event_raw_event_xxx() 3023 */ 3024 # define STACK_SKIP 3 3025 3026 void trace_buffer_unlock_commit_regs(struct trace_array *tr, 3027 struct trace_buffer *buffer, 3028 struct ring_buffer_event *event, 3029 unsigned int trace_ctx, 3030 struct pt_regs *regs) 3031 { 3032 __buffer_unlock_commit(buffer, event); 3033 3034 /* 3035 * If regs is not set, then skip the necessary functions. 3036 * Note, we can still get here via blktrace, wakeup tracer 3037 * and mmiotrace, but that's ok if they lose a function or 3038 * two. They are not that meaningful. 3039 */ 3040 ftrace_trace_stack(tr, buffer, trace_ctx, regs ? 0 : STACK_SKIP, regs); 3041 ftrace_trace_userstack(tr, buffer, trace_ctx); 3042 } 3043 3044 /* 3045 * Similar to trace_buffer_unlock_commit_regs() but do not dump stack. 3046 */ 3047 void 3048 trace_buffer_unlock_commit_nostack(struct trace_buffer *buffer, 3049 struct ring_buffer_event *event) 3050 { 3051 __buffer_unlock_commit(buffer, event); 3052 } 3053 3054 void 3055 trace_function(struct trace_array *tr, unsigned long ip, unsigned long 3056 parent_ip, unsigned int trace_ctx) 3057 { 3058 struct trace_event_call *call = &event_function; 3059 struct trace_buffer *buffer = tr->array_buffer.buffer; 3060 struct ring_buffer_event *event; 3061 struct ftrace_entry *entry; 3062 3063 event = __trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry), 3064 trace_ctx); 3065 if (!event) 3066 return; 3067 entry = ring_buffer_event_data(event); 3068 entry->ip = ip; 3069 entry->parent_ip = parent_ip; 3070 3071 if (!call_filter_check_discard(call, entry, buffer, event)) { 3072 if (static_branch_unlikely(&trace_function_exports_enabled)) 3073 ftrace_exports(event, TRACE_EXPORT_FUNCTION); 3074 __buffer_unlock_commit(buffer, event); 3075 } 3076 } 3077 3078 #ifdef CONFIG_STACKTRACE 3079 3080 /* Allow 4 levels of nesting: normal, softirq, irq, NMI */ 3081 #define FTRACE_KSTACK_NESTING 4 3082 3083 #define FTRACE_KSTACK_ENTRIES (PAGE_SIZE / FTRACE_KSTACK_NESTING) 3084 3085 struct ftrace_stack { 3086 unsigned long calls[FTRACE_KSTACK_ENTRIES]; 3087 }; 3088 3089 3090 struct ftrace_stacks { 3091 struct ftrace_stack stacks[FTRACE_KSTACK_NESTING]; 3092 }; 3093 3094 static DEFINE_PER_CPU(struct ftrace_stacks, ftrace_stacks); 3095 static DEFINE_PER_CPU(int, ftrace_stack_reserve); 3096 3097 static void __ftrace_trace_stack(struct trace_buffer *buffer, 3098 unsigned int trace_ctx, 3099 int skip, struct pt_regs *regs) 3100 { 3101 struct trace_event_call *call = &event_kernel_stack; 3102 struct ring_buffer_event *event; 3103 unsigned int size, nr_entries; 3104 struct ftrace_stack *fstack; 3105 struct stack_entry *entry; 3106 int stackidx; 3107 3108 /* 3109 * Add one, for this function and the call to save_stack_trace() 3110 * If regs is set, then these functions will not be in the way. 3111 */ 3112 #ifndef CONFIG_UNWINDER_ORC 3113 if (!regs) 3114 skip++; 3115 #endif 3116 3117 preempt_disable_notrace(); 3118 3119 stackidx = __this_cpu_inc_return(ftrace_stack_reserve) - 1; 3120 3121 /* This should never happen. If it does, yell once and skip */ 3122 if (WARN_ON_ONCE(stackidx >= FTRACE_KSTACK_NESTING)) 3123 goto out; 3124 3125 /* 3126 * The above __this_cpu_inc_return() is 'atomic' cpu local. An 3127 * interrupt will either see the value pre increment or post 3128 * increment. If the interrupt happens pre increment it will have 3129 * restored the counter when it returns. We just need a barrier to 3130 * keep gcc from moving things around. 3131 */ 3132 barrier(); 3133 3134 fstack = this_cpu_ptr(ftrace_stacks.stacks) + stackidx; 3135 size = ARRAY_SIZE(fstack->calls); 3136 3137 if (regs) { 3138 nr_entries = stack_trace_save_regs(regs, fstack->calls, 3139 size, skip); 3140 } else { 3141 nr_entries = stack_trace_save(fstack->calls, size, skip); 3142 } 3143 3144 event = __trace_buffer_lock_reserve(buffer, TRACE_STACK, 3145 struct_size(entry, caller, nr_entries), 3146 trace_ctx); 3147 if (!event) 3148 goto out; 3149 entry = ring_buffer_event_data(event); 3150 3151 entry->size = nr_entries; 3152 memcpy(&entry->caller, fstack->calls, 3153 flex_array_size(entry, caller, nr_entries)); 3154 3155 if (!call_filter_check_discard(call, entry, buffer, event)) 3156 __buffer_unlock_commit(buffer, event); 3157 3158 out: 3159 /* Again, don't let gcc optimize things here */ 3160 barrier(); 3161 __this_cpu_dec(ftrace_stack_reserve); 3162 preempt_enable_notrace(); 3163 3164 } 3165 3166 static inline void ftrace_trace_stack(struct trace_array *tr, 3167 struct trace_buffer *buffer, 3168 unsigned int trace_ctx, 3169 int skip, struct pt_regs *regs) 3170 { 3171 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) 3172 return; 3173 3174 __ftrace_trace_stack(buffer, trace_ctx, skip, regs); 3175 } 3176 3177 void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, 3178 int skip) 3179 { 3180 struct trace_buffer *buffer = tr->array_buffer.buffer; 3181 3182 if (rcu_is_watching()) { 3183 __ftrace_trace_stack(buffer, trace_ctx, skip, NULL); 3184 return; 3185 } 3186 3187 if (WARN_ON_ONCE(IS_ENABLED(CONFIG_GENERIC_ENTRY))) 3188 return; 3189 3190 /* 3191 * When an NMI triggers, RCU is enabled via ct_nmi_enter(), 3192 * but if the above rcu_is_watching() failed, then the NMI 3193 * triggered someplace critical, and ct_irq_enter() should 3194 * not be called from NMI. 3195 */ 3196 if (unlikely(in_nmi())) 3197 return; 3198 3199 ct_irq_enter_irqson(); 3200 __ftrace_trace_stack(buffer, trace_ctx, skip, NULL); 3201 ct_irq_exit_irqson(); 3202 } 3203 3204 /** 3205 * trace_dump_stack - record a stack back trace in the trace buffer 3206 * @skip: Number of functions to skip (helper handlers) 3207 */ 3208 void trace_dump_stack(int skip) 3209 { 3210 if (tracing_disabled || tracing_selftest_running) 3211 return; 3212 3213 #ifndef CONFIG_UNWINDER_ORC 3214 /* Skip 1 to skip this function. */ 3215 skip++; 3216 #endif 3217 __ftrace_trace_stack(global_trace.array_buffer.buffer, 3218 tracing_gen_ctx(), skip, NULL); 3219 } 3220 EXPORT_SYMBOL_GPL(trace_dump_stack); 3221 3222 #ifdef CONFIG_USER_STACKTRACE_SUPPORT 3223 static DEFINE_PER_CPU(int, user_stack_count); 3224 3225 static void 3226 ftrace_trace_userstack(struct trace_array *tr, 3227 struct trace_buffer *buffer, unsigned int trace_ctx) 3228 { 3229 struct trace_event_call *call = &event_user_stack; 3230 struct ring_buffer_event *event; 3231 struct userstack_entry *entry; 3232 3233 if (!(tr->trace_flags & TRACE_ITER_USERSTACKTRACE)) 3234 return; 3235 3236 /* 3237 * NMIs can not handle page faults, even with fix ups. 3238 * The save user stack can (and often does) fault. 3239 */ 3240 if (unlikely(in_nmi())) 3241 return; 3242 3243 /* 3244 * prevent recursion, since the user stack tracing may 3245 * trigger other kernel events. 3246 */ 3247 preempt_disable(); 3248 if (__this_cpu_read(user_stack_count)) 3249 goto out; 3250 3251 __this_cpu_inc(user_stack_count); 3252 3253 event = __trace_buffer_lock_reserve(buffer, TRACE_USER_STACK, 3254 sizeof(*entry), trace_ctx); 3255 if (!event) 3256 goto out_drop_count; 3257 entry = ring_buffer_event_data(event); 3258 3259 entry->tgid = current->tgid; 3260 memset(&entry->caller, 0, sizeof(entry->caller)); 3261 3262 stack_trace_save_user(entry->caller, FTRACE_STACK_ENTRIES); 3263 if (!call_filter_check_discard(call, entry, buffer, event)) 3264 __buffer_unlock_commit(buffer, event); 3265 3266 out_drop_count: 3267 __this_cpu_dec(user_stack_count); 3268 out: 3269 preempt_enable(); 3270 } 3271 #else /* CONFIG_USER_STACKTRACE_SUPPORT */ 3272 static void ftrace_trace_userstack(struct trace_array *tr, 3273 struct trace_buffer *buffer, 3274 unsigned int trace_ctx) 3275 { 3276 } 3277 #endif /* !CONFIG_USER_STACKTRACE_SUPPORT */ 3278 3279 #endif /* CONFIG_STACKTRACE */ 3280 3281 static inline void 3282 func_repeats_set_delta_ts(struct func_repeats_entry *entry, 3283 unsigned long long delta) 3284 { 3285 entry->bottom_delta_ts = delta & U32_MAX; 3286 entry->top_delta_ts = (delta >> 32); 3287 } 3288 3289 void trace_last_func_repeats(struct trace_array *tr, 3290 struct trace_func_repeats *last_info, 3291 unsigned int trace_ctx) 3292 { 3293 struct trace_buffer *buffer = tr->array_buffer.buffer; 3294 struct func_repeats_entry *entry; 3295 struct ring_buffer_event *event; 3296 u64 delta; 3297 3298 event = __trace_buffer_lock_reserve(buffer, TRACE_FUNC_REPEATS, 3299 sizeof(*entry), trace_ctx); 3300 if (!event) 3301 return; 3302 3303 delta = ring_buffer_event_time_stamp(buffer, event) - 3304 last_info->ts_last_call; 3305 3306 entry = ring_buffer_event_data(event); 3307 entry->ip = last_info->ip; 3308 entry->parent_ip = last_info->parent_ip; 3309 entry->count = last_info->count; 3310 func_repeats_set_delta_ts(entry, delta); 3311 3312 __buffer_unlock_commit(buffer, event); 3313 } 3314 3315 /* created for use with alloc_percpu */ 3316 struct trace_buffer_struct { 3317 int nesting; 3318 char buffer[4][TRACE_BUF_SIZE]; 3319 }; 3320 3321 static struct trace_buffer_struct __percpu *trace_percpu_buffer; 3322 3323 /* 3324 * This allows for lockless recording. If we're nested too deeply, then 3325 * this returns NULL. 3326 */ 3327 static char *get_trace_buf(void) 3328 { 3329 struct trace_buffer_struct *buffer = this_cpu_ptr(trace_percpu_buffer); 3330 3331 if (!trace_percpu_buffer || buffer->nesting >= 4) 3332 return NULL; 3333 3334 buffer->nesting++; 3335 3336 /* Interrupts must see nesting incremented before we use the buffer */ 3337 barrier(); 3338 return &buffer->buffer[buffer->nesting - 1][0]; 3339 } 3340 3341 static void put_trace_buf(void) 3342 { 3343 /* Don't let the decrement of nesting leak before this */ 3344 barrier(); 3345 this_cpu_dec(trace_percpu_buffer->nesting); 3346 } 3347 3348 static int alloc_percpu_trace_buffer(void) 3349 { 3350 struct trace_buffer_struct __percpu *buffers; 3351 3352 if (trace_percpu_buffer) 3353 return 0; 3354 3355 buffers = alloc_percpu(struct trace_buffer_struct); 3356 if (MEM_FAIL(!buffers, "Could not allocate percpu trace_printk buffer")) 3357 return -ENOMEM; 3358 3359 trace_percpu_buffer = buffers; 3360 return 0; 3361 } 3362 3363 static int buffers_allocated; 3364 3365 void trace_printk_init_buffers(void) 3366 { 3367 if (buffers_allocated) 3368 return; 3369 3370 if (alloc_percpu_trace_buffer()) 3371 return; 3372 3373 /* trace_printk() is for debug use only. Don't use it in production. */ 3374 3375 pr_warn("\n"); 3376 pr_warn("**********************************************************\n"); 3377 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 3378 pr_warn("** **\n"); 3379 pr_warn("** trace_printk() being used. Allocating extra memory. **\n"); 3380 pr_warn("** **\n"); 3381 pr_warn("** This means that this is a DEBUG kernel and it is **\n"); 3382 pr_warn("** unsafe for production use. **\n"); 3383 pr_warn("** **\n"); 3384 pr_warn("** If you see this message and you are not debugging **\n"); 3385 pr_warn("** the kernel, report this immediately to your vendor! **\n"); 3386 pr_warn("** **\n"); 3387 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 3388 pr_warn("**********************************************************\n"); 3389 3390 /* Expand the buffers to set size */ 3391 tracing_update_buffers(); 3392 3393 buffers_allocated = 1; 3394 3395 /* 3396 * trace_printk_init_buffers() can be called by modules. 3397 * If that happens, then we need to start cmdline recording 3398 * directly here. If the global_trace.buffer is already 3399 * allocated here, then this was called by module code. 3400 */ 3401 if (global_trace.array_buffer.buffer) 3402 tracing_start_cmdline_record(); 3403 } 3404 EXPORT_SYMBOL_GPL(trace_printk_init_buffers); 3405 3406 void trace_printk_start_comm(void) 3407 { 3408 /* Start tracing comms if trace printk is set */ 3409 if (!buffers_allocated) 3410 return; 3411 tracing_start_cmdline_record(); 3412 } 3413 3414 static void trace_printk_start_stop_comm(int enabled) 3415 { 3416 if (!buffers_allocated) 3417 return; 3418 3419 if (enabled) 3420 tracing_start_cmdline_record(); 3421 else 3422 tracing_stop_cmdline_record(); 3423 } 3424 3425 /** 3426 * trace_vbprintk - write binary msg to tracing buffer 3427 * @ip: The address of the caller 3428 * @fmt: The string format to write to the buffer 3429 * @args: Arguments for @fmt 3430 */ 3431 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) 3432 { 3433 struct trace_event_call *call = &event_bprint; 3434 struct ring_buffer_event *event; 3435 struct trace_buffer *buffer; 3436 struct trace_array *tr = &global_trace; 3437 struct bprint_entry *entry; 3438 unsigned int trace_ctx; 3439 char *tbuffer; 3440 int len = 0, size; 3441 3442 if (unlikely(tracing_selftest_running || tracing_disabled)) 3443 return 0; 3444 3445 /* Don't pollute graph traces with trace_vprintk internals */ 3446 pause_graph_tracing(); 3447 3448 trace_ctx = tracing_gen_ctx(); 3449 preempt_disable_notrace(); 3450 3451 tbuffer = get_trace_buf(); 3452 if (!tbuffer) { 3453 len = 0; 3454 goto out_nobuffer; 3455 } 3456 3457 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args); 3458 3459 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0) 3460 goto out_put; 3461 3462 size = sizeof(*entry) + sizeof(u32) * len; 3463 buffer = tr->array_buffer.buffer; 3464 ring_buffer_nest_start(buffer); 3465 event = __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, 3466 trace_ctx); 3467 if (!event) 3468 goto out; 3469 entry = ring_buffer_event_data(event); 3470 entry->ip = ip; 3471 entry->fmt = fmt; 3472 3473 memcpy(entry->buf, tbuffer, sizeof(u32) * len); 3474 if (!call_filter_check_discard(call, entry, buffer, event)) { 3475 __buffer_unlock_commit(buffer, event); 3476 ftrace_trace_stack(tr, buffer, trace_ctx, 6, NULL); 3477 } 3478 3479 out: 3480 ring_buffer_nest_end(buffer); 3481 out_put: 3482 put_trace_buf(); 3483 3484 out_nobuffer: 3485 preempt_enable_notrace(); 3486 unpause_graph_tracing(); 3487 3488 return len; 3489 } 3490 EXPORT_SYMBOL_GPL(trace_vbprintk); 3491 3492 __printf(3, 0) 3493 static int 3494 __trace_array_vprintk(struct trace_buffer *buffer, 3495 unsigned long ip, const char *fmt, va_list args) 3496 { 3497 struct trace_event_call *call = &event_print; 3498 struct ring_buffer_event *event; 3499 int len = 0, size; 3500 struct print_entry *entry; 3501 unsigned int trace_ctx; 3502 char *tbuffer; 3503 3504 if (tracing_disabled) 3505 return 0; 3506 3507 /* Don't pollute graph traces with trace_vprintk internals */ 3508 pause_graph_tracing(); 3509 3510 trace_ctx = tracing_gen_ctx(); 3511 preempt_disable_notrace(); 3512 3513 3514 tbuffer = get_trace_buf(); 3515 if (!tbuffer) { 3516 len = 0; 3517 goto out_nobuffer; 3518 } 3519 3520 len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args); 3521 3522 size = sizeof(*entry) + len + 1; 3523 ring_buffer_nest_start(buffer); 3524 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 3525 trace_ctx); 3526 if (!event) 3527 goto out; 3528 entry = ring_buffer_event_data(event); 3529 entry->ip = ip; 3530 3531 memcpy(&entry->buf, tbuffer, len + 1); 3532 if (!call_filter_check_discard(call, entry, buffer, event)) { 3533 __buffer_unlock_commit(buffer, event); 3534 ftrace_trace_stack(&global_trace, buffer, trace_ctx, 6, NULL); 3535 } 3536 3537 out: 3538 ring_buffer_nest_end(buffer); 3539 put_trace_buf(); 3540 3541 out_nobuffer: 3542 preempt_enable_notrace(); 3543 unpause_graph_tracing(); 3544 3545 return len; 3546 } 3547 3548 __printf(3, 0) 3549 int trace_array_vprintk(struct trace_array *tr, 3550 unsigned long ip, const char *fmt, va_list args) 3551 { 3552 if (tracing_selftest_running && tr == &global_trace) 3553 return 0; 3554 3555 return __trace_array_vprintk(tr->array_buffer.buffer, ip, fmt, args); 3556 } 3557 3558 /** 3559 * trace_array_printk - Print a message to a specific instance 3560 * @tr: The instance trace_array descriptor 3561 * @ip: The instruction pointer that this is called from. 3562 * @fmt: The format to print (printf format) 3563 * 3564 * If a subsystem sets up its own instance, they have the right to 3565 * printk strings into their tracing instance buffer using this 3566 * function. Note, this function will not write into the top level 3567 * buffer (use trace_printk() for that), as writing into the top level 3568 * buffer should only have events that can be individually disabled. 3569 * trace_printk() is only used for debugging a kernel, and should not 3570 * be ever incorporated in normal use. 3571 * 3572 * trace_array_printk() can be used, as it will not add noise to the 3573 * top level tracing buffer. 3574 * 3575 * Note, trace_array_init_printk() must be called on @tr before this 3576 * can be used. 3577 */ 3578 __printf(3, 0) 3579 int trace_array_printk(struct trace_array *tr, 3580 unsigned long ip, const char *fmt, ...) 3581 { 3582 int ret; 3583 va_list ap; 3584 3585 if (!tr) 3586 return -ENOENT; 3587 3588 /* This is only allowed for created instances */ 3589 if (tr == &global_trace) 3590 return 0; 3591 3592 if (!(tr->trace_flags & TRACE_ITER_PRINTK)) 3593 return 0; 3594 3595 va_start(ap, fmt); 3596 ret = trace_array_vprintk(tr, ip, fmt, ap); 3597 va_end(ap); 3598 return ret; 3599 } 3600 EXPORT_SYMBOL_GPL(trace_array_printk); 3601 3602 /** 3603 * trace_array_init_printk - Initialize buffers for trace_array_printk() 3604 * @tr: The trace array to initialize the buffers for 3605 * 3606 * As trace_array_printk() only writes into instances, they are OK to 3607 * have in the kernel (unlike trace_printk()). This needs to be called 3608 * before trace_array_printk() can be used on a trace_array. 3609 */ 3610 int trace_array_init_printk(struct trace_array *tr) 3611 { 3612 if (!tr) 3613 return -ENOENT; 3614 3615 /* This is only allowed for created instances */ 3616 if (tr == &global_trace) 3617 return -EINVAL; 3618 3619 return alloc_percpu_trace_buffer(); 3620 } 3621 EXPORT_SYMBOL_GPL(trace_array_init_printk); 3622 3623 __printf(3, 4) 3624 int trace_array_printk_buf(struct trace_buffer *buffer, 3625 unsigned long ip, const char *fmt, ...) 3626 { 3627 int ret; 3628 va_list ap; 3629 3630 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 3631 return 0; 3632 3633 va_start(ap, fmt); 3634 ret = __trace_array_vprintk(buffer, ip, fmt, ap); 3635 va_end(ap); 3636 return ret; 3637 } 3638 3639 __printf(2, 0) 3640 int trace_vprintk(unsigned long ip, const char *fmt, va_list args) 3641 { 3642 return trace_array_vprintk(&global_trace, ip, fmt, args); 3643 } 3644 EXPORT_SYMBOL_GPL(trace_vprintk); 3645 3646 static void trace_iterator_increment(struct trace_iterator *iter) 3647 { 3648 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu); 3649 3650 iter->idx++; 3651 if (buf_iter) 3652 ring_buffer_iter_advance(buf_iter); 3653 } 3654 3655 static struct trace_entry * 3656 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts, 3657 unsigned long *lost_events) 3658 { 3659 struct ring_buffer_event *event; 3660 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu); 3661 3662 if (buf_iter) { 3663 event = ring_buffer_iter_peek(buf_iter, ts); 3664 if (lost_events) 3665 *lost_events = ring_buffer_iter_dropped(buf_iter) ? 3666 (unsigned long)-1 : 0; 3667 } else { 3668 event = ring_buffer_peek(iter->array_buffer->buffer, cpu, ts, 3669 lost_events); 3670 } 3671 3672 if (event) { 3673 iter->ent_size = ring_buffer_event_length(event); 3674 return ring_buffer_event_data(event); 3675 } 3676 iter->ent_size = 0; 3677 return NULL; 3678 } 3679 3680 static struct trace_entry * 3681 __find_next_entry(struct trace_iterator *iter, int *ent_cpu, 3682 unsigned long *missing_events, u64 *ent_ts) 3683 { 3684 struct trace_buffer *buffer = iter->array_buffer->buffer; 3685 struct trace_entry *ent, *next = NULL; 3686 unsigned long lost_events = 0, next_lost = 0; 3687 int cpu_file = iter->cpu_file; 3688 u64 next_ts = 0, ts; 3689 int next_cpu = -1; 3690 int next_size = 0; 3691 int cpu; 3692 3693 /* 3694 * If we are in a per_cpu trace file, don't bother by iterating over 3695 * all cpu and peek directly. 3696 */ 3697 if (cpu_file > RING_BUFFER_ALL_CPUS) { 3698 if (ring_buffer_empty_cpu(buffer, cpu_file)) 3699 return NULL; 3700 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events); 3701 if (ent_cpu) 3702 *ent_cpu = cpu_file; 3703 3704 return ent; 3705 } 3706 3707 for_each_tracing_cpu(cpu) { 3708 3709 if (ring_buffer_empty_cpu(buffer, cpu)) 3710 continue; 3711 3712 ent = peek_next_entry(iter, cpu, &ts, &lost_events); 3713 3714 /* 3715 * Pick the entry with the smallest timestamp: 3716 */ 3717 if (ent && (!next || ts < next_ts)) { 3718 next = ent; 3719 next_cpu = cpu; 3720 next_ts = ts; 3721 next_lost = lost_events; 3722 next_size = iter->ent_size; 3723 } 3724 } 3725 3726 iter->ent_size = next_size; 3727 3728 if (ent_cpu) 3729 *ent_cpu = next_cpu; 3730 3731 if (ent_ts) 3732 *ent_ts = next_ts; 3733 3734 if (missing_events) 3735 *missing_events = next_lost; 3736 3737 return next; 3738 } 3739 3740 #define STATIC_FMT_BUF_SIZE 128 3741 static char static_fmt_buf[STATIC_FMT_BUF_SIZE]; 3742 3743 char *trace_iter_expand_format(struct trace_iterator *iter) 3744 { 3745 char *tmp; 3746 3747 /* 3748 * iter->tr is NULL when used with tp_printk, which makes 3749 * this get called where it is not safe to call krealloc(). 3750 */ 3751 if (!iter->tr || iter->fmt == static_fmt_buf) 3752 return NULL; 3753 3754 tmp = krealloc(iter->fmt, iter->fmt_size + STATIC_FMT_BUF_SIZE, 3755 GFP_KERNEL); 3756 if (tmp) { 3757 iter->fmt_size += STATIC_FMT_BUF_SIZE; 3758 iter->fmt = tmp; 3759 } 3760 3761 return tmp; 3762 } 3763 3764 /* Returns true if the string is safe to dereference from an event */ 3765 static bool trace_safe_str(struct trace_iterator *iter, const char *str, 3766 bool star, int len) 3767 { 3768 unsigned long addr = (unsigned long)str; 3769 struct trace_event *trace_event; 3770 struct trace_event_call *event; 3771 3772 /* Ignore strings with no length */ 3773 if (star && !len) 3774 return true; 3775 3776 /* OK if part of the event data */ 3777 if ((addr >= (unsigned long)iter->ent) && 3778 (addr < (unsigned long)iter->ent + iter->ent_size)) 3779 return true; 3780 3781 /* OK if part of the temp seq buffer */ 3782 if ((addr >= (unsigned long)iter->tmp_seq.buffer) && 3783 (addr < (unsigned long)iter->tmp_seq.buffer + PAGE_SIZE)) 3784 return true; 3785 3786 /* Core rodata can not be freed */ 3787 if (is_kernel_rodata(addr)) 3788 return true; 3789 3790 if (trace_is_tracepoint_string(str)) 3791 return true; 3792 3793 /* 3794 * Now this could be a module event, referencing core module 3795 * data, which is OK. 3796 */ 3797 if (!iter->ent) 3798 return false; 3799 3800 trace_event = ftrace_find_event(iter->ent->type); 3801 if (!trace_event) 3802 return false; 3803 3804 event = container_of(trace_event, struct trace_event_call, event); 3805 if ((event->flags & TRACE_EVENT_FL_DYNAMIC) || !event->module) 3806 return false; 3807 3808 /* Would rather have rodata, but this will suffice */ 3809 if (within_module_core(addr, event->module)) 3810 return true; 3811 3812 return false; 3813 } 3814 3815 static const char *show_buffer(struct trace_seq *s) 3816 { 3817 struct seq_buf *seq = &s->seq; 3818 3819 seq_buf_terminate(seq); 3820 3821 return seq->buffer; 3822 } 3823 3824 static DEFINE_STATIC_KEY_FALSE(trace_no_verify); 3825 3826 static int test_can_verify_check(const char *fmt, ...) 3827 { 3828 char buf[16]; 3829 va_list ap; 3830 int ret; 3831 3832 /* 3833 * The verifier is dependent on vsnprintf() modifies the va_list 3834 * passed to it, where it is sent as a reference. Some architectures 3835 * (like x86_32) passes it by value, which means that vsnprintf() 3836 * does not modify the va_list passed to it, and the verifier 3837 * would then need to be able to understand all the values that 3838 * vsnprintf can use. If it is passed by value, then the verifier 3839 * is disabled. 3840 */ 3841 va_start(ap, fmt); 3842 vsnprintf(buf, 16, "%d", ap); 3843 ret = va_arg(ap, int); 3844 va_end(ap); 3845 3846 return ret; 3847 } 3848 3849 static void test_can_verify(void) 3850 { 3851 if (!test_can_verify_check("%d %d", 0, 1)) { 3852 pr_info("trace event string verifier disabled\n"); 3853 static_branch_inc(&trace_no_verify); 3854 } 3855 } 3856 3857 /** 3858 * trace_check_vprintf - Check dereferenced strings while writing to the seq buffer 3859 * @iter: The iterator that holds the seq buffer and the event being printed 3860 * @fmt: The format used to print the event 3861 * @ap: The va_list holding the data to print from @fmt. 3862 * 3863 * This writes the data into the @iter->seq buffer using the data from 3864 * @fmt and @ap. If the format has a %s, then the source of the string 3865 * is examined to make sure it is safe to print, otherwise it will 3866 * warn and print "[UNSAFE MEMORY]" in place of the dereferenced string 3867 * pointer. 3868 */ 3869 void trace_check_vprintf(struct trace_iterator *iter, const char *fmt, 3870 va_list ap) 3871 { 3872 const char *p = fmt; 3873 const char *str; 3874 int i, j; 3875 3876 if (WARN_ON_ONCE(!fmt)) 3877 return; 3878 3879 if (static_branch_unlikely(&trace_no_verify)) 3880 goto print; 3881 3882 /* Don't bother checking when doing a ftrace_dump() */ 3883 if (iter->fmt == static_fmt_buf) 3884 goto print; 3885 3886 while (*p) { 3887 bool star = false; 3888 int len = 0; 3889 3890 j = 0; 3891 3892 /* We only care about %s and variants */ 3893 for (i = 0; p[i]; i++) { 3894 if (i + 1 >= iter->fmt_size) { 3895 /* 3896 * If we can't expand the copy buffer, 3897 * just print it. 3898 */ 3899 if (!trace_iter_expand_format(iter)) 3900 goto print; 3901 } 3902 3903 if (p[i] == '\\' && p[i+1]) { 3904 i++; 3905 continue; 3906 } 3907 if (p[i] == '%') { 3908 /* Need to test cases like %08.*s */ 3909 for (j = 1; p[i+j]; j++) { 3910 if (isdigit(p[i+j]) || 3911 p[i+j] == '.') 3912 continue; 3913 if (p[i+j] == '*') { 3914 star = true; 3915 continue; 3916 } 3917 break; 3918 } 3919 if (p[i+j] == 's') 3920 break; 3921 star = false; 3922 } 3923 j = 0; 3924 } 3925 /* If no %s found then just print normally */ 3926 if (!p[i]) 3927 break; 3928 3929 /* Copy up to the %s, and print that */ 3930 strncpy(iter->fmt, p, i); 3931 iter->fmt[i] = '\0'; 3932 trace_seq_vprintf(&iter->seq, iter->fmt, ap); 3933 3934 /* 3935 * If iter->seq is full, the above call no longer guarantees 3936 * that ap is in sync with fmt processing, and further calls 3937 * to va_arg() can return wrong positional arguments. 3938 * 3939 * Ensure that ap is no longer used in this case. 3940 */ 3941 if (iter->seq.full) { 3942 p = ""; 3943 break; 3944 } 3945 3946 if (star) 3947 len = va_arg(ap, int); 3948 3949 /* The ap now points to the string data of the %s */ 3950 str = va_arg(ap, const char *); 3951 3952 /* 3953 * If you hit this warning, it is likely that the 3954 * trace event in question used %s on a string that 3955 * was saved at the time of the event, but may not be 3956 * around when the trace is read. Use __string(), 3957 * __assign_str() and __get_str() helpers in the TRACE_EVENT() 3958 * instead. See samples/trace_events/trace-events-sample.h 3959 * for reference. 3960 */ 3961 if (WARN_ONCE(!trace_safe_str(iter, str, star, len), 3962 "fmt: '%s' current_buffer: '%s'", 3963 fmt, show_buffer(&iter->seq))) { 3964 int ret; 3965 3966 /* Try to safely read the string */ 3967 if (star) { 3968 if (len + 1 > iter->fmt_size) 3969 len = iter->fmt_size - 1; 3970 if (len < 0) 3971 len = 0; 3972 ret = copy_from_kernel_nofault(iter->fmt, str, len); 3973 iter->fmt[len] = 0; 3974 star = false; 3975 } else { 3976 ret = strncpy_from_kernel_nofault(iter->fmt, str, 3977 iter->fmt_size); 3978 } 3979 if (ret < 0) 3980 trace_seq_printf(&iter->seq, "(0x%px)", str); 3981 else 3982 trace_seq_printf(&iter->seq, "(0x%px:%s)", 3983 str, iter->fmt); 3984 str = "[UNSAFE-MEMORY]"; 3985 strcpy(iter->fmt, "%s"); 3986 } else { 3987 strncpy(iter->fmt, p + i, j + 1); 3988 iter->fmt[j+1] = '\0'; 3989 } 3990 if (star) 3991 trace_seq_printf(&iter->seq, iter->fmt, len, str); 3992 else 3993 trace_seq_printf(&iter->seq, iter->fmt, str); 3994 3995 p += i + j + 1; 3996 } 3997 print: 3998 if (*p) 3999 trace_seq_vprintf(&iter->seq, p, ap); 4000 } 4001 4002 const char *trace_event_format(struct trace_iterator *iter, const char *fmt) 4003 { 4004 const char *p, *new_fmt; 4005 char *q; 4006 4007 if (WARN_ON_ONCE(!fmt)) 4008 return fmt; 4009 4010 if (!iter->tr || iter->tr->trace_flags & TRACE_ITER_HASH_PTR) 4011 return fmt; 4012 4013 p = fmt; 4014 new_fmt = q = iter->fmt; 4015 while (*p) { 4016 if (unlikely(q - new_fmt + 3 > iter->fmt_size)) { 4017 if (!trace_iter_expand_format(iter)) 4018 return fmt; 4019 4020 q += iter->fmt - new_fmt; 4021 new_fmt = iter->fmt; 4022 } 4023 4024 *q++ = *p++; 4025 4026 /* Replace %p with %px */ 4027 if (p[-1] == '%') { 4028 if (p[0] == '%') { 4029 *q++ = *p++; 4030 } else if (p[0] == 'p' && !isalnum(p[1])) { 4031 *q++ = *p++; 4032 *q++ = 'x'; 4033 } 4034 } 4035 } 4036 *q = '\0'; 4037 4038 return new_fmt; 4039 } 4040 4041 #define STATIC_TEMP_BUF_SIZE 128 4042 static char static_temp_buf[STATIC_TEMP_BUF_SIZE] __aligned(4); 4043 4044 /* Find the next real entry, without updating the iterator itself */ 4045 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter, 4046 int *ent_cpu, u64 *ent_ts) 4047 { 4048 /* __find_next_entry will reset ent_size */ 4049 int ent_size = iter->ent_size; 4050 struct trace_entry *entry; 4051 4052 /* 4053 * If called from ftrace_dump(), then the iter->temp buffer 4054 * will be the static_temp_buf and not created from kmalloc. 4055 * If the entry size is greater than the buffer, we can 4056 * not save it. Just return NULL in that case. This is only 4057 * used to add markers when two consecutive events' time 4058 * stamps have a large delta. See trace_print_lat_context() 4059 */ 4060 if (iter->temp == static_temp_buf && 4061 STATIC_TEMP_BUF_SIZE < ent_size) 4062 return NULL; 4063 4064 /* 4065 * The __find_next_entry() may call peek_next_entry(), which may 4066 * call ring_buffer_peek() that may make the contents of iter->ent 4067 * undefined. Need to copy iter->ent now. 4068 */ 4069 if (iter->ent && iter->ent != iter->temp) { 4070 if ((!iter->temp || iter->temp_size < iter->ent_size) && 4071 !WARN_ON_ONCE(iter->temp == static_temp_buf)) { 4072 void *temp; 4073 temp = kmalloc(iter->ent_size, GFP_KERNEL); 4074 if (!temp) 4075 return NULL; 4076 kfree(iter->temp); 4077 iter->temp = temp; 4078 iter->temp_size = iter->ent_size; 4079 } 4080 memcpy(iter->temp, iter->ent, iter->ent_size); 4081 iter->ent = iter->temp; 4082 } 4083 entry = __find_next_entry(iter, ent_cpu, NULL, ent_ts); 4084 /* Put back the original ent_size */ 4085 iter->ent_size = ent_size; 4086 4087 return entry; 4088 } 4089 4090 /* Find the next real entry, and increment the iterator to the next entry */ 4091 void *trace_find_next_entry_inc(struct trace_iterator *iter) 4092 { 4093 iter->ent = __find_next_entry(iter, &iter->cpu, 4094 &iter->lost_events, &iter->ts); 4095 4096 if (iter->ent) 4097 trace_iterator_increment(iter); 4098 4099 return iter->ent ? iter : NULL; 4100 } 4101 4102 static void trace_consume(struct trace_iterator *iter) 4103 { 4104 ring_buffer_consume(iter->array_buffer->buffer, iter->cpu, &iter->ts, 4105 &iter->lost_events); 4106 } 4107 4108 static void *s_next(struct seq_file *m, void *v, loff_t *pos) 4109 { 4110 struct trace_iterator *iter = m->private; 4111 int i = (int)*pos; 4112 void *ent; 4113 4114 WARN_ON_ONCE(iter->leftover); 4115 4116 (*pos)++; 4117 4118 /* can't go backwards */ 4119 if (iter->idx > i) 4120 return NULL; 4121 4122 if (iter->idx < 0) 4123 ent = trace_find_next_entry_inc(iter); 4124 else 4125 ent = iter; 4126 4127 while (ent && iter->idx < i) 4128 ent = trace_find_next_entry_inc(iter); 4129 4130 iter->pos = *pos; 4131 4132 return ent; 4133 } 4134 4135 void tracing_iter_reset(struct trace_iterator *iter, int cpu) 4136 { 4137 struct ring_buffer_iter *buf_iter; 4138 unsigned long entries = 0; 4139 u64 ts; 4140 4141 per_cpu_ptr(iter->array_buffer->data, cpu)->skipped_entries = 0; 4142 4143 buf_iter = trace_buffer_iter(iter, cpu); 4144 if (!buf_iter) 4145 return; 4146 4147 ring_buffer_iter_reset(buf_iter); 4148 4149 /* 4150 * We could have the case with the max latency tracers 4151 * that a reset never took place on a cpu. This is evident 4152 * by the timestamp being before the start of the buffer. 4153 */ 4154 while (ring_buffer_iter_peek(buf_iter, &ts)) { 4155 if (ts >= iter->array_buffer->time_start) 4156 break; 4157 entries++; 4158 ring_buffer_iter_advance(buf_iter); 4159 /* This could be a big loop */ 4160 cond_resched(); 4161 } 4162 4163 per_cpu_ptr(iter->array_buffer->data, cpu)->skipped_entries = entries; 4164 } 4165 4166 /* 4167 * The current tracer is copied to avoid a global locking 4168 * all around. 4169 */ 4170 static void *s_start(struct seq_file *m, loff_t *pos) 4171 { 4172 struct trace_iterator *iter = m->private; 4173 struct trace_array *tr = iter->tr; 4174 int cpu_file = iter->cpu_file; 4175 void *p = NULL; 4176 loff_t l = 0; 4177 int cpu; 4178 4179 mutex_lock(&trace_types_lock); 4180 if (unlikely(tr->current_trace != iter->trace)) { 4181 /* Close iter->trace before switching to the new current tracer */ 4182 if (iter->trace->close) 4183 iter->trace->close(iter); 4184 iter->trace = tr->current_trace; 4185 /* Reopen the new current tracer */ 4186 if (iter->trace->open) 4187 iter->trace->open(iter); 4188 } 4189 mutex_unlock(&trace_types_lock); 4190 4191 #ifdef CONFIG_TRACER_MAX_TRACE 4192 if (iter->snapshot && iter->trace->use_max_tr) 4193 return ERR_PTR(-EBUSY); 4194 #endif 4195 4196 if (*pos != iter->pos) { 4197 iter->ent = NULL; 4198 iter->cpu = 0; 4199 iter->idx = -1; 4200 4201 if (cpu_file == RING_BUFFER_ALL_CPUS) { 4202 for_each_tracing_cpu(cpu) 4203 tracing_iter_reset(iter, cpu); 4204 } else 4205 tracing_iter_reset(iter, cpu_file); 4206 4207 iter->leftover = 0; 4208 for (p = iter; p && l < *pos; p = s_next(m, p, &l)) 4209 ; 4210 4211 } else { 4212 /* 4213 * If we overflowed the seq_file before, then we want 4214 * to just reuse the trace_seq buffer again. 4215 */ 4216 if (iter->leftover) 4217 p = iter; 4218 else { 4219 l = *pos - 1; 4220 p = s_next(m, p, &l); 4221 } 4222 } 4223 4224 trace_event_read_lock(); 4225 trace_access_lock(cpu_file); 4226 return p; 4227 } 4228 4229 static void s_stop(struct seq_file *m, void *p) 4230 { 4231 struct trace_iterator *iter = m->private; 4232 4233 #ifdef CONFIG_TRACER_MAX_TRACE 4234 if (iter->snapshot && iter->trace->use_max_tr) 4235 return; 4236 #endif 4237 4238 trace_access_unlock(iter->cpu_file); 4239 trace_event_read_unlock(); 4240 } 4241 4242 static void 4243 get_total_entries_cpu(struct array_buffer *buf, unsigned long *total, 4244 unsigned long *entries, int cpu) 4245 { 4246 unsigned long count; 4247 4248 count = ring_buffer_entries_cpu(buf->buffer, cpu); 4249 /* 4250 * If this buffer has skipped entries, then we hold all 4251 * entries for the trace and we need to ignore the 4252 * ones before the time stamp. 4253 */ 4254 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) { 4255 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries; 4256 /* total is the same as the entries */ 4257 *total = count; 4258 } else 4259 *total = count + 4260 ring_buffer_overrun_cpu(buf->buffer, cpu); 4261 *entries = count; 4262 } 4263 4264 static void 4265 get_total_entries(struct array_buffer *buf, 4266 unsigned long *total, unsigned long *entries) 4267 { 4268 unsigned long t, e; 4269 int cpu; 4270 4271 *total = 0; 4272 *entries = 0; 4273 4274 for_each_tracing_cpu(cpu) { 4275 get_total_entries_cpu(buf, &t, &e, cpu); 4276 *total += t; 4277 *entries += e; 4278 } 4279 } 4280 4281 unsigned long trace_total_entries_cpu(struct trace_array *tr, int cpu) 4282 { 4283 unsigned long total, entries; 4284 4285 if (!tr) 4286 tr = &global_trace; 4287 4288 get_total_entries_cpu(&tr->array_buffer, &total, &entries, cpu); 4289 4290 return entries; 4291 } 4292 4293 unsigned long trace_total_entries(struct trace_array *tr) 4294 { 4295 unsigned long total, entries; 4296 4297 if (!tr) 4298 tr = &global_trace; 4299 4300 get_total_entries(&tr->array_buffer, &total, &entries); 4301 4302 return entries; 4303 } 4304 4305 static void print_lat_help_header(struct seq_file *m) 4306 { 4307 seq_puts(m, "# _------=> CPU# \n" 4308 "# / _-----=> irqs-off/BH-disabled\n" 4309 "# | / _----=> need-resched \n" 4310 "# || / _---=> hardirq/softirq \n" 4311 "# ||| / _--=> preempt-depth \n" 4312 "# |||| / _-=> migrate-disable \n" 4313 "# ||||| / delay \n" 4314 "# cmd pid |||||| time | caller \n" 4315 "# \\ / |||||| \\ | / \n"); 4316 } 4317 4318 static void print_event_info(struct array_buffer *buf, struct seq_file *m) 4319 { 4320 unsigned long total; 4321 unsigned long entries; 4322 4323 get_total_entries(buf, &total, &entries); 4324 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n", 4325 entries, total, num_online_cpus()); 4326 seq_puts(m, "#\n"); 4327 } 4328 4329 static void print_func_help_header(struct array_buffer *buf, struct seq_file *m, 4330 unsigned int flags) 4331 { 4332 bool tgid = flags & TRACE_ITER_RECORD_TGID; 4333 4334 print_event_info(buf, m); 4335 4336 seq_printf(m, "# TASK-PID %s CPU# TIMESTAMP FUNCTION\n", tgid ? " TGID " : ""); 4337 seq_printf(m, "# | | %s | | |\n", tgid ? " | " : ""); 4338 } 4339 4340 static void print_func_help_header_irq(struct array_buffer *buf, struct seq_file *m, 4341 unsigned int flags) 4342 { 4343 bool tgid = flags & TRACE_ITER_RECORD_TGID; 4344 static const char space[] = " "; 4345 int prec = tgid ? 12 : 2; 4346 4347 print_event_info(buf, m); 4348 4349 seq_printf(m, "# %.*s _-----=> irqs-off/BH-disabled\n", prec, space); 4350 seq_printf(m, "# %.*s / _----=> need-resched\n", prec, space); 4351 seq_printf(m, "# %.*s| / _---=> hardirq/softirq\n", prec, space); 4352 seq_printf(m, "# %.*s|| / _--=> preempt-depth\n", prec, space); 4353 seq_printf(m, "# %.*s||| / _-=> migrate-disable\n", prec, space); 4354 seq_printf(m, "# %.*s|||| / delay\n", prec, space); 4355 seq_printf(m, "# TASK-PID %.*s CPU# ||||| TIMESTAMP FUNCTION\n", prec, " TGID "); 4356 seq_printf(m, "# | | %.*s | ||||| | |\n", prec, " | "); 4357 } 4358 4359 void 4360 print_trace_header(struct seq_file *m, struct trace_iterator *iter) 4361 { 4362 unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK); 4363 struct array_buffer *buf = iter->array_buffer; 4364 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu); 4365 struct tracer *type = iter->trace; 4366 unsigned long entries; 4367 unsigned long total; 4368 const char *name = type->name; 4369 4370 get_total_entries(buf, &total, &entries); 4371 4372 seq_printf(m, "# %s latency trace v1.1.5 on %s\n", 4373 name, UTS_RELEASE); 4374 seq_puts(m, "# -----------------------------------" 4375 "---------------------------------\n"); 4376 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |" 4377 " (M:%s VP:%d, KP:%d, SP:%d HP:%d", 4378 nsecs_to_usecs(data->saved_latency), 4379 entries, 4380 total, 4381 buf->cpu, 4382 preempt_model_none() ? "server" : 4383 preempt_model_voluntary() ? "desktop" : 4384 preempt_model_full() ? "preempt" : 4385 preempt_model_rt() ? "preempt_rt" : 4386 "unknown", 4387 /* These are reserved for later use */ 4388 0, 0, 0, 0); 4389 #ifdef CONFIG_SMP 4390 seq_printf(m, " #P:%d)\n", num_online_cpus()); 4391 #else 4392 seq_puts(m, ")\n"); 4393 #endif 4394 seq_puts(m, "# -----------------\n"); 4395 seq_printf(m, "# | task: %.16s-%d " 4396 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n", 4397 data->comm, data->pid, 4398 from_kuid_munged(seq_user_ns(m), data->uid), data->nice, 4399 data->policy, data->rt_priority); 4400 seq_puts(m, "# -----------------\n"); 4401 4402 if (data->critical_start) { 4403 seq_puts(m, "# => started at: "); 4404 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags); 4405 trace_print_seq(m, &iter->seq); 4406 seq_puts(m, "\n# => ended at: "); 4407 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags); 4408 trace_print_seq(m, &iter->seq); 4409 seq_puts(m, "\n#\n"); 4410 } 4411 4412 seq_puts(m, "#\n"); 4413 } 4414 4415 static void test_cpu_buff_start(struct trace_iterator *iter) 4416 { 4417 struct trace_seq *s = &iter->seq; 4418 struct trace_array *tr = iter->tr; 4419 4420 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE)) 4421 return; 4422 4423 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE)) 4424 return; 4425 4426 if (cpumask_available(iter->started) && 4427 cpumask_test_cpu(iter->cpu, iter->started)) 4428 return; 4429 4430 if (per_cpu_ptr(iter->array_buffer->data, iter->cpu)->skipped_entries) 4431 return; 4432 4433 if (cpumask_available(iter->started)) 4434 cpumask_set_cpu(iter->cpu, iter->started); 4435 4436 /* Don't print started cpu buffer for the first entry of the trace */ 4437 if (iter->idx > 1) 4438 trace_seq_printf(s, "##### CPU %u buffer started ####\n", 4439 iter->cpu); 4440 } 4441 4442 static enum print_line_t print_trace_fmt(struct trace_iterator *iter) 4443 { 4444 struct trace_array *tr = iter->tr; 4445 struct trace_seq *s = &iter->seq; 4446 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK); 4447 struct trace_entry *entry; 4448 struct trace_event *event; 4449 4450 entry = iter->ent; 4451 4452 test_cpu_buff_start(iter); 4453 4454 event = ftrace_find_event(entry->type); 4455 4456 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 4457 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 4458 trace_print_lat_context(iter); 4459 else 4460 trace_print_context(iter); 4461 } 4462 4463 if (trace_seq_has_overflowed(s)) 4464 return TRACE_TYPE_PARTIAL_LINE; 4465 4466 if (event) { 4467 if (tr->trace_flags & TRACE_ITER_FIELDS) 4468 return print_event_fields(iter, event); 4469 return event->funcs->trace(iter, sym_flags, event); 4470 } 4471 4472 trace_seq_printf(s, "Unknown type %d\n", entry->type); 4473 4474 return trace_handle_return(s); 4475 } 4476 4477 static enum print_line_t print_raw_fmt(struct trace_iterator *iter) 4478 { 4479 struct trace_array *tr = iter->tr; 4480 struct trace_seq *s = &iter->seq; 4481 struct trace_entry *entry; 4482 struct trace_event *event; 4483 4484 entry = iter->ent; 4485 4486 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) 4487 trace_seq_printf(s, "%d %d %llu ", 4488 entry->pid, iter->cpu, iter->ts); 4489 4490 if (trace_seq_has_overflowed(s)) 4491 return TRACE_TYPE_PARTIAL_LINE; 4492 4493 event = ftrace_find_event(entry->type); 4494 if (event) 4495 return event->funcs->raw(iter, 0, event); 4496 4497 trace_seq_printf(s, "%d ?\n", entry->type); 4498 4499 return trace_handle_return(s); 4500 } 4501 4502 static enum print_line_t print_hex_fmt(struct trace_iterator *iter) 4503 { 4504 struct trace_array *tr = iter->tr; 4505 struct trace_seq *s = &iter->seq; 4506 unsigned char newline = '\n'; 4507 struct trace_entry *entry; 4508 struct trace_event *event; 4509 4510 entry = iter->ent; 4511 4512 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 4513 SEQ_PUT_HEX_FIELD(s, entry->pid); 4514 SEQ_PUT_HEX_FIELD(s, iter->cpu); 4515 SEQ_PUT_HEX_FIELD(s, iter->ts); 4516 if (trace_seq_has_overflowed(s)) 4517 return TRACE_TYPE_PARTIAL_LINE; 4518 } 4519 4520 event = ftrace_find_event(entry->type); 4521 if (event) { 4522 enum print_line_t ret = event->funcs->hex(iter, 0, event); 4523 if (ret != TRACE_TYPE_HANDLED) 4524 return ret; 4525 } 4526 4527 SEQ_PUT_FIELD(s, newline); 4528 4529 return trace_handle_return(s); 4530 } 4531 4532 static enum print_line_t print_bin_fmt(struct trace_iterator *iter) 4533 { 4534 struct trace_array *tr = iter->tr; 4535 struct trace_seq *s = &iter->seq; 4536 struct trace_entry *entry; 4537 struct trace_event *event; 4538 4539 entry = iter->ent; 4540 4541 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 4542 SEQ_PUT_FIELD(s, entry->pid); 4543 SEQ_PUT_FIELD(s, iter->cpu); 4544 SEQ_PUT_FIELD(s, iter->ts); 4545 if (trace_seq_has_overflowed(s)) 4546 return TRACE_TYPE_PARTIAL_LINE; 4547 } 4548 4549 event = ftrace_find_event(entry->type); 4550 return event ? event->funcs->binary(iter, 0, event) : 4551 TRACE_TYPE_HANDLED; 4552 } 4553 4554 int trace_empty(struct trace_iterator *iter) 4555 { 4556 struct ring_buffer_iter *buf_iter; 4557 int cpu; 4558 4559 /* If we are looking at one CPU buffer, only check that one */ 4560 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 4561 cpu = iter->cpu_file; 4562 buf_iter = trace_buffer_iter(iter, cpu); 4563 if (buf_iter) { 4564 if (!ring_buffer_iter_empty(buf_iter)) 4565 return 0; 4566 } else { 4567 if (!ring_buffer_empty_cpu(iter->array_buffer->buffer, cpu)) 4568 return 0; 4569 } 4570 return 1; 4571 } 4572 4573 for_each_tracing_cpu(cpu) { 4574 buf_iter = trace_buffer_iter(iter, cpu); 4575 if (buf_iter) { 4576 if (!ring_buffer_iter_empty(buf_iter)) 4577 return 0; 4578 } else { 4579 if (!ring_buffer_empty_cpu(iter->array_buffer->buffer, cpu)) 4580 return 0; 4581 } 4582 } 4583 4584 return 1; 4585 } 4586 4587 /* Called with trace_event_read_lock() held. */ 4588 enum print_line_t print_trace_line(struct trace_iterator *iter) 4589 { 4590 struct trace_array *tr = iter->tr; 4591 unsigned long trace_flags = tr->trace_flags; 4592 enum print_line_t ret; 4593 4594 if (iter->lost_events) { 4595 if (iter->lost_events == (unsigned long)-1) 4596 trace_seq_printf(&iter->seq, "CPU:%d [LOST EVENTS]\n", 4597 iter->cpu); 4598 else 4599 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n", 4600 iter->cpu, iter->lost_events); 4601 if (trace_seq_has_overflowed(&iter->seq)) 4602 return TRACE_TYPE_PARTIAL_LINE; 4603 } 4604 4605 if (iter->trace && iter->trace->print_line) { 4606 ret = iter->trace->print_line(iter); 4607 if (ret != TRACE_TYPE_UNHANDLED) 4608 return ret; 4609 } 4610 4611 if (iter->ent->type == TRACE_BPUTS && 4612 trace_flags & TRACE_ITER_PRINTK && 4613 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 4614 return trace_print_bputs_msg_only(iter); 4615 4616 if (iter->ent->type == TRACE_BPRINT && 4617 trace_flags & TRACE_ITER_PRINTK && 4618 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 4619 return trace_print_bprintk_msg_only(iter); 4620 4621 if (iter->ent->type == TRACE_PRINT && 4622 trace_flags & TRACE_ITER_PRINTK && 4623 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 4624 return trace_print_printk_msg_only(iter); 4625 4626 if (trace_flags & TRACE_ITER_BIN) 4627 return print_bin_fmt(iter); 4628 4629 if (trace_flags & TRACE_ITER_HEX) 4630 return print_hex_fmt(iter); 4631 4632 if (trace_flags & TRACE_ITER_RAW) 4633 return print_raw_fmt(iter); 4634 4635 return print_trace_fmt(iter); 4636 } 4637 4638 void trace_latency_header(struct seq_file *m) 4639 { 4640 struct trace_iterator *iter = m->private; 4641 struct trace_array *tr = iter->tr; 4642 4643 /* print nothing if the buffers are empty */ 4644 if (trace_empty(iter)) 4645 return; 4646 4647 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 4648 print_trace_header(m, iter); 4649 4650 if (!(tr->trace_flags & TRACE_ITER_VERBOSE)) 4651 print_lat_help_header(m); 4652 } 4653 4654 void trace_default_header(struct seq_file *m) 4655 { 4656 struct trace_iterator *iter = m->private; 4657 struct trace_array *tr = iter->tr; 4658 unsigned long trace_flags = tr->trace_flags; 4659 4660 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) 4661 return; 4662 4663 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { 4664 /* print nothing if the buffers are empty */ 4665 if (trace_empty(iter)) 4666 return; 4667 print_trace_header(m, iter); 4668 if (!(trace_flags & TRACE_ITER_VERBOSE)) 4669 print_lat_help_header(m); 4670 } else { 4671 if (!(trace_flags & TRACE_ITER_VERBOSE)) { 4672 if (trace_flags & TRACE_ITER_IRQ_INFO) 4673 print_func_help_header_irq(iter->array_buffer, 4674 m, trace_flags); 4675 else 4676 print_func_help_header(iter->array_buffer, m, 4677 trace_flags); 4678 } 4679 } 4680 } 4681 4682 static void test_ftrace_alive(struct seq_file *m) 4683 { 4684 if (!ftrace_is_dead()) 4685 return; 4686 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n" 4687 "# MAY BE MISSING FUNCTION EVENTS\n"); 4688 } 4689 4690 #ifdef CONFIG_TRACER_MAX_TRACE 4691 static void show_snapshot_main_help(struct seq_file *m) 4692 { 4693 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n" 4694 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n" 4695 "# Takes a snapshot of the main buffer.\n" 4696 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n" 4697 "# (Doesn't have to be '2' works with any number that\n" 4698 "# is not a '0' or '1')\n"); 4699 } 4700 4701 static void show_snapshot_percpu_help(struct seq_file *m) 4702 { 4703 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n"); 4704 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP 4705 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n" 4706 "# Takes a snapshot of the main buffer for this cpu.\n"); 4707 #else 4708 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n" 4709 "# Must use main snapshot file to allocate.\n"); 4710 #endif 4711 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n" 4712 "# (Doesn't have to be '2' works with any number that\n" 4713 "# is not a '0' or '1')\n"); 4714 } 4715 4716 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) 4717 { 4718 if (iter->tr->allocated_snapshot) 4719 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n"); 4720 else 4721 seq_puts(m, "#\n# * Snapshot is freed *\n#\n"); 4722 4723 seq_puts(m, "# Snapshot commands:\n"); 4724 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 4725 show_snapshot_main_help(m); 4726 else 4727 show_snapshot_percpu_help(m); 4728 } 4729 #else 4730 /* Should never be called */ 4731 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { } 4732 #endif 4733 4734 static int s_show(struct seq_file *m, void *v) 4735 { 4736 struct trace_iterator *iter = v; 4737 int ret; 4738 4739 if (iter->ent == NULL) { 4740 if (iter->tr) { 4741 seq_printf(m, "# tracer: %s\n", iter->trace->name); 4742 seq_puts(m, "#\n"); 4743 test_ftrace_alive(m); 4744 } 4745 if (iter->snapshot && trace_empty(iter)) 4746 print_snapshot_help(m, iter); 4747 else if (iter->trace && iter->trace->print_header) 4748 iter->trace->print_header(m); 4749 else 4750 trace_default_header(m); 4751 4752 } else if (iter->leftover) { 4753 /* 4754 * If we filled the seq_file buffer earlier, we 4755 * want to just show it now. 4756 */ 4757 ret = trace_print_seq(m, &iter->seq); 4758 4759 /* ret should this time be zero, but you never know */ 4760 iter->leftover = ret; 4761 4762 } else { 4763 ret = print_trace_line(iter); 4764 if (ret == TRACE_TYPE_PARTIAL_LINE) { 4765 iter->seq.full = 0; 4766 trace_seq_puts(&iter->seq, "[LINE TOO BIG]\n"); 4767 } 4768 ret = trace_print_seq(m, &iter->seq); 4769 /* 4770 * If we overflow the seq_file buffer, then it will 4771 * ask us for this data again at start up. 4772 * Use that instead. 4773 * ret is 0 if seq_file write succeeded. 4774 * -1 otherwise. 4775 */ 4776 iter->leftover = ret; 4777 } 4778 4779 return 0; 4780 } 4781 4782 /* 4783 * Should be used after trace_array_get(), trace_types_lock 4784 * ensures that i_cdev was already initialized. 4785 */ 4786 static inline int tracing_get_cpu(struct inode *inode) 4787 { 4788 if (inode->i_cdev) /* See trace_create_cpu_file() */ 4789 return (long)inode->i_cdev - 1; 4790 return RING_BUFFER_ALL_CPUS; 4791 } 4792 4793 static const struct seq_operations tracer_seq_ops = { 4794 .start = s_start, 4795 .next = s_next, 4796 .stop = s_stop, 4797 .show = s_show, 4798 }; 4799 4800 /* 4801 * Note, as iter itself can be allocated and freed in different 4802 * ways, this function is only used to free its content, and not 4803 * the iterator itself. The only requirement to all the allocations 4804 * is that it must zero all fields (kzalloc), as freeing works with 4805 * ethier allocated content or NULL. 4806 */ 4807 static void free_trace_iter_content(struct trace_iterator *iter) 4808 { 4809 /* The fmt is either NULL, allocated or points to static_fmt_buf */ 4810 if (iter->fmt != static_fmt_buf) 4811 kfree(iter->fmt); 4812 4813 kfree(iter->temp); 4814 kfree(iter->buffer_iter); 4815 mutex_destroy(&iter->mutex); 4816 free_cpumask_var(iter->started); 4817 } 4818 4819 static struct trace_iterator * 4820 __tracing_open(struct inode *inode, struct file *file, bool snapshot) 4821 { 4822 struct trace_array *tr = inode->i_private; 4823 struct trace_iterator *iter; 4824 int cpu; 4825 4826 if (tracing_disabled) 4827 return ERR_PTR(-ENODEV); 4828 4829 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter)); 4830 if (!iter) 4831 return ERR_PTR(-ENOMEM); 4832 4833 iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter), 4834 GFP_KERNEL); 4835 if (!iter->buffer_iter) 4836 goto release; 4837 4838 /* 4839 * trace_find_next_entry() may need to save off iter->ent. 4840 * It will place it into the iter->temp buffer. As most 4841 * events are less than 128, allocate a buffer of that size. 4842 * If one is greater, then trace_find_next_entry() will 4843 * allocate a new buffer to adjust for the bigger iter->ent. 4844 * It's not critical if it fails to get allocated here. 4845 */ 4846 iter->temp = kmalloc(128, GFP_KERNEL); 4847 if (iter->temp) 4848 iter->temp_size = 128; 4849 4850 /* 4851 * trace_event_printf() may need to modify given format 4852 * string to replace %p with %px so that it shows real address 4853 * instead of hash value. However, that is only for the event 4854 * tracing, other tracer may not need. Defer the allocation 4855 * until it is needed. 4856 */ 4857 iter->fmt = NULL; 4858 iter->fmt_size = 0; 4859 4860 mutex_lock(&trace_types_lock); 4861 iter->trace = tr->current_trace; 4862 4863 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL)) 4864 goto fail; 4865 4866 iter->tr = tr; 4867 4868 #ifdef CONFIG_TRACER_MAX_TRACE 4869 /* Currently only the top directory has a snapshot */ 4870 if (tr->current_trace->print_max || snapshot) 4871 iter->array_buffer = &tr->max_buffer; 4872 else 4873 #endif 4874 iter->array_buffer = &tr->array_buffer; 4875 iter->snapshot = snapshot; 4876 iter->pos = -1; 4877 iter->cpu_file = tracing_get_cpu(inode); 4878 mutex_init(&iter->mutex); 4879 4880 /* Notify the tracer early; before we stop tracing. */ 4881 if (iter->trace->open) 4882 iter->trace->open(iter); 4883 4884 /* Annotate start of buffers if we had overruns */ 4885 if (ring_buffer_overruns(iter->array_buffer->buffer)) 4886 iter->iter_flags |= TRACE_FILE_ANNOTATE; 4887 4888 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 4889 if (trace_clocks[tr->clock_id].in_ns) 4890 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 4891 4892 /* 4893 * If pause-on-trace is enabled, then stop the trace while 4894 * dumping, unless this is the "snapshot" file 4895 */ 4896 if (!iter->snapshot && (tr->trace_flags & TRACE_ITER_PAUSE_ON_TRACE)) 4897 tracing_stop_tr(tr); 4898 4899 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) { 4900 for_each_tracing_cpu(cpu) { 4901 iter->buffer_iter[cpu] = 4902 ring_buffer_read_prepare(iter->array_buffer->buffer, 4903 cpu, GFP_KERNEL); 4904 } 4905 ring_buffer_read_prepare_sync(); 4906 for_each_tracing_cpu(cpu) { 4907 ring_buffer_read_start(iter->buffer_iter[cpu]); 4908 tracing_iter_reset(iter, cpu); 4909 } 4910 } else { 4911 cpu = iter->cpu_file; 4912 iter->buffer_iter[cpu] = 4913 ring_buffer_read_prepare(iter->array_buffer->buffer, 4914 cpu, GFP_KERNEL); 4915 ring_buffer_read_prepare_sync(); 4916 ring_buffer_read_start(iter->buffer_iter[cpu]); 4917 tracing_iter_reset(iter, cpu); 4918 } 4919 4920 mutex_unlock(&trace_types_lock); 4921 4922 return iter; 4923 4924 fail: 4925 mutex_unlock(&trace_types_lock); 4926 free_trace_iter_content(iter); 4927 release: 4928 seq_release_private(inode, file); 4929 return ERR_PTR(-ENOMEM); 4930 } 4931 4932 int tracing_open_generic(struct inode *inode, struct file *filp) 4933 { 4934 int ret; 4935 4936 ret = tracing_check_open_get_tr(NULL); 4937 if (ret) 4938 return ret; 4939 4940 filp->private_data = inode->i_private; 4941 return 0; 4942 } 4943 4944 bool tracing_is_disabled(void) 4945 { 4946 return (tracing_disabled) ? true: false; 4947 } 4948 4949 /* 4950 * Open and update trace_array ref count. 4951 * Must have the current trace_array passed to it. 4952 */ 4953 int tracing_open_generic_tr(struct inode *inode, struct file *filp) 4954 { 4955 struct trace_array *tr = inode->i_private; 4956 int ret; 4957 4958 ret = tracing_check_open_get_tr(tr); 4959 if (ret) 4960 return ret; 4961 4962 filp->private_data = inode->i_private; 4963 4964 return 0; 4965 } 4966 4967 /* 4968 * The private pointer of the inode is the trace_event_file. 4969 * Update the tr ref count associated to it. 4970 */ 4971 int tracing_open_file_tr(struct inode *inode, struct file *filp) 4972 { 4973 struct trace_event_file *file = inode->i_private; 4974 int ret; 4975 4976 ret = tracing_check_open_get_tr(file->tr); 4977 if (ret) 4978 return ret; 4979 4980 mutex_lock(&event_mutex); 4981 4982 /* Fail if the file is marked for removal */ 4983 if (file->flags & EVENT_FILE_FL_FREED) { 4984 trace_array_put(file->tr); 4985 ret = -ENODEV; 4986 } else { 4987 event_file_get(file); 4988 } 4989 4990 mutex_unlock(&event_mutex); 4991 if (ret) 4992 return ret; 4993 4994 filp->private_data = inode->i_private; 4995 4996 return 0; 4997 } 4998 4999 int tracing_release_file_tr(struct inode *inode, struct file *filp) 5000 { 5001 struct trace_event_file *file = inode->i_private; 5002 5003 trace_array_put(file->tr); 5004 event_file_put(file); 5005 5006 return 0; 5007 } 5008 5009 int tracing_single_release_file_tr(struct inode *inode, struct file *filp) 5010 { 5011 tracing_release_file_tr(inode, filp); 5012 return single_release(inode, filp); 5013 } 5014 5015 static int tracing_mark_open(struct inode *inode, struct file *filp) 5016 { 5017 stream_open(inode, filp); 5018 return tracing_open_generic_tr(inode, filp); 5019 } 5020 5021 static int tracing_release(struct inode *inode, struct file *file) 5022 { 5023 struct trace_array *tr = inode->i_private; 5024 struct seq_file *m = file->private_data; 5025 struct trace_iterator *iter; 5026 int cpu; 5027 5028 if (!(file->f_mode & FMODE_READ)) { 5029 trace_array_put(tr); 5030 return 0; 5031 } 5032 5033 /* Writes do not use seq_file */ 5034 iter = m->private; 5035 mutex_lock(&trace_types_lock); 5036 5037 for_each_tracing_cpu(cpu) { 5038 if (iter->buffer_iter[cpu]) 5039 ring_buffer_read_finish(iter->buffer_iter[cpu]); 5040 } 5041 5042 if (iter->trace && iter->trace->close) 5043 iter->trace->close(iter); 5044 5045 if (!iter->snapshot && tr->stop_count) 5046 /* reenable tracing if it was previously enabled */ 5047 tracing_start_tr(tr); 5048 5049 __trace_array_put(tr); 5050 5051 mutex_unlock(&trace_types_lock); 5052 5053 free_trace_iter_content(iter); 5054 seq_release_private(inode, file); 5055 5056 return 0; 5057 } 5058 5059 static int tracing_release_generic_tr(struct inode *inode, struct file *file) 5060 { 5061 struct trace_array *tr = inode->i_private; 5062 5063 trace_array_put(tr); 5064 return 0; 5065 } 5066 5067 static int tracing_single_release_tr(struct inode *inode, struct file *file) 5068 { 5069 struct trace_array *tr = inode->i_private; 5070 5071 trace_array_put(tr); 5072 5073 return single_release(inode, file); 5074 } 5075 5076 static int tracing_open(struct inode *inode, struct file *file) 5077 { 5078 struct trace_array *tr = inode->i_private; 5079 struct trace_iterator *iter; 5080 int ret; 5081 5082 ret = tracing_check_open_get_tr(tr); 5083 if (ret) 5084 return ret; 5085 5086 /* If this file was open for write, then erase contents */ 5087 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) { 5088 int cpu = tracing_get_cpu(inode); 5089 struct array_buffer *trace_buf = &tr->array_buffer; 5090 5091 #ifdef CONFIG_TRACER_MAX_TRACE 5092 if (tr->current_trace->print_max) 5093 trace_buf = &tr->max_buffer; 5094 #endif 5095 5096 if (cpu == RING_BUFFER_ALL_CPUS) 5097 tracing_reset_online_cpus(trace_buf); 5098 else 5099 tracing_reset_cpu(trace_buf, cpu); 5100 } 5101 5102 if (file->f_mode & FMODE_READ) { 5103 iter = __tracing_open(inode, file, false); 5104 if (IS_ERR(iter)) 5105 ret = PTR_ERR(iter); 5106 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) 5107 iter->iter_flags |= TRACE_FILE_LAT_FMT; 5108 } 5109 5110 if (ret < 0) 5111 trace_array_put(tr); 5112 5113 return ret; 5114 } 5115 5116 /* 5117 * Some tracers are not suitable for instance buffers. 5118 * A tracer is always available for the global array (toplevel) 5119 * or if it explicitly states that it is. 5120 */ 5121 static bool 5122 trace_ok_for_array(struct tracer *t, struct trace_array *tr) 5123 { 5124 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; 5125 } 5126 5127 /* Find the next tracer that this trace array may use */ 5128 static struct tracer * 5129 get_tracer_for_array(struct trace_array *tr, struct tracer *t) 5130 { 5131 while (t && !trace_ok_for_array(t, tr)) 5132 t = t->next; 5133 5134 return t; 5135 } 5136 5137 static void * 5138 t_next(struct seq_file *m, void *v, loff_t *pos) 5139 { 5140 struct trace_array *tr = m->private; 5141 struct tracer *t = v; 5142 5143 (*pos)++; 5144 5145 if (t) 5146 t = get_tracer_for_array(tr, t->next); 5147 5148 return t; 5149 } 5150 5151 static void *t_start(struct seq_file *m, loff_t *pos) 5152 { 5153 struct trace_array *tr = m->private; 5154 struct tracer *t; 5155 loff_t l = 0; 5156 5157 mutex_lock(&trace_types_lock); 5158 5159 t = get_tracer_for_array(tr, trace_types); 5160 for (; t && l < *pos; t = t_next(m, t, &l)) 5161 ; 5162 5163 return t; 5164 } 5165 5166 static void t_stop(struct seq_file *m, void *p) 5167 { 5168 mutex_unlock(&trace_types_lock); 5169 } 5170 5171 static int t_show(struct seq_file *m, void *v) 5172 { 5173 struct tracer *t = v; 5174 5175 if (!t) 5176 return 0; 5177 5178 seq_puts(m, t->name); 5179 if (t->next) 5180 seq_putc(m, ' '); 5181 else 5182 seq_putc(m, '\n'); 5183 5184 return 0; 5185 } 5186 5187 static const struct seq_operations show_traces_seq_ops = { 5188 .start = t_start, 5189 .next = t_next, 5190 .stop = t_stop, 5191 .show = t_show, 5192 }; 5193 5194 static int show_traces_open(struct inode *inode, struct file *file) 5195 { 5196 struct trace_array *tr = inode->i_private; 5197 struct seq_file *m; 5198 int ret; 5199 5200 ret = tracing_check_open_get_tr(tr); 5201 if (ret) 5202 return ret; 5203 5204 ret = seq_open(file, &show_traces_seq_ops); 5205 if (ret) { 5206 trace_array_put(tr); 5207 return ret; 5208 } 5209 5210 m = file->private_data; 5211 m->private = tr; 5212 5213 return 0; 5214 } 5215 5216 static int show_traces_release(struct inode *inode, struct file *file) 5217 { 5218 struct trace_array *tr = inode->i_private; 5219 5220 trace_array_put(tr); 5221 return seq_release(inode, file); 5222 } 5223 5224 static ssize_t 5225 tracing_write_stub(struct file *filp, const char __user *ubuf, 5226 size_t count, loff_t *ppos) 5227 { 5228 return count; 5229 } 5230 5231 loff_t tracing_lseek(struct file *file, loff_t offset, int whence) 5232 { 5233 int ret; 5234 5235 if (file->f_mode & FMODE_READ) 5236 ret = seq_lseek(file, offset, whence); 5237 else 5238 file->f_pos = ret = 0; 5239 5240 return ret; 5241 } 5242 5243 static const struct file_operations tracing_fops = { 5244 .open = tracing_open, 5245 .read = seq_read, 5246 .read_iter = seq_read_iter, 5247 .splice_read = copy_splice_read, 5248 .write = tracing_write_stub, 5249 .llseek = tracing_lseek, 5250 .release = tracing_release, 5251 }; 5252 5253 static const struct file_operations show_traces_fops = { 5254 .open = show_traces_open, 5255 .read = seq_read, 5256 .llseek = seq_lseek, 5257 .release = show_traces_release, 5258 }; 5259 5260 static ssize_t 5261 tracing_cpumask_read(struct file *filp, char __user *ubuf, 5262 size_t count, loff_t *ppos) 5263 { 5264 struct trace_array *tr = file_inode(filp)->i_private; 5265 char *mask_str; 5266 int len; 5267 5268 len = snprintf(NULL, 0, "%*pb\n", 5269 cpumask_pr_args(tr->tracing_cpumask)) + 1; 5270 mask_str = kmalloc(len, GFP_KERNEL); 5271 if (!mask_str) 5272 return -ENOMEM; 5273 5274 len = snprintf(mask_str, len, "%*pb\n", 5275 cpumask_pr_args(tr->tracing_cpumask)); 5276 if (len >= count) { 5277 count = -EINVAL; 5278 goto out_err; 5279 } 5280 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len); 5281 5282 out_err: 5283 kfree(mask_str); 5284 5285 return count; 5286 } 5287 5288 int tracing_set_cpumask(struct trace_array *tr, 5289 cpumask_var_t tracing_cpumask_new) 5290 { 5291 int cpu; 5292 5293 if (!tr) 5294 return -EINVAL; 5295 5296 local_irq_disable(); 5297 arch_spin_lock(&tr->max_lock); 5298 for_each_tracing_cpu(cpu) { 5299 /* 5300 * Increase/decrease the disabled counter if we are 5301 * about to flip a bit in the cpumask: 5302 */ 5303 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && 5304 !cpumask_test_cpu(cpu, tracing_cpumask_new)) { 5305 atomic_inc(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled); 5306 ring_buffer_record_disable_cpu(tr->array_buffer.buffer, cpu); 5307 #ifdef CONFIG_TRACER_MAX_TRACE 5308 ring_buffer_record_disable_cpu(tr->max_buffer.buffer, cpu); 5309 #endif 5310 } 5311 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && 5312 cpumask_test_cpu(cpu, tracing_cpumask_new)) { 5313 atomic_dec(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled); 5314 ring_buffer_record_enable_cpu(tr->array_buffer.buffer, cpu); 5315 #ifdef CONFIG_TRACER_MAX_TRACE 5316 ring_buffer_record_enable_cpu(tr->max_buffer.buffer, cpu); 5317 #endif 5318 } 5319 } 5320 arch_spin_unlock(&tr->max_lock); 5321 local_irq_enable(); 5322 5323 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); 5324 5325 return 0; 5326 } 5327 5328 static ssize_t 5329 tracing_cpumask_write(struct file *filp, const char __user *ubuf, 5330 size_t count, loff_t *ppos) 5331 { 5332 struct trace_array *tr = file_inode(filp)->i_private; 5333 cpumask_var_t tracing_cpumask_new; 5334 int err; 5335 5336 if (!zalloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL)) 5337 return -ENOMEM; 5338 5339 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new); 5340 if (err) 5341 goto err_free; 5342 5343 err = tracing_set_cpumask(tr, tracing_cpumask_new); 5344 if (err) 5345 goto err_free; 5346 5347 free_cpumask_var(tracing_cpumask_new); 5348 5349 return count; 5350 5351 err_free: 5352 free_cpumask_var(tracing_cpumask_new); 5353 5354 return err; 5355 } 5356 5357 static const struct file_operations tracing_cpumask_fops = { 5358 .open = tracing_open_generic_tr, 5359 .read = tracing_cpumask_read, 5360 .write = tracing_cpumask_write, 5361 .release = tracing_release_generic_tr, 5362 .llseek = generic_file_llseek, 5363 }; 5364 5365 static int tracing_trace_options_show(struct seq_file *m, void *v) 5366 { 5367 struct tracer_opt *trace_opts; 5368 struct trace_array *tr = m->private; 5369 u32 tracer_flags; 5370 int i; 5371 5372 mutex_lock(&trace_types_lock); 5373 tracer_flags = tr->current_trace->flags->val; 5374 trace_opts = tr->current_trace->flags->opts; 5375 5376 for (i = 0; trace_options[i]; i++) { 5377 if (tr->trace_flags & (1 << i)) 5378 seq_printf(m, "%s\n", trace_options[i]); 5379 else 5380 seq_printf(m, "no%s\n", trace_options[i]); 5381 } 5382 5383 for (i = 0; trace_opts[i].name; i++) { 5384 if (tracer_flags & trace_opts[i].bit) 5385 seq_printf(m, "%s\n", trace_opts[i].name); 5386 else 5387 seq_printf(m, "no%s\n", trace_opts[i].name); 5388 } 5389 mutex_unlock(&trace_types_lock); 5390 5391 return 0; 5392 } 5393 5394 static int __set_tracer_option(struct trace_array *tr, 5395 struct tracer_flags *tracer_flags, 5396 struct tracer_opt *opts, int neg) 5397 { 5398 struct tracer *trace = tracer_flags->trace; 5399 int ret; 5400 5401 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); 5402 if (ret) 5403 return ret; 5404 5405 if (neg) 5406 tracer_flags->val &= ~opts->bit; 5407 else 5408 tracer_flags->val |= opts->bit; 5409 return 0; 5410 } 5411 5412 /* Try to assign a tracer specific option */ 5413 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) 5414 { 5415 struct tracer *trace = tr->current_trace; 5416 struct tracer_flags *tracer_flags = trace->flags; 5417 struct tracer_opt *opts = NULL; 5418 int i; 5419 5420 for (i = 0; tracer_flags->opts[i].name; i++) { 5421 opts = &tracer_flags->opts[i]; 5422 5423 if (strcmp(cmp, opts->name) == 0) 5424 return __set_tracer_option(tr, trace->flags, opts, neg); 5425 } 5426 5427 return -EINVAL; 5428 } 5429 5430 /* Some tracers require overwrite to stay enabled */ 5431 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) 5432 { 5433 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set) 5434 return -1; 5435 5436 return 0; 5437 } 5438 5439 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) 5440 { 5441 int *map; 5442 5443 if ((mask == TRACE_ITER_RECORD_TGID) || 5444 (mask == TRACE_ITER_RECORD_CMD)) 5445 lockdep_assert_held(&event_mutex); 5446 5447 /* do nothing if flag is already set */ 5448 if (!!(tr->trace_flags & mask) == !!enabled) 5449 return 0; 5450 5451 /* Give the tracer a chance to approve the change */ 5452 if (tr->current_trace->flag_changed) 5453 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) 5454 return -EINVAL; 5455 5456 if (enabled) 5457 tr->trace_flags |= mask; 5458 else 5459 tr->trace_flags &= ~mask; 5460 5461 if (mask == TRACE_ITER_RECORD_CMD) 5462 trace_event_enable_cmd_record(enabled); 5463 5464 if (mask == TRACE_ITER_RECORD_TGID) { 5465 if (!tgid_map) { 5466 tgid_map_max = pid_max; 5467 map = kvcalloc(tgid_map_max + 1, sizeof(*tgid_map), 5468 GFP_KERNEL); 5469 5470 /* 5471 * Pairs with smp_load_acquire() in 5472 * trace_find_tgid_ptr() to ensure that if it observes 5473 * the tgid_map we just allocated then it also observes 5474 * the corresponding tgid_map_max value. 5475 */ 5476 smp_store_release(&tgid_map, map); 5477 } 5478 if (!tgid_map) { 5479 tr->trace_flags &= ~TRACE_ITER_RECORD_TGID; 5480 return -ENOMEM; 5481 } 5482 5483 trace_event_enable_tgid_record(enabled); 5484 } 5485 5486 if (mask == TRACE_ITER_EVENT_FORK) 5487 trace_event_follow_fork(tr, enabled); 5488 5489 if (mask == TRACE_ITER_FUNC_FORK) 5490 ftrace_pid_follow_fork(tr, enabled); 5491 5492 if (mask == TRACE_ITER_OVERWRITE) { 5493 ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); 5494 #ifdef CONFIG_TRACER_MAX_TRACE 5495 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); 5496 #endif 5497 } 5498 5499 if (mask == TRACE_ITER_PRINTK) { 5500 trace_printk_start_stop_comm(enabled); 5501 trace_printk_control(enabled); 5502 } 5503 5504 return 0; 5505 } 5506 5507 int trace_set_options(struct trace_array *tr, char *option) 5508 { 5509 char *cmp; 5510 int neg = 0; 5511 int ret; 5512 size_t orig_len = strlen(option); 5513 int len; 5514 5515 cmp = strstrip(option); 5516 5517 len = str_has_prefix(cmp, "no"); 5518 if (len) 5519 neg = 1; 5520 5521 cmp += len; 5522 5523 mutex_lock(&event_mutex); 5524 mutex_lock(&trace_types_lock); 5525 5526 ret = match_string(trace_options, -1, cmp); 5527 /* If no option could be set, test the specific tracer options */ 5528 if (ret < 0) 5529 ret = set_tracer_option(tr, cmp, neg); 5530 else 5531 ret = set_tracer_flag(tr, 1 << ret, !neg); 5532 5533 mutex_unlock(&trace_types_lock); 5534 mutex_unlock(&event_mutex); 5535 5536 /* 5537 * If the first trailing whitespace is replaced with '\0' by strstrip, 5538 * turn it back into a space. 5539 */ 5540 if (orig_len > strlen(option)) 5541 option[strlen(option)] = ' '; 5542 5543 return ret; 5544 } 5545 5546 static void __init apply_trace_boot_options(void) 5547 { 5548 char *buf = trace_boot_options_buf; 5549 char *option; 5550 5551 while (true) { 5552 option = strsep(&buf, ","); 5553 5554 if (!option) 5555 break; 5556 5557 if (*option) 5558 trace_set_options(&global_trace, option); 5559 5560 /* Put back the comma to allow this to be called again */ 5561 if (buf) 5562 *(buf - 1) = ','; 5563 } 5564 } 5565 5566 static ssize_t 5567 tracing_trace_options_write(struct file *filp, const char __user *ubuf, 5568 size_t cnt, loff_t *ppos) 5569 { 5570 struct seq_file *m = filp->private_data; 5571 struct trace_array *tr = m->private; 5572 char buf[64]; 5573 int ret; 5574 5575 if (cnt >= sizeof(buf)) 5576 return -EINVAL; 5577 5578 if (copy_from_user(buf, ubuf, cnt)) 5579 return -EFAULT; 5580 5581 buf[cnt] = 0; 5582 5583 ret = trace_set_options(tr, buf); 5584 if (ret < 0) 5585 return ret; 5586 5587 *ppos += cnt; 5588 5589 return cnt; 5590 } 5591 5592 static int tracing_trace_options_open(struct inode *inode, struct file *file) 5593 { 5594 struct trace_array *tr = inode->i_private; 5595 int ret; 5596 5597 ret = tracing_check_open_get_tr(tr); 5598 if (ret) 5599 return ret; 5600 5601 ret = single_open(file, tracing_trace_options_show, inode->i_private); 5602 if (ret < 0) 5603 trace_array_put(tr); 5604 5605 return ret; 5606 } 5607 5608 static const struct file_operations tracing_iter_fops = { 5609 .open = tracing_trace_options_open, 5610 .read = seq_read, 5611 .llseek = seq_lseek, 5612 .release = tracing_single_release_tr, 5613 .write = tracing_trace_options_write, 5614 }; 5615 5616 static const char readme_msg[] = 5617 "tracing mini-HOWTO:\n\n" 5618 "# echo 0 > tracing_on : quick way to disable tracing\n" 5619 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n" 5620 " Important files:\n" 5621 " trace\t\t\t- The static contents of the buffer\n" 5622 "\t\t\t To clear the buffer write into this file: echo > trace\n" 5623 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n" 5624 " current_tracer\t- function and latency tracers\n" 5625 " available_tracers\t- list of configured tracers for current_tracer\n" 5626 " error_log\t- error log for failed commands (that support it)\n" 5627 " buffer_size_kb\t- view and modify size of per cpu buffer\n" 5628 " buffer_total_size_kb - view total size of all cpu buffers\n\n" 5629 " trace_clock\t\t- change the clock used to order events\n" 5630 " local: Per cpu clock but may not be synced across CPUs\n" 5631 " global: Synced across CPUs but slows tracing down.\n" 5632 " counter: Not a clock, but just an increment\n" 5633 " uptime: Jiffy counter from time of boot\n" 5634 " perf: Same clock that perf events use\n" 5635 #ifdef CONFIG_X86_64 5636 " x86-tsc: TSC cycle counter\n" 5637 #endif 5638 "\n timestamp_mode\t- view the mode used to timestamp events\n" 5639 " delta: Delta difference against a buffer-wide timestamp\n" 5640 " absolute: Absolute (standalone) timestamp\n" 5641 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n" 5642 "\n trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n" 5643 " tracing_cpumask\t- Limit which CPUs to trace\n" 5644 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n" 5645 "\t\t\t Remove sub-buffer with rmdir\n" 5646 " trace_options\t\t- Set format or modify how tracing happens\n" 5647 "\t\t\t Disable an option by prefixing 'no' to the\n" 5648 "\t\t\t option name\n" 5649 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n" 5650 #ifdef CONFIG_DYNAMIC_FTRACE 5651 "\n available_filter_functions - list of functions that can be filtered on\n" 5652 " set_ftrace_filter\t- echo function name in here to only trace these\n" 5653 "\t\t\t functions\n" 5654 "\t accepts: func_full_name or glob-matching-pattern\n" 5655 "\t modules: Can select a group via module\n" 5656 "\t Format: :mod:<module-name>\n" 5657 "\t example: echo :mod:ext3 > set_ftrace_filter\n" 5658 "\t triggers: a command to perform when function is hit\n" 5659 "\t Format: <function>:<trigger>[:count]\n" 5660 "\t trigger: traceon, traceoff\n" 5661 "\t\t enable_event:<system>:<event>\n" 5662 "\t\t disable_event:<system>:<event>\n" 5663 #ifdef CONFIG_STACKTRACE 5664 "\t\t stacktrace\n" 5665 #endif 5666 #ifdef CONFIG_TRACER_SNAPSHOT 5667 "\t\t snapshot\n" 5668 #endif 5669 "\t\t dump\n" 5670 "\t\t cpudump\n" 5671 "\t example: echo do_fault:traceoff > set_ftrace_filter\n" 5672 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n" 5673 "\t The first one will disable tracing every time do_fault is hit\n" 5674 "\t The second will disable tracing at most 3 times when do_trap is hit\n" 5675 "\t The first time do trap is hit and it disables tracing, the\n" 5676 "\t counter will decrement to 2. If tracing is already disabled,\n" 5677 "\t the counter will not decrement. It only decrements when the\n" 5678 "\t trigger did work\n" 5679 "\t To remove trigger without count:\n" 5680 "\t echo '!<function>:<trigger> > set_ftrace_filter\n" 5681 "\t To remove trigger with a count:\n" 5682 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n" 5683 " set_ftrace_notrace\t- echo function name in here to never trace.\n" 5684 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" 5685 "\t modules: Can select a group via module command :mod:\n" 5686 "\t Does not accept triggers\n" 5687 #endif /* CONFIG_DYNAMIC_FTRACE */ 5688 #ifdef CONFIG_FUNCTION_TRACER 5689 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n" 5690 "\t\t (function)\n" 5691 " set_ftrace_notrace_pid\t- Write pid(s) to not function trace those pids\n" 5692 "\t\t (function)\n" 5693 #endif 5694 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 5695 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n" 5696 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n" 5697 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n" 5698 #endif 5699 #ifdef CONFIG_TRACER_SNAPSHOT 5700 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n" 5701 "\t\t\t snapshot buffer. Read the contents for more\n" 5702 "\t\t\t information\n" 5703 #endif 5704 #ifdef CONFIG_STACK_TRACER 5705 " stack_trace\t\t- Shows the max stack trace when active\n" 5706 " stack_max_size\t- Shows current max stack size that was traced\n" 5707 "\t\t\t Write into this file to reset the max size (trigger a\n" 5708 "\t\t\t new trace)\n" 5709 #ifdef CONFIG_DYNAMIC_FTRACE 5710 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n" 5711 "\t\t\t traces\n" 5712 #endif 5713 #endif /* CONFIG_STACK_TRACER */ 5714 #ifdef CONFIG_DYNAMIC_EVENTS 5715 " dynamic_events\t\t- Create/append/remove/show the generic dynamic events\n" 5716 "\t\t\t Write into this file to define/undefine new trace events.\n" 5717 #endif 5718 #ifdef CONFIG_KPROBE_EVENTS 5719 " kprobe_events\t\t- Create/append/remove/show the kernel dynamic events\n" 5720 "\t\t\t Write into this file to define/undefine new trace events.\n" 5721 #endif 5722 #ifdef CONFIG_UPROBE_EVENTS 5723 " uprobe_events\t\t- Create/append/remove/show the userspace dynamic events\n" 5724 "\t\t\t Write into this file to define/undefine new trace events.\n" 5725 #endif 5726 #if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS) || \ 5727 defined(CONFIG_FPROBE_EVENTS) 5728 "\t accepts: event-definitions (one definition per line)\n" 5729 #if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS) 5730 "\t Format: p[:[<group>/][<event>]] <place> [<args>]\n" 5731 "\t r[maxactive][:[<group>/][<event>]] <place> [<args>]\n" 5732 #endif 5733 #ifdef CONFIG_FPROBE_EVENTS 5734 "\t f[:[<group>/][<event>]] <func-name>[%return] [<args>]\n" 5735 "\t t[:[<group>/][<event>]] <tracepoint> [<args>]\n" 5736 #endif 5737 #ifdef CONFIG_HIST_TRIGGERS 5738 "\t s:[synthetic/]<event> <field> [<field>]\n" 5739 #endif 5740 "\t e[:[<group>/][<event>]] <attached-group>.<attached-event> [<args>] [if <filter>]\n" 5741 "\t -:[<group>/][<event>]\n" 5742 #ifdef CONFIG_KPROBE_EVENTS 5743 "\t place: [<module>:]<symbol>[+<offset>]|<memaddr>\n" 5744 "place (kretprobe): [<module>:]<symbol>[+<offset>]%return|<memaddr>\n" 5745 #endif 5746 #ifdef CONFIG_UPROBE_EVENTS 5747 " place (uprobe): <path>:<offset>[%return][(ref_ctr_offset)]\n" 5748 #endif 5749 "\t args: <name>=fetcharg[:type]\n" 5750 "\t fetcharg: (%<register>|$<efield>), @<address>, @<symbol>[+|-<offset>],\n" 5751 #ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API 5752 #ifdef CONFIG_PROBE_EVENTS_BTF_ARGS 5753 "\t $stack<index>, $stack, $retval, $comm, $arg<N>,\n" 5754 "\t <argname>[->field[->field|.field...]],\n" 5755 #else 5756 "\t $stack<index>, $stack, $retval, $comm, $arg<N>,\n" 5757 #endif 5758 #else 5759 "\t $stack<index>, $stack, $retval, $comm,\n" 5760 #endif 5761 "\t +|-[u]<offset>(<fetcharg>), \\imm-value, \\\"imm-string\"\n" 5762 "\t type: s8/16/32/64, u8/16/32/64, x8/16/32/64, char, string, symbol,\n" 5763 "\t b<bit-width>@<bit-offset>/<container-size>, ustring,\n" 5764 "\t symstr, <type>\\[<array-size>\\]\n" 5765 #ifdef CONFIG_HIST_TRIGGERS 5766 "\t field: <stype> <name>;\n" 5767 "\t stype: u8/u16/u32/u64, s8/s16/s32/s64, pid_t,\n" 5768 "\t [unsigned] char/int/long\n" 5769 #endif 5770 "\t efield: For event probes ('e' types), the field is on of the fields\n" 5771 "\t of the <attached-group>/<attached-event>.\n" 5772 #endif 5773 " events/\t\t- Directory containing all trace event subsystems:\n" 5774 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n" 5775 " events/<system>/\t- Directory containing all trace events for <system>:\n" 5776 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n" 5777 "\t\t\t events\n" 5778 " filter\t\t- If set, only events passing filter are traced\n" 5779 " events/<system>/<event>/\t- Directory containing control files for\n" 5780 "\t\t\t <event>:\n" 5781 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n" 5782 " filter\t\t- If set, only events passing filter are traced\n" 5783 " trigger\t\t- If set, a command to perform when event is hit\n" 5784 "\t Format: <trigger>[:count][if <filter>]\n" 5785 "\t trigger: traceon, traceoff\n" 5786 "\t enable_event:<system>:<event>\n" 5787 "\t disable_event:<system>:<event>\n" 5788 #ifdef CONFIG_HIST_TRIGGERS 5789 "\t enable_hist:<system>:<event>\n" 5790 "\t disable_hist:<system>:<event>\n" 5791 #endif 5792 #ifdef CONFIG_STACKTRACE 5793 "\t\t stacktrace\n" 5794 #endif 5795 #ifdef CONFIG_TRACER_SNAPSHOT 5796 "\t\t snapshot\n" 5797 #endif 5798 #ifdef CONFIG_HIST_TRIGGERS 5799 "\t\t hist (see below)\n" 5800 #endif 5801 "\t example: echo traceoff > events/block/block_unplug/trigger\n" 5802 "\t echo traceoff:3 > events/block/block_unplug/trigger\n" 5803 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n" 5804 "\t events/block/block_unplug/trigger\n" 5805 "\t The first disables tracing every time block_unplug is hit.\n" 5806 "\t The second disables tracing the first 3 times block_unplug is hit.\n" 5807 "\t The third enables the kmalloc event the first 3 times block_unplug\n" 5808 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n" 5809 "\t Like function triggers, the counter is only decremented if it\n" 5810 "\t enabled or disabled tracing.\n" 5811 "\t To remove a trigger without a count:\n" 5812 "\t echo '!<trigger> > <system>/<event>/trigger\n" 5813 "\t To remove a trigger with a count:\n" 5814 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n" 5815 "\t Filters can be ignored when removing a trigger.\n" 5816 #ifdef CONFIG_HIST_TRIGGERS 5817 " hist trigger\t- If set, event hits are aggregated into a hash table\n" 5818 "\t Format: hist:keys=<field1[,field2,...]>\n" 5819 "\t [:<var1>=<field|var_ref|numeric_literal>[,<var2>=...]]\n" 5820 "\t [:values=<field1[,field2,...]>]\n" 5821 "\t [:sort=<field1[,field2,...]>]\n" 5822 "\t [:size=#entries]\n" 5823 "\t [:pause][:continue][:clear]\n" 5824 "\t [:name=histname1]\n" 5825 "\t [:nohitcount]\n" 5826 "\t [:<handler>.<action>]\n" 5827 "\t [if <filter>]\n\n" 5828 "\t Note, special fields can be used as well:\n" 5829 "\t common_timestamp - to record current timestamp\n" 5830 "\t common_cpu - to record the CPU the event happened on\n" 5831 "\n" 5832 "\t A hist trigger variable can be:\n" 5833 "\t - a reference to a field e.g. x=current_timestamp,\n" 5834 "\t - a reference to another variable e.g. y=$x,\n" 5835 "\t - a numeric literal: e.g. ms_per_sec=1000,\n" 5836 "\t - an arithmetic expression: e.g. time_secs=current_timestamp/1000\n" 5837 "\n" 5838 "\t hist trigger arithmetic expressions support addition(+), subtraction(-),\n" 5839 "\t multiplication(*) and division(/) operators. An operand can be either a\n" 5840 "\t variable reference, field or numeric literal.\n" 5841 "\n" 5842 "\t When a matching event is hit, an entry is added to a hash\n" 5843 "\t table using the key(s) and value(s) named, and the value of a\n" 5844 "\t sum called 'hitcount' is incremented. Keys and values\n" 5845 "\t correspond to fields in the event's format description. Keys\n" 5846 "\t can be any field, or the special string 'common_stacktrace'.\n" 5847 "\t Compound keys consisting of up to two fields can be specified\n" 5848 "\t by the 'keys' keyword. Values must correspond to numeric\n" 5849 "\t fields. Sort keys consisting of up to two fields can be\n" 5850 "\t specified using the 'sort' keyword. The sort direction can\n" 5851 "\t be modified by appending '.descending' or '.ascending' to a\n" 5852 "\t sort field. The 'size' parameter can be used to specify more\n" 5853 "\t or fewer than the default 2048 entries for the hashtable size.\n" 5854 "\t If a hist trigger is given a name using the 'name' parameter,\n" 5855 "\t its histogram data will be shared with other triggers of the\n" 5856 "\t same name, and trigger hits will update this common data.\n\n" 5857 "\t Reading the 'hist' file for the event will dump the hash\n" 5858 "\t table in its entirety to stdout. If there are multiple hist\n" 5859 "\t triggers attached to an event, there will be a table for each\n" 5860 "\t trigger in the output. The table displayed for a named\n" 5861 "\t trigger will be the same as any other instance having the\n" 5862 "\t same name. The default format used to display a given field\n" 5863 "\t can be modified by appending any of the following modifiers\n" 5864 "\t to the field name, as applicable:\n\n" 5865 "\t .hex display a number as a hex value\n" 5866 "\t .sym display an address as a symbol\n" 5867 "\t .sym-offset display an address as a symbol and offset\n" 5868 "\t .execname display a common_pid as a program name\n" 5869 "\t .syscall display a syscall id as a syscall name\n" 5870 "\t .log2 display log2 value rather than raw number\n" 5871 "\t .buckets=size display values in groups of size rather than raw number\n" 5872 "\t .usecs display a common_timestamp in microseconds\n" 5873 "\t .percent display a number of percentage value\n" 5874 "\t .graph display a bar-graph of a value\n\n" 5875 "\t The 'pause' parameter can be used to pause an existing hist\n" 5876 "\t trigger or to start a hist trigger but not log any events\n" 5877 "\t until told to do so. 'continue' can be used to start or\n" 5878 "\t restart a paused hist trigger.\n\n" 5879 "\t The 'clear' parameter will clear the contents of a running\n" 5880 "\t hist trigger and leave its current paused/active state\n" 5881 "\t unchanged.\n\n" 5882 "\t The 'nohitcount' (or NOHC) parameter will suppress display of\n" 5883 "\t raw hitcount in the histogram.\n\n" 5884 "\t The enable_hist and disable_hist triggers can be used to\n" 5885 "\t have one event conditionally start and stop another event's\n" 5886 "\t already-attached hist trigger. The syntax is analogous to\n" 5887 "\t the enable_event and disable_event triggers.\n\n" 5888 "\t Hist trigger handlers and actions are executed whenever a\n" 5889 "\t a histogram entry is added or updated. They take the form:\n\n" 5890 "\t <handler>.<action>\n\n" 5891 "\t The available handlers are:\n\n" 5892 "\t onmatch(matching.event) - invoke on addition or update\n" 5893 "\t onmax(var) - invoke if var exceeds current max\n" 5894 "\t onchange(var) - invoke action if var changes\n\n" 5895 "\t The available actions are:\n\n" 5896 "\t trace(<synthetic_event>,param list) - generate synthetic event\n" 5897 "\t save(field,...) - save current event fields\n" 5898 #ifdef CONFIG_TRACER_SNAPSHOT 5899 "\t snapshot() - snapshot the trace buffer\n\n" 5900 #endif 5901 #ifdef CONFIG_SYNTH_EVENTS 5902 " events/synthetic_events\t- Create/append/remove/show synthetic events\n" 5903 "\t Write into this file to define/undefine new synthetic events.\n" 5904 "\t example: echo 'myevent u64 lat; char name[]; long[] stack' >> synthetic_events\n" 5905 #endif 5906 #endif 5907 ; 5908 5909 static ssize_t 5910 tracing_readme_read(struct file *filp, char __user *ubuf, 5911 size_t cnt, loff_t *ppos) 5912 { 5913 return simple_read_from_buffer(ubuf, cnt, ppos, 5914 readme_msg, strlen(readme_msg)); 5915 } 5916 5917 static const struct file_operations tracing_readme_fops = { 5918 .open = tracing_open_generic, 5919 .read = tracing_readme_read, 5920 .llseek = generic_file_llseek, 5921 }; 5922 5923 static void *saved_tgids_next(struct seq_file *m, void *v, loff_t *pos) 5924 { 5925 int pid = ++(*pos); 5926 5927 return trace_find_tgid_ptr(pid); 5928 } 5929 5930 static void *saved_tgids_start(struct seq_file *m, loff_t *pos) 5931 { 5932 int pid = *pos; 5933 5934 return trace_find_tgid_ptr(pid); 5935 } 5936 5937 static void saved_tgids_stop(struct seq_file *m, void *v) 5938 { 5939 } 5940 5941 static int saved_tgids_show(struct seq_file *m, void *v) 5942 { 5943 int *entry = (int *)v; 5944 int pid = entry - tgid_map; 5945 int tgid = *entry; 5946 5947 if (tgid == 0) 5948 return SEQ_SKIP; 5949 5950 seq_printf(m, "%d %d\n", pid, tgid); 5951 return 0; 5952 } 5953 5954 static const struct seq_operations tracing_saved_tgids_seq_ops = { 5955 .start = saved_tgids_start, 5956 .stop = saved_tgids_stop, 5957 .next = saved_tgids_next, 5958 .show = saved_tgids_show, 5959 }; 5960 5961 static int tracing_saved_tgids_open(struct inode *inode, struct file *filp) 5962 { 5963 int ret; 5964 5965 ret = tracing_check_open_get_tr(NULL); 5966 if (ret) 5967 return ret; 5968 5969 return seq_open(filp, &tracing_saved_tgids_seq_ops); 5970 } 5971 5972 5973 static const struct file_operations tracing_saved_tgids_fops = { 5974 .open = tracing_saved_tgids_open, 5975 .read = seq_read, 5976 .llseek = seq_lseek, 5977 .release = seq_release, 5978 }; 5979 5980 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos) 5981 { 5982 unsigned int *ptr = v; 5983 5984 if (*pos || m->count) 5985 ptr++; 5986 5987 (*pos)++; 5988 5989 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num]; 5990 ptr++) { 5991 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP) 5992 continue; 5993 5994 return ptr; 5995 } 5996 5997 return NULL; 5998 } 5999 6000 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos) 6001 { 6002 void *v; 6003 loff_t l = 0; 6004 6005 preempt_disable(); 6006 arch_spin_lock(&trace_cmdline_lock); 6007 6008 v = &savedcmd->map_cmdline_to_pid[0]; 6009 while (l <= *pos) { 6010 v = saved_cmdlines_next(m, v, &l); 6011 if (!v) 6012 return NULL; 6013 } 6014 6015 return v; 6016 } 6017 6018 static void saved_cmdlines_stop(struct seq_file *m, void *v) 6019 { 6020 arch_spin_unlock(&trace_cmdline_lock); 6021 preempt_enable(); 6022 } 6023 6024 static int saved_cmdlines_show(struct seq_file *m, void *v) 6025 { 6026 char buf[TASK_COMM_LEN]; 6027 unsigned int *pid = v; 6028 6029 __trace_find_cmdline(*pid, buf); 6030 seq_printf(m, "%d %s\n", *pid, buf); 6031 return 0; 6032 } 6033 6034 static const struct seq_operations tracing_saved_cmdlines_seq_ops = { 6035 .start = saved_cmdlines_start, 6036 .next = saved_cmdlines_next, 6037 .stop = saved_cmdlines_stop, 6038 .show = saved_cmdlines_show, 6039 }; 6040 6041 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp) 6042 { 6043 int ret; 6044 6045 ret = tracing_check_open_get_tr(NULL); 6046 if (ret) 6047 return ret; 6048 6049 return seq_open(filp, &tracing_saved_cmdlines_seq_ops); 6050 } 6051 6052 static const struct file_operations tracing_saved_cmdlines_fops = { 6053 .open = tracing_saved_cmdlines_open, 6054 .read = seq_read, 6055 .llseek = seq_lseek, 6056 .release = seq_release, 6057 }; 6058 6059 static ssize_t 6060 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf, 6061 size_t cnt, loff_t *ppos) 6062 { 6063 char buf[64]; 6064 int r; 6065 6066 preempt_disable(); 6067 arch_spin_lock(&trace_cmdline_lock); 6068 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num); 6069 arch_spin_unlock(&trace_cmdline_lock); 6070 preempt_enable(); 6071 6072 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 6073 } 6074 6075 static int tracing_resize_saved_cmdlines(unsigned int val) 6076 { 6077 struct saved_cmdlines_buffer *s, *savedcmd_temp; 6078 6079 s = allocate_cmdlines_buffer(val); 6080 if (!s) 6081 return -ENOMEM; 6082 6083 preempt_disable(); 6084 arch_spin_lock(&trace_cmdline_lock); 6085 savedcmd_temp = savedcmd; 6086 savedcmd = s; 6087 arch_spin_unlock(&trace_cmdline_lock); 6088 preempt_enable(); 6089 free_saved_cmdlines_buffer(savedcmd_temp); 6090 6091 return 0; 6092 } 6093 6094 static ssize_t 6095 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf, 6096 size_t cnt, loff_t *ppos) 6097 { 6098 unsigned long val; 6099 int ret; 6100 6101 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6102 if (ret) 6103 return ret; 6104 6105 /* must have at least 1 entry or less than PID_MAX_DEFAULT */ 6106 if (!val || val > PID_MAX_DEFAULT) 6107 return -EINVAL; 6108 6109 ret = tracing_resize_saved_cmdlines((unsigned int)val); 6110 if (ret < 0) 6111 return ret; 6112 6113 *ppos += cnt; 6114 6115 return cnt; 6116 } 6117 6118 static const struct file_operations tracing_saved_cmdlines_size_fops = { 6119 .open = tracing_open_generic, 6120 .read = tracing_saved_cmdlines_size_read, 6121 .write = tracing_saved_cmdlines_size_write, 6122 }; 6123 6124 #ifdef CONFIG_TRACE_EVAL_MAP_FILE 6125 static union trace_eval_map_item * 6126 update_eval_map(union trace_eval_map_item *ptr) 6127 { 6128 if (!ptr->map.eval_string) { 6129 if (ptr->tail.next) { 6130 ptr = ptr->tail.next; 6131 /* Set ptr to the next real item (skip head) */ 6132 ptr++; 6133 } else 6134 return NULL; 6135 } 6136 return ptr; 6137 } 6138 6139 static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos) 6140 { 6141 union trace_eval_map_item *ptr = v; 6142 6143 /* 6144 * Paranoid! If ptr points to end, we don't want to increment past it. 6145 * This really should never happen. 6146 */ 6147 (*pos)++; 6148 ptr = update_eval_map(ptr); 6149 if (WARN_ON_ONCE(!ptr)) 6150 return NULL; 6151 6152 ptr++; 6153 ptr = update_eval_map(ptr); 6154 6155 return ptr; 6156 } 6157 6158 static void *eval_map_start(struct seq_file *m, loff_t *pos) 6159 { 6160 union trace_eval_map_item *v; 6161 loff_t l = 0; 6162 6163 mutex_lock(&trace_eval_mutex); 6164 6165 v = trace_eval_maps; 6166 if (v) 6167 v++; 6168 6169 while (v && l < *pos) { 6170 v = eval_map_next(m, v, &l); 6171 } 6172 6173 return v; 6174 } 6175 6176 static void eval_map_stop(struct seq_file *m, void *v) 6177 { 6178 mutex_unlock(&trace_eval_mutex); 6179 } 6180 6181 static int eval_map_show(struct seq_file *m, void *v) 6182 { 6183 union trace_eval_map_item *ptr = v; 6184 6185 seq_printf(m, "%s %ld (%s)\n", 6186 ptr->map.eval_string, ptr->map.eval_value, 6187 ptr->map.system); 6188 6189 return 0; 6190 } 6191 6192 static const struct seq_operations tracing_eval_map_seq_ops = { 6193 .start = eval_map_start, 6194 .next = eval_map_next, 6195 .stop = eval_map_stop, 6196 .show = eval_map_show, 6197 }; 6198 6199 static int tracing_eval_map_open(struct inode *inode, struct file *filp) 6200 { 6201 int ret; 6202 6203 ret = tracing_check_open_get_tr(NULL); 6204 if (ret) 6205 return ret; 6206 6207 return seq_open(filp, &tracing_eval_map_seq_ops); 6208 } 6209 6210 static const struct file_operations tracing_eval_map_fops = { 6211 .open = tracing_eval_map_open, 6212 .read = seq_read, 6213 .llseek = seq_lseek, 6214 .release = seq_release, 6215 }; 6216 6217 static inline union trace_eval_map_item * 6218 trace_eval_jmp_to_tail(union trace_eval_map_item *ptr) 6219 { 6220 /* Return tail of array given the head */ 6221 return ptr + ptr->head.length + 1; 6222 } 6223 6224 static void 6225 trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start, 6226 int len) 6227 { 6228 struct trace_eval_map **stop; 6229 struct trace_eval_map **map; 6230 union trace_eval_map_item *map_array; 6231 union trace_eval_map_item *ptr; 6232 6233 stop = start + len; 6234 6235 /* 6236 * The trace_eval_maps contains the map plus a head and tail item, 6237 * where the head holds the module and length of array, and the 6238 * tail holds a pointer to the next list. 6239 */ 6240 map_array = kmalloc_array(len + 2, sizeof(*map_array), GFP_KERNEL); 6241 if (!map_array) { 6242 pr_warn("Unable to allocate trace eval mapping\n"); 6243 return; 6244 } 6245 6246 mutex_lock(&trace_eval_mutex); 6247 6248 if (!trace_eval_maps) 6249 trace_eval_maps = map_array; 6250 else { 6251 ptr = trace_eval_maps; 6252 for (;;) { 6253 ptr = trace_eval_jmp_to_tail(ptr); 6254 if (!ptr->tail.next) 6255 break; 6256 ptr = ptr->tail.next; 6257 6258 } 6259 ptr->tail.next = map_array; 6260 } 6261 map_array->head.mod = mod; 6262 map_array->head.length = len; 6263 map_array++; 6264 6265 for (map = start; (unsigned long)map < (unsigned long)stop; map++) { 6266 map_array->map = **map; 6267 map_array++; 6268 } 6269 memset(map_array, 0, sizeof(*map_array)); 6270 6271 mutex_unlock(&trace_eval_mutex); 6272 } 6273 6274 static void trace_create_eval_file(struct dentry *d_tracer) 6275 { 6276 trace_create_file("eval_map", TRACE_MODE_READ, d_tracer, 6277 NULL, &tracing_eval_map_fops); 6278 } 6279 6280 #else /* CONFIG_TRACE_EVAL_MAP_FILE */ 6281 static inline void trace_create_eval_file(struct dentry *d_tracer) { } 6282 static inline void trace_insert_eval_map_file(struct module *mod, 6283 struct trace_eval_map **start, int len) { } 6284 #endif /* !CONFIG_TRACE_EVAL_MAP_FILE */ 6285 6286 static void trace_insert_eval_map(struct module *mod, 6287 struct trace_eval_map **start, int len) 6288 { 6289 struct trace_eval_map **map; 6290 6291 if (len <= 0) 6292 return; 6293 6294 map = start; 6295 6296 trace_event_eval_update(map, len); 6297 6298 trace_insert_eval_map_file(mod, start, len); 6299 } 6300 6301 static ssize_t 6302 tracing_set_trace_read(struct file *filp, char __user *ubuf, 6303 size_t cnt, loff_t *ppos) 6304 { 6305 struct trace_array *tr = filp->private_data; 6306 char buf[MAX_TRACER_SIZE+2]; 6307 int r; 6308 6309 mutex_lock(&trace_types_lock); 6310 r = sprintf(buf, "%s\n", tr->current_trace->name); 6311 mutex_unlock(&trace_types_lock); 6312 6313 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 6314 } 6315 6316 int tracer_init(struct tracer *t, struct trace_array *tr) 6317 { 6318 tracing_reset_online_cpus(&tr->array_buffer); 6319 return t->init(tr); 6320 } 6321 6322 static void set_buffer_entries(struct array_buffer *buf, unsigned long val) 6323 { 6324 int cpu; 6325 6326 for_each_tracing_cpu(cpu) 6327 per_cpu_ptr(buf->data, cpu)->entries = val; 6328 } 6329 6330 static void update_buffer_entries(struct array_buffer *buf, int cpu) 6331 { 6332 if (cpu == RING_BUFFER_ALL_CPUS) { 6333 set_buffer_entries(buf, ring_buffer_size(buf->buffer, 0)); 6334 } else { 6335 per_cpu_ptr(buf->data, cpu)->entries = ring_buffer_size(buf->buffer, cpu); 6336 } 6337 } 6338 6339 #ifdef CONFIG_TRACER_MAX_TRACE 6340 /* resize @tr's buffer to the size of @size_tr's entries */ 6341 static int resize_buffer_duplicate_size(struct array_buffer *trace_buf, 6342 struct array_buffer *size_buf, int cpu_id) 6343 { 6344 int cpu, ret = 0; 6345 6346 if (cpu_id == RING_BUFFER_ALL_CPUS) { 6347 for_each_tracing_cpu(cpu) { 6348 ret = ring_buffer_resize(trace_buf->buffer, 6349 per_cpu_ptr(size_buf->data, cpu)->entries, cpu); 6350 if (ret < 0) 6351 break; 6352 per_cpu_ptr(trace_buf->data, cpu)->entries = 6353 per_cpu_ptr(size_buf->data, cpu)->entries; 6354 } 6355 } else { 6356 ret = ring_buffer_resize(trace_buf->buffer, 6357 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id); 6358 if (ret == 0) 6359 per_cpu_ptr(trace_buf->data, cpu_id)->entries = 6360 per_cpu_ptr(size_buf->data, cpu_id)->entries; 6361 } 6362 6363 return ret; 6364 } 6365 #endif /* CONFIG_TRACER_MAX_TRACE */ 6366 6367 static int __tracing_resize_ring_buffer(struct trace_array *tr, 6368 unsigned long size, int cpu) 6369 { 6370 int ret; 6371 6372 /* 6373 * If kernel or user changes the size of the ring buffer 6374 * we use the size that was given, and we can forget about 6375 * expanding it later. 6376 */ 6377 ring_buffer_expanded = true; 6378 6379 /* May be called before buffers are initialized */ 6380 if (!tr->array_buffer.buffer) 6381 return 0; 6382 6383 /* Do not allow tracing while resizing ring buffer */ 6384 tracing_stop_tr(tr); 6385 6386 ret = ring_buffer_resize(tr->array_buffer.buffer, size, cpu); 6387 if (ret < 0) 6388 goto out_start; 6389 6390 #ifdef CONFIG_TRACER_MAX_TRACE 6391 if (!tr->allocated_snapshot) 6392 goto out; 6393 6394 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); 6395 if (ret < 0) { 6396 int r = resize_buffer_duplicate_size(&tr->array_buffer, 6397 &tr->array_buffer, cpu); 6398 if (r < 0) { 6399 /* 6400 * AARGH! We are left with different 6401 * size max buffer!!!! 6402 * The max buffer is our "snapshot" buffer. 6403 * When a tracer needs a snapshot (one of the 6404 * latency tracers), it swaps the max buffer 6405 * with the saved snap shot. We succeeded to 6406 * update the size of the main buffer, but failed to 6407 * update the size of the max buffer. But when we tried 6408 * to reset the main buffer to the original size, we 6409 * failed there too. This is very unlikely to 6410 * happen, but if it does, warn and kill all 6411 * tracing. 6412 */ 6413 WARN_ON(1); 6414 tracing_disabled = 1; 6415 } 6416 goto out_start; 6417 } 6418 6419 update_buffer_entries(&tr->max_buffer, cpu); 6420 6421 out: 6422 #endif /* CONFIG_TRACER_MAX_TRACE */ 6423 6424 update_buffer_entries(&tr->array_buffer, cpu); 6425 out_start: 6426 tracing_start_tr(tr); 6427 return ret; 6428 } 6429 6430 ssize_t tracing_resize_ring_buffer(struct trace_array *tr, 6431 unsigned long size, int cpu_id) 6432 { 6433 int ret; 6434 6435 mutex_lock(&trace_types_lock); 6436 6437 if (cpu_id != RING_BUFFER_ALL_CPUS) { 6438 /* make sure, this cpu is enabled in the mask */ 6439 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) { 6440 ret = -EINVAL; 6441 goto out; 6442 } 6443 } 6444 6445 ret = __tracing_resize_ring_buffer(tr, size, cpu_id); 6446 if (ret < 0) 6447 ret = -ENOMEM; 6448 6449 out: 6450 mutex_unlock(&trace_types_lock); 6451 6452 return ret; 6453 } 6454 6455 6456 /** 6457 * tracing_update_buffers - used by tracing facility to expand ring buffers 6458 * 6459 * To save on memory when the tracing is never used on a system with it 6460 * configured in. The ring buffers are set to a minimum size. But once 6461 * a user starts to use the tracing facility, then they need to grow 6462 * to their default size. 6463 * 6464 * This function is to be called when a tracer is about to be used. 6465 */ 6466 int tracing_update_buffers(void) 6467 { 6468 int ret = 0; 6469 6470 mutex_lock(&trace_types_lock); 6471 if (!ring_buffer_expanded) 6472 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size, 6473 RING_BUFFER_ALL_CPUS); 6474 mutex_unlock(&trace_types_lock); 6475 6476 return ret; 6477 } 6478 6479 struct trace_option_dentry; 6480 6481 static void 6482 create_trace_option_files(struct trace_array *tr, struct tracer *tracer); 6483 6484 /* 6485 * Used to clear out the tracer before deletion of an instance. 6486 * Must have trace_types_lock held. 6487 */ 6488 static void tracing_set_nop(struct trace_array *tr) 6489 { 6490 if (tr->current_trace == &nop_trace) 6491 return; 6492 6493 tr->current_trace->enabled--; 6494 6495 if (tr->current_trace->reset) 6496 tr->current_trace->reset(tr); 6497 6498 tr->current_trace = &nop_trace; 6499 } 6500 6501 static bool tracer_options_updated; 6502 6503 static void add_tracer_options(struct trace_array *tr, struct tracer *t) 6504 { 6505 /* Only enable if the directory has been created already. */ 6506 if (!tr->dir) 6507 return; 6508 6509 /* Only create trace option files after update_tracer_options finish */ 6510 if (!tracer_options_updated) 6511 return; 6512 6513 create_trace_option_files(tr, t); 6514 } 6515 6516 int tracing_set_tracer(struct trace_array *tr, const char *buf) 6517 { 6518 struct tracer *t; 6519 #ifdef CONFIG_TRACER_MAX_TRACE 6520 bool had_max_tr; 6521 #endif 6522 int ret = 0; 6523 6524 mutex_lock(&trace_types_lock); 6525 6526 if (!ring_buffer_expanded) { 6527 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, 6528 RING_BUFFER_ALL_CPUS); 6529 if (ret < 0) 6530 goto out; 6531 ret = 0; 6532 } 6533 6534 for (t = trace_types; t; t = t->next) { 6535 if (strcmp(t->name, buf) == 0) 6536 break; 6537 } 6538 if (!t) { 6539 ret = -EINVAL; 6540 goto out; 6541 } 6542 if (t == tr->current_trace) 6543 goto out; 6544 6545 #ifdef CONFIG_TRACER_SNAPSHOT 6546 if (t->use_max_tr) { 6547 local_irq_disable(); 6548 arch_spin_lock(&tr->max_lock); 6549 if (tr->cond_snapshot) 6550 ret = -EBUSY; 6551 arch_spin_unlock(&tr->max_lock); 6552 local_irq_enable(); 6553 if (ret) 6554 goto out; 6555 } 6556 #endif 6557 /* Some tracers won't work on kernel command line */ 6558 if (system_state < SYSTEM_RUNNING && t->noboot) { 6559 pr_warn("Tracer '%s' is not allowed on command line, ignored\n", 6560 t->name); 6561 goto out; 6562 } 6563 6564 /* Some tracers are only allowed for the top level buffer */ 6565 if (!trace_ok_for_array(t, tr)) { 6566 ret = -EINVAL; 6567 goto out; 6568 } 6569 6570 /* If trace pipe files are being read, we can't change the tracer */ 6571 if (tr->trace_ref) { 6572 ret = -EBUSY; 6573 goto out; 6574 } 6575 6576 trace_branch_disable(); 6577 6578 tr->current_trace->enabled--; 6579 6580 if (tr->current_trace->reset) 6581 tr->current_trace->reset(tr); 6582 6583 #ifdef CONFIG_TRACER_MAX_TRACE 6584 had_max_tr = tr->current_trace->use_max_tr; 6585 6586 /* Current trace needs to be nop_trace before synchronize_rcu */ 6587 tr->current_trace = &nop_trace; 6588 6589 if (had_max_tr && !t->use_max_tr) { 6590 /* 6591 * We need to make sure that the update_max_tr sees that 6592 * current_trace changed to nop_trace to keep it from 6593 * swapping the buffers after we resize it. 6594 * The update_max_tr is called from interrupts disabled 6595 * so a synchronized_sched() is sufficient. 6596 */ 6597 synchronize_rcu(); 6598 free_snapshot(tr); 6599 } 6600 6601 if (t->use_max_tr && !tr->allocated_snapshot) { 6602 ret = tracing_alloc_snapshot_instance(tr); 6603 if (ret < 0) 6604 goto out; 6605 } 6606 #else 6607 tr->current_trace = &nop_trace; 6608 #endif 6609 6610 if (t->init) { 6611 ret = tracer_init(t, tr); 6612 if (ret) 6613 goto out; 6614 } 6615 6616 tr->current_trace = t; 6617 tr->current_trace->enabled++; 6618 trace_branch_enable(tr); 6619 out: 6620 mutex_unlock(&trace_types_lock); 6621 6622 return ret; 6623 } 6624 6625 static ssize_t 6626 tracing_set_trace_write(struct file *filp, const char __user *ubuf, 6627 size_t cnt, loff_t *ppos) 6628 { 6629 struct trace_array *tr = filp->private_data; 6630 char buf[MAX_TRACER_SIZE+1]; 6631 char *name; 6632 size_t ret; 6633 int err; 6634 6635 ret = cnt; 6636 6637 if (cnt > MAX_TRACER_SIZE) 6638 cnt = MAX_TRACER_SIZE; 6639 6640 if (copy_from_user(buf, ubuf, cnt)) 6641 return -EFAULT; 6642 6643 buf[cnt] = 0; 6644 6645 name = strim(buf); 6646 6647 err = tracing_set_tracer(tr, name); 6648 if (err) 6649 return err; 6650 6651 *ppos += ret; 6652 6653 return ret; 6654 } 6655 6656 static ssize_t 6657 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf, 6658 size_t cnt, loff_t *ppos) 6659 { 6660 char buf[64]; 6661 int r; 6662 6663 r = snprintf(buf, sizeof(buf), "%ld\n", 6664 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr)); 6665 if (r > sizeof(buf)) 6666 r = sizeof(buf); 6667 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 6668 } 6669 6670 static ssize_t 6671 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf, 6672 size_t cnt, loff_t *ppos) 6673 { 6674 unsigned long val; 6675 int ret; 6676 6677 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6678 if (ret) 6679 return ret; 6680 6681 *ptr = val * 1000; 6682 6683 return cnt; 6684 } 6685 6686 static ssize_t 6687 tracing_thresh_read(struct file *filp, char __user *ubuf, 6688 size_t cnt, loff_t *ppos) 6689 { 6690 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos); 6691 } 6692 6693 static ssize_t 6694 tracing_thresh_write(struct file *filp, const char __user *ubuf, 6695 size_t cnt, loff_t *ppos) 6696 { 6697 struct trace_array *tr = filp->private_data; 6698 int ret; 6699 6700 mutex_lock(&trace_types_lock); 6701 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos); 6702 if (ret < 0) 6703 goto out; 6704 6705 if (tr->current_trace->update_thresh) { 6706 ret = tr->current_trace->update_thresh(tr); 6707 if (ret < 0) 6708 goto out; 6709 } 6710 6711 ret = cnt; 6712 out: 6713 mutex_unlock(&trace_types_lock); 6714 6715 return ret; 6716 } 6717 6718 #ifdef CONFIG_TRACER_MAX_TRACE 6719 6720 static ssize_t 6721 tracing_max_lat_read(struct file *filp, char __user *ubuf, 6722 size_t cnt, loff_t *ppos) 6723 { 6724 struct trace_array *tr = filp->private_data; 6725 6726 return tracing_nsecs_read(&tr->max_latency, ubuf, cnt, ppos); 6727 } 6728 6729 static ssize_t 6730 tracing_max_lat_write(struct file *filp, const char __user *ubuf, 6731 size_t cnt, loff_t *ppos) 6732 { 6733 struct trace_array *tr = filp->private_data; 6734 6735 return tracing_nsecs_write(&tr->max_latency, ubuf, cnt, ppos); 6736 } 6737 6738 #endif 6739 6740 static int open_pipe_on_cpu(struct trace_array *tr, int cpu) 6741 { 6742 if (cpu == RING_BUFFER_ALL_CPUS) { 6743 if (cpumask_empty(tr->pipe_cpumask)) { 6744 cpumask_setall(tr->pipe_cpumask); 6745 return 0; 6746 } 6747 } else if (!cpumask_test_cpu(cpu, tr->pipe_cpumask)) { 6748 cpumask_set_cpu(cpu, tr->pipe_cpumask); 6749 return 0; 6750 } 6751 return -EBUSY; 6752 } 6753 6754 static void close_pipe_on_cpu(struct trace_array *tr, int cpu) 6755 { 6756 if (cpu == RING_BUFFER_ALL_CPUS) { 6757 WARN_ON(!cpumask_full(tr->pipe_cpumask)); 6758 cpumask_clear(tr->pipe_cpumask); 6759 } else { 6760 WARN_ON(!cpumask_test_cpu(cpu, tr->pipe_cpumask)); 6761 cpumask_clear_cpu(cpu, tr->pipe_cpumask); 6762 } 6763 } 6764 6765 static int tracing_open_pipe(struct inode *inode, struct file *filp) 6766 { 6767 struct trace_array *tr = inode->i_private; 6768 struct trace_iterator *iter; 6769 int cpu; 6770 int ret; 6771 6772 ret = tracing_check_open_get_tr(tr); 6773 if (ret) 6774 return ret; 6775 6776 mutex_lock(&trace_types_lock); 6777 cpu = tracing_get_cpu(inode); 6778 ret = open_pipe_on_cpu(tr, cpu); 6779 if (ret) 6780 goto fail_pipe_on_cpu; 6781 6782 /* create a buffer to store the information to pass to userspace */ 6783 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 6784 if (!iter) { 6785 ret = -ENOMEM; 6786 goto fail_alloc_iter; 6787 } 6788 6789 trace_seq_init(&iter->seq); 6790 iter->trace = tr->current_trace; 6791 6792 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) { 6793 ret = -ENOMEM; 6794 goto fail; 6795 } 6796 6797 /* trace pipe does not show start of buffer */ 6798 cpumask_setall(iter->started); 6799 6800 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) 6801 iter->iter_flags |= TRACE_FILE_LAT_FMT; 6802 6803 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 6804 if (trace_clocks[tr->clock_id].in_ns) 6805 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 6806 6807 iter->tr = tr; 6808 iter->array_buffer = &tr->array_buffer; 6809 iter->cpu_file = cpu; 6810 mutex_init(&iter->mutex); 6811 filp->private_data = iter; 6812 6813 if (iter->trace->pipe_open) 6814 iter->trace->pipe_open(iter); 6815 6816 nonseekable_open(inode, filp); 6817 6818 tr->trace_ref++; 6819 6820 mutex_unlock(&trace_types_lock); 6821 return ret; 6822 6823 fail: 6824 kfree(iter); 6825 fail_alloc_iter: 6826 close_pipe_on_cpu(tr, cpu); 6827 fail_pipe_on_cpu: 6828 __trace_array_put(tr); 6829 mutex_unlock(&trace_types_lock); 6830 return ret; 6831 } 6832 6833 static int tracing_release_pipe(struct inode *inode, struct file *file) 6834 { 6835 struct trace_iterator *iter = file->private_data; 6836 struct trace_array *tr = inode->i_private; 6837 6838 mutex_lock(&trace_types_lock); 6839 6840 tr->trace_ref--; 6841 6842 if (iter->trace->pipe_close) 6843 iter->trace->pipe_close(iter); 6844 close_pipe_on_cpu(tr, iter->cpu_file); 6845 mutex_unlock(&trace_types_lock); 6846 6847 free_trace_iter_content(iter); 6848 kfree(iter); 6849 6850 trace_array_put(tr); 6851 6852 return 0; 6853 } 6854 6855 static __poll_t 6856 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table) 6857 { 6858 struct trace_array *tr = iter->tr; 6859 6860 /* Iterators are static, they should be filled or empty */ 6861 if (trace_buffer_iter(iter, iter->cpu_file)) 6862 return EPOLLIN | EPOLLRDNORM; 6863 6864 if (tr->trace_flags & TRACE_ITER_BLOCK) 6865 /* 6866 * Always select as readable when in blocking mode 6867 */ 6868 return EPOLLIN | EPOLLRDNORM; 6869 else 6870 return ring_buffer_poll_wait(iter->array_buffer->buffer, iter->cpu_file, 6871 filp, poll_table, iter->tr->buffer_percent); 6872 } 6873 6874 static __poll_t 6875 tracing_poll_pipe(struct file *filp, poll_table *poll_table) 6876 { 6877 struct trace_iterator *iter = filp->private_data; 6878 6879 return trace_poll(iter, filp, poll_table); 6880 } 6881 6882 /* Must be called with iter->mutex held. */ 6883 static int tracing_wait_pipe(struct file *filp) 6884 { 6885 struct trace_iterator *iter = filp->private_data; 6886 int ret; 6887 6888 while (trace_empty(iter)) { 6889 6890 if ((filp->f_flags & O_NONBLOCK)) { 6891 return -EAGAIN; 6892 } 6893 6894 /* 6895 * We block until we read something and tracing is disabled. 6896 * We still block if tracing is disabled, but we have never 6897 * read anything. This allows a user to cat this file, and 6898 * then enable tracing. But after we have read something, 6899 * we give an EOF when tracing is again disabled. 6900 * 6901 * iter->pos will be 0 if we haven't read anything. 6902 */ 6903 if (!tracer_tracing_is_on(iter->tr) && iter->pos) 6904 break; 6905 6906 mutex_unlock(&iter->mutex); 6907 6908 ret = wait_on_pipe(iter, 0); 6909 6910 mutex_lock(&iter->mutex); 6911 6912 if (ret) 6913 return ret; 6914 } 6915 6916 return 1; 6917 } 6918 6919 /* 6920 * Consumer reader. 6921 */ 6922 static ssize_t 6923 tracing_read_pipe(struct file *filp, char __user *ubuf, 6924 size_t cnt, loff_t *ppos) 6925 { 6926 struct trace_iterator *iter = filp->private_data; 6927 ssize_t sret; 6928 6929 /* 6930 * Avoid more than one consumer on a single file descriptor 6931 * This is just a matter of traces coherency, the ring buffer itself 6932 * is protected. 6933 */ 6934 mutex_lock(&iter->mutex); 6935 6936 /* return any leftover data */ 6937 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 6938 if (sret != -EBUSY) 6939 goto out; 6940 6941 trace_seq_init(&iter->seq); 6942 6943 if (iter->trace->read) { 6944 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); 6945 if (sret) 6946 goto out; 6947 } 6948 6949 waitagain: 6950 sret = tracing_wait_pipe(filp); 6951 if (sret <= 0) 6952 goto out; 6953 6954 /* stop when tracing is finished */ 6955 if (trace_empty(iter)) { 6956 sret = 0; 6957 goto out; 6958 } 6959 6960 if (cnt >= PAGE_SIZE) 6961 cnt = PAGE_SIZE - 1; 6962 6963 /* reset all but tr, trace, and overruns */ 6964 trace_iterator_reset(iter); 6965 cpumask_clear(iter->started); 6966 trace_seq_init(&iter->seq); 6967 6968 trace_event_read_lock(); 6969 trace_access_lock(iter->cpu_file); 6970 while (trace_find_next_entry_inc(iter) != NULL) { 6971 enum print_line_t ret; 6972 int save_len = iter->seq.seq.len; 6973 6974 ret = print_trace_line(iter); 6975 if (ret == TRACE_TYPE_PARTIAL_LINE) { 6976 /* 6977 * If one print_trace_line() fills entire trace_seq in one shot, 6978 * trace_seq_to_user() will returns -EBUSY because save_len == 0, 6979 * In this case, we need to consume it, otherwise, loop will peek 6980 * this event next time, resulting in an infinite loop. 6981 */ 6982 if (save_len == 0) { 6983 iter->seq.full = 0; 6984 trace_seq_puts(&iter->seq, "[LINE TOO BIG]\n"); 6985 trace_consume(iter); 6986 break; 6987 } 6988 6989 /* In other cases, don't print partial lines */ 6990 iter->seq.seq.len = save_len; 6991 break; 6992 } 6993 if (ret != TRACE_TYPE_NO_CONSUME) 6994 trace_consume(iter); 6995 6996 if (trace_seq_used(&iter->seq) >= cnt) 6997 break; 6998 6999 /* 7000 * Setting the full flag means we reached the trace_seq buffer 7001 * size and we should leave by partial output condition above. 7002 * One of the trace_seq_* functions is not used properly. 7003 */ 7004 WARN_ONCE(iter->seq.full, "full flag set for trace type %d", 7005 iter->ent->type); 7006 } 7007 trace_access_unlock(iter->cpu_file); 7008 trace_event_read_unlock(); 7009 7010 /* Now copy what we have to the user */ 7011 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 7012 if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq)) 7013 trace_seq_init(&iter->seq); 7014 7015 /* 7016 * If there was nothing to send to user, in spite of consuming trace 7017 * entries, go back to wait for more entries. 7018 */ 7019 if (sret == -EBUSY) 7020 goto waitagain; 7021 7022 out: 7023 mutex_unlock(&iter->mutex); 7024 7025 return sret; 7026 } 7027 7028 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd, 7029 unsigned int idx) 7030 { 7031 __free_page(spd->pages[idx]); 7032 } 7033 7034 static size_t 7035 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter) 7036 { 7037 size_t count; 7038 int save_len; 7039 int ret; 7040 7041 /* Seq buffer is page-sized, exactly what we need. */ 7042 for (;;) { 7043 save_len = iter->seq.seq.len; 7044 ret = print_trace_line(iter); 7045 7046 if (trace_seq_has_overflowed(&iter->seq)) { 7047 iter->seq.seq.len = save_len; 7048 break; 7049 } 7050 7051 /* 7052 * This should not be hit, because it should only 7053 * be set if the iter->seq overflowed. But check it 7054 * anyway to be safe. 7055 */ 7056 if (ret == TRACE_TYPE_PARTIAL_LINE) { 7057 iter->seq.seq.len = save_len; 7058 break; 7059 } 7060 7061 count = trace_seq_used(&iter->seq) - save_len; 7062 if (rem < count) { 7063 rem = 0; 7064 iter->seq.seq.len = save_len; 7065 break; 7066 } 7067 7068 if (ret != TRACE_TYPE_NO_CONSUME) 7069 trace_consume(iter); 7070 rem -= count; 7071 if (!trace_find_next_entry_inc(iter)) { 7072 rem = 0; 7073 iter->ent = NULL; 7074 break; 7075 } 7076 } 7077 7078 return rem; 7079 } 7080 7081 static ssize_t tracing_splice_read_pipe(struct file *filp, 7082 loff_t *ppos, 7083 struct pipe_inode_info *pipe, 7084 size_t len, 7085 unsigned int flags) 7086 { 7087 struct page *pages_def[PIPE_DEF_BUFFERS]; 7088 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 7089 struct trace_iterator *iter = filp->private_data; 7090 struct splice_pipe_desc spd = { 7091 .pages = pages_def, 7092 .partial = partial_def, 7093 .nr_pages = 0, /* This gets updated below. */ 7094 .nr_pages_max = PIPE_DEF_BUFFERS, 7095 .ops = &default_pipe_buf_ops, 7096 .spd_release = tracing_spd_release_pipe, 7097 }; 7098 ssize_t ret; 7099 size_t rem; 7100 unsigned int i; 7101 7102 if (splice_grow_spd(pipe, &spd)) 7103 return -ENOMEM; 7104 7105 mutex_lock(&iter->mutex); 7106 7107 if (iter->trace->splice_read) { 7108 ret = iter->trace->splice_read(iter, filp, 7109 ppos, pipe, len, flags); 7110 if (ret) 7111 goto out_err; 7112 } 7113 7114 ret = tracing_wait_pipe(filp); 7115 if (ret <= 0) 7116 goto out_err; 7117 7118 if (!iter->ent && !trace_find_next_entry_inc(iter)) { 7119 ret = -EFAULT; 7120 goto out_err; 7121 } 7122 7123 trace_event_read_lock(); 7124 trace_access_lock(iter->cpu_file); 7125 7126 /* Fill as many pages as possible. */ 7127 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) { 7128 spd.pages[i] = alloc_page(GFP_KERNEL); 7129 if (!spd.pages[i]) 7130 break; 7131 7132 rem = tracing_fill_pipe_page(rem, iter); 7133 7134 /* Copy the data into the page, so we can start over. */ 7135 ret = trace_seq_to_buffer(&iter->seq, 7136 page_address(spd.pages[i]), 7137 trace_seq_used(&iter->seq)); 7138 if (ret < 0) { 7139 __free_page(spd.pages[i]); 7140 break; 7141 } 7142 spd.partial[i].offset = 0; 7143 spd.partial[i].len = trace_seq_used(&iter->seq); 7144 7145 trace_seq_init(&iter->seq); 7146 } 7147 7148 trace_access_unlock(iter->cpu_file); 7149 trace_event_read_unlock(); 7150 mutex_unlock(&iter->mutex); 7151 7152 spd.nr_pages = i; 7153 7154 if (i) 7155 ret = splice_to_pipe(pipe, &spd); 7156 else 7157 ret = 0; 7158 out: 7159 splice_shrink_spd(&spd); 7160 return ret; 7161 7162 out_err: 7163 mutex_unlock(&iter->mutex); 7164 goto out; 7165 } 7166 7167 static ssize_t 7168 tracing_entries_read(struct file *filp, char __user *ubuf, 7169 size_t cnt, loff_t *ppos) 7170 { 7171 struct inode *inode = file_inode(filp); 7172 struct trace_array *tr = inode->i_private; 7173 int cpu = tracing_get_cpu(inode); 7174 char buf[64]; 7175 int r = 0; 7176 ssize_t ret; 7177 7178 mutex_lock(&trace_types_lock); 7179 7180 if (cpu == RING_BUFFER_ALL_CPUS) { 7181 int cpu, buf_size_same; 7182 unsigned long size; 7183 7184 size = 0; 7185 buf_size_same = 1; 7186 /* check if all cpu sizes are same */ 7187 for_each_tracing_cpu(cpu) { 7188 /* fill in the size from first enabled cpu */ 7189 if (size == 0) 7190 size = per_cpu_ptr(tr->array_buffer.data, cpu)->entries; 7191 if (size != per_cpu_ptr(tr->array_buffer.data, cpu)->entries) { 7192 buf_size_same = 0; 7193 break; 7194 } 7195 } 7196 7197 if (buf_size_same) { 7198 if (!ring_buffer_expanded) 7199 r = sprintf(buf, "%lu (expanded: %lu)\n", 7200 size >> 10, 7201 trace_buf_size >> 10); 7202 else 7203 r = sprintf(buf, "%lu\n", size >> 10); 7204 } else 7205 r = sprintf(buf, "X\n"); 7206 } else 7207 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10); 7208 7209 mutex_unlock(&trace_types_lock); 7210 7211 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 7212 return ret; 7213 } 7214 7215 static ssize_t 7216 tracing_entries_write(struct file *filp, const char __user *ubuf, 7217 size_t cnt, loff_t *ppos) 7218 { 7219 struct inode *inode = file_inode(filp); 7220 struct trace_array *tr = inode->i_private; 7221 unsigned long val; 7222 int ret; 7223 7224 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 7225 if (ret) 7226 return ret; 7227 7228 /* must have at least 1 entry */ 7229 if (!val) 7230 return -EINVAL; 7231 7232 /* value is in KB */ 7233 val <<= 10; 7234 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); 7235 if (ret < 0) 7236 return ret; 7237 7238 *ppos += cnt; 7239 7240 return cnt; 7241 } 7242 7243 static ssize_t 7244 tracing_total_entries_read(struct file *filp, char __user *ubuf, 7245 size_t cnt, loff_t *ppos) 7246 { 7247 struct trace_array *tr = filp->private_data; 7248 char buf[64]; 7249 int r, cpu; 7250 unsigned long size = 0, expanded_size = 0; 7251 7252 mutex_lock(&trace_types_lock); 7253 for_each_tracing_cpu(cpu) { 7254 size += per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10; 7255 if (!ring_buffer_expanded) 7256 expanded_size += trace_buf_size >> 10; 7257 } 7258 if (ring_buffer_expanded) 7259 r = sprintf(buf, "%lu\n", size); 7260 else 7261 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size); 7262 mutex_unlock(&trace_types_lock); 7263 7264 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 7265 } 7266 7267 static ssize_t 7268 tracing_free_buffer_write(struct file *filp, const char __user *ubuf, 7269 size_t cnt, loff_t *ppos) 7270 { 7271 /* 7272 * There is no need to read what the user has written, this function 7273 * is just to make sure that there is no error when "echo" is used 7274 */ 7275 7276 *ppos += cnt; 7277 7278 return cnt; 7279 } 7280 7281 static int 7282 tracing_free_buffer_release(struct inode *inode, struct file *filp) 7283 { 7284 struct trace_array *tr = inode->i_private; 7285 7286 /* disable tracing ? */ 7287 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE) 7288 tracer_tracing_off(tr); 7289 /* resize the ring buffer to 0 */ 7290 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); 7291 7292 trace_array_put(tr); 7293 7294 return 0; 7295 } 7296 7297 static ssize_t 7298 tracing_mark_write(struct file *filp, const char __user *ubuf, 7299 size_t cnt, loff_t *fpos) 7300 { 7301 struct trace_array *tr = filp->private_data; 7302 struct ring_buffer_event *event; 7303 enum event_trigger_type tt = ETT_NONE; 7304 struct trace_buffer *buffer; 7305 struct print_entry *entry; 7306 ssize_t written; 7307 int size; 7308 int len; 7309 7310 /* Used in tracing_mark_raw_write() as well */ 7311 #define FAULTED_STR "<faulted>" 7312 #define FAULTED_SIZE (sizeof(FAULTED_STR) - 1) /* '\0' is already accounted for */ 7313 7314 if (tracing_disabled) 7315 return -EINVAL; 7316 7317 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) 7318 return -EINVAL; 7319 7320 if (cnt > TRACE_BUF_SIZE) 7321 cnt = TRACE_BUF_SIZE; 7322 7323 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); 7324 7325 size = sizeof(*entry) + cnt + 2; /* add '\0' and possible '\n' */ 7326 7327 /* If less than "<faulted>", then make sure we can still add that */ 7328 if (cnt < FAULTED_SIZE) 7329 size += FAULTED_SIZE - cnt; 7330 7331 buffer = tr->array_buffer.buffer; 7332 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 7333 tracing_gen_ctx()); 7334 if (unlikely(!event)) 7335 /* Ring buffer disabled, return as if not open for write */ 7336 return -EBADF; 7337 7338 entry = ring_buffer_event_data(event); 7339 entry->ip = _THIS_IP_; 7340 7341 len = __copy_from_user_inatomic(&entry->buf, ubuf, cnt); 7342 if (len) { 7343 memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE); 7344 cnt = FAULTED_SIZE; 7345 written = -EFAULT; 7346 } else 7347 written = cnt; 7348 7349 if (tr->trace_marker_file && !list_empty(&tr->trace_marker_file->triggers)) { 7350 /* do not add \n before testing triggers, but add \0 */ 7351 entry->buf[cnt] = '\0'; 7352 tt = event_triggers_call(tr->trace_marker_file, buffer, entry, event); 7353 } 7354 7355 if (entry->buf[cnt - 1] != '\n') { 7356 entry->buf[cnt] = '\n'; 7357 entry->buf[cnt + 1] = '\0'; 7358 } else 7359 entry->buf[cnt] = '\0'; 7360 7361 if (static_branch_unlikely(&trace_marker_exports_enabled)) 7362 ftrace_exports(event, TRACE_EXPORT_MARKER); 7363 __buffer_unlock_commit(buffer, event); 7364 7365 if (tt) 7366 event_triggers_post_call(tr->trace_marker_file, tt); 7367 7368 return written; 7369 } 7370 7371 /* Limit it for now to 3K (including tag) */ 7372 #define RAW_DATA_MAX_SIZE (1024*3) 7373 7374 static ssize_t 7375 tracing_mark_raw_write(struct file *filp, const char __user *ubuf, 7376 size_t cnt, loff_t *fpos) 7377 { 7378 struct trace_array *tr = filp->private_data; 7379 struct ring_buffer_event *event; 7380 struct trace_buffer *buffer; 7381 struct raw_data_entry *entry; 7382 ssize_t written; 7383 int size; 7384 int len; 7385 7386 #define FAULT_SIZE_ID (FAULTED_SIZE + sizeof(int)) 7387 7388 if (tracing_disabled) 7389 return -EINVAL; 7390 7391 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) 7392 return -EINVAL; 7393 7394 /* The marker must at least have a tag id */ 7395 if (cnt < sizeof(unsigned int) || cnt > RAW_DATA_MAX_SIZE) 7396 return -EINVAL; 7397 7398 if (cnt > TRACE_BUF_SIZE) 7399 cnt = TRACE_BUF_SIZE; 7400 7401 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); 7402 7403 size = sizeof(*entry) + cnt; 7404 if (cnt < FAULT_SIZE_ID) 7405 size += FAULT_SIZE_ID - cnt; 7406 7407 buffer = tr->array_buffer.buffer; 7408 event = __trace_buffer_lock_reserve(buffer, TRACE_RAW_DATA, size, 7409 tracing_gen_ctx()); 7410 if (!event) 7411 /* Ring buffer disabled, return as if not open for write */ 7412 return -EBADF; 7413 7414 entry = ring_buffer_event_data(event); 7415 7416 len = __copy_from_user_inatomic(&entry->id, ubuf, cnt); 7417 if (len) { 7418 entry->id = -1; 7419 memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE); 7420 written = -EFAULT; 7421 } else 7422 written = cnt; 7423 7424 __buffer_unlock_commit(buffer, event); 7425 7426 return written; 7427 } 7428 7429 static int tracing_clock_show(struct seq_file *m, void *v) 7430 { 7431 struct trace_array *tr = m->private; 7432 int i; 7433 7434 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) 7435 seq_printf(m, 7436 "%s%s%s%s", i ? " " : "", 7437 i == tr->clock_id ? "[" : "", trace_clocks[i].name, 7438 i == tr->clock_id ? "]" : ""); 7439 seq_putc(m, '\n'); 7440 7441 return 0; 7442 } 7443 7444 int tracing_set_clock(struct trace_array *tr, const char *clockstr) 7445 { 7446 int i; 7447 7448 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) { 7449 if (strcmp(trace_clocks[i].name, clockstr) == 0) 7450 break; 7451 } 7452 if (i == ARRAY_SIZE(trace_clocks)) 7453 return -EINVAL; 7454 7455 mutex_lock(&trace_types_lock); 7456 7457 tr->clock_id = i; 7458 7459 ring_buffer_set_clock(tr->array_buffer.buffer, trace_clocks[i].func); 7460 7461 /* 7462 * New clock may not be consistent with the previous clock. 7463 * Reset the buffer so that it doesn't have incomparable timestamps. 7464 */ 7465 tracing_reset_online_cpus(&tr->array_buffer); 7466 7467 #ifdef CONFIG_TRACER_MAX_TRACE 7468 if (tr->max_buffer.buffer) 7469 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); 7470 tracing_reset_online_cpus(&tr->max_buffer); 7471 #endif 7472 7473 mutex_unlock(&trace_types_lock); 7474 7475 return 0; 7476 } 7477 7478 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf, 7479 size_t cnt, loff_t *fpos) 7480 { 7481 struct seq_file *m = filp->private_data; 7482 struct trace_array *tr = m->private; 7483 char buf[64]; 7484 const char *clockstr; 7485 int ret; 7486 7487 if (cnt >= sizeof(buf)) 7488 return -EINVAL; 7489 7490 if (copy_from_user(buf, ubuf, cnt)) 7491 return -EFAULT; 7492 7493 buf[cnt] = 0; 7494 7495 clockstr = strstrip(buf); 7496 7497 ret = tracing_set_clock(tr, clockstr); 7498 if (ret) 7499 return ret; 7500 7501 *fpos += cnt; 7502 7503 return cnt; 7504 } 7505 7506 static int tracing_clock_open(struct inode *inode, struct file *file) 7507 { 7508 struct trace_array *tr = inode->i_private; 7509 int ret; 7510 7511 ret = tracing_check_open_get_tr(tr); 7512 if (ret) 7513 return ret; 7514 7515 ret = single_open(file, tracing_clock_show, inode->i_private); 7516 if (ret < 0) 7517 trace_array_put(tr); 7518 7519 return ret; 7520 } 7521 7522 static int tracing_time_stamp_mode_show(struct seq_file *m, void *v) 7523 { 7524 struct trace_array *tr = m->private; 7525 7526 mutex_lock(&trace_types_lock); 7527 7528 if (ring_buffer_time_stamp_abs(tr->array_buffer.buffer)) 7529 seq_puts(m, "delta [absolute]\n"); 7530 else 7531 seq_puts(m, "[delta] absolute\n"); 7532 7533 mutex_unlock(&trace_types_lock); 7534 7535 return 0; 7536 } 7537 7538 static int tracing_time_stamp_mode_open(struct inode *inode, struct file *file) 7539 { 7540 struct trace_array *tr = inode->i_private; 7541 int ret; 7542 7543 ret = tracing_check_open_get_tr(tr); 7544 if (ret) 7545 return ret; 7546 7547 ret = single_open(file, tracing_time_stamp_mode_show, inode->i_private); 7548 if (ret < 0) 7549 trace_array_put(tr); 7550 7551 return ret; 7552 } 7553 7554 u64 tracing_event_time_stamp(struct trace_buffer *buffer, struct ring_buffer_event *rbe) 7555 { 7556 if (rbe == this_cpu_read(trace_buffered_event)) 7557 return ring_buffer_time_stamp(buffer); 7558 7559 return ring_buffer_event_time_stamp(buffer, rbe); 7560 } 7561 7562 /* 7563 * Set or disable using the per CPU trace_buffer_event when possible. 7564 */ 7565 int tracing_set_filter_buffering(struct trace_array *tr, bool set) 7566 { 7567 int ret = 0; 7568 7569 mutex_lock(&trace_types_lock); 7570 7571 if (set && tr->no_filter_buffering_ref++) 7572 goto out; 7573 7574 if (!set) { 7575 if (WARN_ON_ONCE(!tr->no_filter_buffering_ref)) { 7576 ret = -EINVAL; 7577 goto out; 7578 } 7579 7580 --tr->no_filter_buffering_ref; 7581 } 7582 out: 7583 mutex_unlock(&trace_types_lock); 7584 7585 return ret; 7586 } 7587 7588 struct ftrace_buffer_info { 7589 struct trace_iterator iter; 7590 void *spare; 7591 unsigned int spare_cpu; 7592 unsigned int read; 7593 }; 7594 7595 #ifdef CONFIG_TRACER_SNAPSHOT 7596 static int tracing_snapshot_open(struct inode *inode, struct file *file) 7597 { 7598 struct trace_array *tr = inode->i_private; 7599 struct trace_iterator *iter; 7600 struct seq_file *m; 7601 int ret; 7602 7603 ret = tracing_check_open_get_tr(tr); 7604 if (ret) 7605 return ret; 7606 7607 if (file->f_mode & FMODE_READ) { 7608 iter = __tracing_open(inode, file, true); 7609 if (IS_ERR(iter)) 7610 ret = PTR_ERR(iter); 7611 } else { 7612 /* Writes still need the seq_file to hold the private data */ 7613 ret = -ENOMEM; 7614 m = kzalloc(sizeof(*m), GFP_KERNEL); 7615 if (!m) 7616 goto out; 7617 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 7618 if (!iter) { 7619 kfree(m); 7620 goto out; 7621 } 7622 ret = 0; 7623 7624 iter->tr = tr; 7625 iter->array_buffer = &tr->max_buffer; 7626 iter->cpu_file = tracing_get_cpu(inode); 7627 m->private = iter; 7628 file->private_data = m; 7629 } 7630 out: 7631 if (ret < 0) 7632 trace_array_put(tr); 7633 7634 return ret; 7635 } 7636 7637 static void tracing_swap_cpu_buffer(void *tr) 7638 { 7639 update_max_tr_single((struct trace_array *)tr, current, smp_processor_id()); 7640 } 7641 7642 static ssize_t 7643 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt, 7644 loff_t *ppos) 7645 { 7646 struct seq_file *m = filp->private_data; 7647 struct trace_iterator *iter = m->private; 7648 struct trace_array *tr = iter->tr; 7649 unsigned long val; 7650 int ret; 7651 7652 ret = tracing_update_buffers(); 7653 if (ret < 0) 7654 return ret; 7655 7656 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 7657 if (ret) 7658 return ret; 7659 7660 mutex_lock(&trace_types_lock); 7661 7662 if (tr->current_trace->use_max_tr) { 7663 ret = -EBUSY; 7664 goto out; 7665 } 7666 7667 local_irq_disable(); 7668 arch_spin_lock(&tr->max_lock); 7669 if (tr->cond_snapshot) 7670 ret = -EBUSY; 7671 arch_spin_unlock(&tr->max_lock); 7672 local_irq_enable(); 7673 if (ret) 7674 goto out; 7675 7676 switch (val) { 7677 case 0: 7678 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 7679 ret = -EINVAL; 7680 break; 7681 } 7682 if (tr->allocated_snapshot) 7683 free_snapshot(tr); 7684 break; 7685 case 1: 7686 /* Only allow per-cpu swap if the ring buffer supports it */ 7687 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP 7688 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 7689 ret = -EINVAL; 7690 break; 7691 } 7692 #endif 7693 if (tr->allocated_snapshot) 7694 ret = resize_buffer_duplicate_size(&tr->max_buffer, 7695 &tr->array_buffer, iter->cpu_file); 7696 else 7697 ret = tracing_alloc_snapshot_instance(tr); 7698 if (ret < 0) 7699 break; 7700 /* Now, we're going to swap */ 7701 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) { 7702 local_irq_disable(); 7703 update_max_tr(tr, current, smp_processor_id(), NULL); 7704 local_irq_enable(); 7705 } else { 7706 smp_call_function_single(iter->cpu_file, tracing_swap_cpu_buffer, 7707 (void *)tr, 1); 7708 } 7709 break; 7710 default: 7711 if (tr->allocated_snapshot) { 7712 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 7713 tracing_reset_online_cpus(&tr->max_buffer); 7714 else 7715 tracing_reset_cpu(&tr->max_buffer, iter->cpu_file); 7716 } 7717 break; 7718 } 7719 7720 if (ret >= 0) { 7721 *ppos += cnt; 7722 ret = cnt; 7723 } 7724 out: 7725 mutex_unlock(&trace_types_lock); 7726 return ret; 7727 } 7728 7729 static int tracing_snapshot_release(struct inode *inode, struct file *file) 7730 { 7731 struct seq_file *m = file->private_data; 7732 int ret; 7733 7734 ret = tracing_release(inode, file); 7735 7736 if (file->f_mode & FMODE_READ) 7737 return ret; 7738 7739 /* If write only, the seq_file is just a stub */ 7740 if (m) 7741 kfree(m->private); 7742 kfree(m); 7743 7744 return 0; 7745 } 7746 7747 static int tracing_buffers_open(struct inode *inode, struct file *filp); 7748 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf, 7749 size_t count, loff_t *ppos); 7750 static int tracing_buffers_release(struct inode *inode, struct file *file); 7751 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos, 7752 struct pipe_inode_info *pipe, size_t len, unsigned int flags); 7753 7754 static int snapshot_raw_open(struct inode *inode, struct file *filp) 7755 { 7756 struct ftrace_buffer_info *info; 7757 int ret; 7758 7759 /* The following checks for tracefs lockdown */ 7760 ret = tracing_buffers_open(inode, filp); 7761 if (ret < 0) 7762 return ret; 7763 7764 info = filp->private_data; 7765 7766 if (info->iter.trace->use_max_tr) { 7767 tracing_buffers_release(inode, filp); 7768 return -EBUSY; 7769 } 7770 7771 info->iter.snapshot = true; 7772 info->iter.array_buffer = &info->iter.tr->max_buffer; 7773 7774 return ret; 7775 } 7776 7777 #endif /* CONFIG_TRACER_SNAPSHOT */ 7778 7779 7780 static const struct file_operations tracing_thresh_fops = { 7781 .open = tracing_open_generic, 7782 .read = tracing_thresh_read, 7783 .write = tracing_thresh_write, 7784 .llseek = generic_file_llseek, 7785 }; 7786 7787 #ifdef CONFIG_TRACER_MAX_TRACE 7788 static const struct file_operations tracing_max_lat_fops = { 7789 .open = tracing_open_generic_tr, 7790 .read = tracing_max_lat_read, 7791 .write = tracing_max_lat_write, 7792 .llseek = generic_file_llseek, 7793 .release = tracing_release_generic_tr, 7794 }; 7795 #endif 7796 7797 static const struct file_operations set_tracer_fops = { 7798 .open = tracing_open_generic_tr, 7799 .read = tracing_set_trace_read, 7800 .write = tracing_set_trace_write, 7801 .llseek = generic_file_llseek, 7802 .release = tracing_release_generic_tr, 7803 }; 7804 7805 static const struct file_operations tracing_pipe_fops = { 7806 .open = tracing_open_pipe, 7807 .poll = tracing_poll_pipe, 7808 .read = tracing_read_pipe, 7809 .splice_read = tracing_splice_read_pipe, 7810 .release = tracing_release_pipe, 7811 .llseek = no_llseek, 7812 }; 7813 7814 static const struct file_operations tracing_entries_fops = { 7815 .open = tracing_open_generic_tr, 7816 .read = tracing_entries_read, 7817 .write = tracing_entries_write, 7818 .llseek = generic_file_llseek, 7819 .release = tracing_release_generic_tr, 7820 }; 7821 7822 static const struct file_operations tracing_total_entries_fops = { 7823 .open = tracing_open_generic_tr, 7824 .read = tracing_total_entries_read, 7825 .llseek = generic_file_llseek, 7826 .release = tracing_release_generic_tr, 7827 }; 7828 7829 static const struct file_operations tracing_free_buffer_fops = { 7830 .open = tracing_open_generic_tr, 7831 .write = tracing_free_buffer_write, 7832 .release = tracing_free_buffer_release, 7833 }; 7834 7835 static const struct file_operations tracing_mark_fops = { 7836 .open = tracing_mark_open, 7837 .write = tracing_mark_write, 7838 .release = tracing_release_generic_tr, 7839 }; 7840 7841 static const struct file_operations tracing_mark_raw_fops = { 7842 .open = tracing_mark_open, 7843 .write = tracing_mark_raw_write, 7844 .release = tracing_release_generic_tr, 7845 }; 7846 7847 static const struct file_operations trace_clock_fops = { 7848 .open = tracing_clock_open, 7849 .read = seq_read, 7850 .llseek = seq_lseek, 7851 .release = tracing_single_release_tr, 7852 .write = tracing_clock_write, 7853 }; 7854 7855 static const struct file_operations trace_time_stamp_mode_fops = { 7856 .open = tracing_time_stamp_mode_open, 7857 .read = seq_read, 7858 .llseek = seq_lseek, 7859 .release = tracing_single_release_tr, 7860 }; 7861 7862 #ifdef CONFIG_TRACER_SNAPSHOT 7863 static const struct file_operations snapshot_fops = { 7864 .open = tracing_snapshot_open, 7865 .read = seq_read, 7866 .write = tracing_snapshot_write, 7867 .llseek = tracing_lseek, 7868 .release = tracing_snapshot_release, 7869 }; 7870 7871 static const struct file_operations snapshot_raw_fops = { 7872 .open = snapshot_raw_open, 7873 .read = tracing_buffers_read, 7874 .release = tracing_buffers_release, 7875 .splice_read = tracing_buffers_splice_read, 7876 .llseek = no_llseek, 7877 }; 7878 7879 #endif /* CONFIG_TRACER_SNAPSHOT */ 7880 7881 /* 7882 * trace_min_max_write - Write a u64 value to a trace_min_max_param struct 7883 * @filp: The active open file structure 7884 * @ubuf: The userspace provided buffer to read value into 7885 * @cnt: The maximum number of bytes to read 7886 * @ppos: The current "file" position 7887 * 7888 * This function implements the write interface for a struct trace_min_max_param. 7889 * The filp->private_data must point to a trace_min_max_param structure that 7890 * defines where to write the value, the min and the max acceptable values, 7891 * and a lock to protect the write. 7892 */ 7893 static ssize_t 7894 trace_min_max_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) 7895 { 7896 struct trace_min_max_param *param = filp->private_data; 7897 u64 val; 7898 int err; 7899 7900 if (!param) 7901 return -EFAULT; 7902 7903 err = kstrtoull_from_user(ubuf, cnt, 10, &val); 7904 if (err) 7905 return err; 7906 7907 if (param->lock) 7908 mutex_lock(param->lock); 7909 7910 if (param->min && val < *param->min) 7911 err = -EINVAL; 7912 7913 if (param->max && val > *param->max) 7914 err = -EINVAL; 7915 7916 if (!err) 7917 *param->val = val; 7918 7919 if (param->lock) 7920 mutex_unlock(param->lock); 7921 7922 if (err) 7923 return err; 7924 7925 return cnt; 7926 } 7927 7928 /* 7929 * trace_min_max_read - Read a u64 value from a trace_min_max_param struct 7930 * @filp: The active open file structure 7931 * @ubuf: The userspace provided buffer to read value into 7932 * @cnt: The maximum number of bytes to read 7933 * @ppos: The current "file" position 7934 * 7935 * This function implements the read interface for a struct trace_min_max_param. 7936 * The filp->private_data must point to a trace_min_max_param struct with valid 7937 * data. 7938 */ 7939 static ssize_t 7940 trace_min_max_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) 7941 { 7942 struct trace_min_max_param *param = filp->private_data; 7943 char buf[U64_STR_SIZE]; 7944 int len; 7945 u64 val; 7946 7947 if (!param) 7948 return -EFAULT; 7949 7950 val = *param->val; 7951 7952 if (cnt > sizeof(buf)) 7953 cnt = sizeof(buf); 7954 7955 len = snprintf(buf, sizeof(buf), "%llu\n", val); 7956 7957 return simple_read_from_buffer(ubuf, cnt, ppos, buf, len); 7958 } 7959 7960 const struct file_operations trace_min_max_fops = { 7961 .open = tracing_open_generic, 7962 .read = trace_min_max_read, 7963 .write = trace_min_max_write, 7964 }; 7965 7966 #define TRACING_LOG_ERRS_MAX 8 7967 #define TRACING_LOG_LOC_MAX 128 7968 7969 #define CMD_PREFIX " Command: " 7970 7971 struct err_info { 7972 const char **errs; /* ptr to loc-specific array of err strings */ 7973 u8 type; /* index into errs -> specific err string */ 7974 u16 pos; /* caret position */ 7975 u64 ts; 7976 }; 7977 7978 struct tracing_log_err { 7979 struct list_head list; 7980 struct err_info info; 7981 char loc[TRACING_LOG_LOC_MAX]; /* err location */ 7982 char *cmd; /* what caused err */ 7983 }; 7984 7985 static DEFINE_MUTEX(tracing_err_log_lock); 7986 7987 static struct tracing_log_err *alloc_tracing_log_err(int len) 7988 { 7989 struct tracing_log_err *err; 7990 7991 err = kzalloc(sizeof(*err), GFP_KERNEL); 7992 if (!err) 7993 return ERR_PTR(-ENOMEM); 7994 7995 err->cmd = kzalloc(len, GFP_KERNEL); 7996 if (!err->cmd) { 7997 kfree(err); 7998 return ERR_PTR(-ENOMEM); 7999 } 8000 8001 return err; 8002 } 8003 8004 static void free_tracing_log_err(struct tracing_log_err *err) 8005 { 8006 kfree(err->cmd); 8007 kfree(err); 8008 } 8009 8010 static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr, 8011 int len) 8012 { 8013 struct tracing_log_err *err; 8014 char *cmd; 8015 8016 if (tr->n_err_log_entries < TRACING_LOG_ERRS_MAX) { 8017 err = alloc_tracing_log_err(len); 8018 if (PTR_ERR(err) != -ENOMEM) 8019 tr->n_err_log_entries++; 8020 8021 return err; 8022 } 8023 cmd = kzalloc(len, GFP_KERNEL); 8024 if (!cmd) 8025 return ERR_PTR(-ENOMEM); 8026 err = list_first_entry(&tr->err_log, struct tracing_log_err, list); 8027 kfree(err->cmd); 8028 err->cmd = cmd; 8029 list_del(&err->list); 8030 8031 return err; 8032 } 8033 8034 /** 8035 * err_pos - find the position of a string within a command for error careting 8036 * @cmd: The tracing command that caused the error 8037 * @str: The string to position the caret at within @cmd 8038 * 8039 * Finds the position of the first occurrence of @str within @cmd. The 8040 * return value can be passed to tracing_log_err() for caret placement 8041 * within @cmd. 8042 * 8043 * Returns the index within @cmd of the first occurrence of @str or 0 8044 * if @str was not found. 8045 */ 8046 unsigned int err_pos(char *cmd, const char *str) 8047 { 8048 char *found; 8049 8050 if (WARN_ON(!strlen(cmd))) 8051 return 0; 8052 8053 found = strstr(cmd, str); 8054 if (found) 8055 return found - cmd; 8056 8057 return 0; 8058 } 8059 8060 /** 8061 * tracing_log_err - write an error to the tracing error log 8062 * @tr: The associated trace array for the error (NULL for top level array) 8063 * @loc: A string describing where the error occurred 8064 * @cmd: The tracing command that caused the error 8065 * @errs: The array of loc-specific static error strings 8066 * @type: The index into errs[], which produces the specific static err string 8067 * @pos: The position the caret should be placed in the cmd 8068 * 8069 * Writes an error into tracing/error_log of the form: 8070 * 8071 * <loc>: error: <text> 8072 * Command: <cmd> 8073 * ^ 8074 * 8075 * tracing/error_log is a small log file containing the last 8076 * TRACING_LOG_ERRS_MAX errors (8). Memory for errors isn't allocated 8077 * unless there has been a tracing error, and the error log can be 8078 * cleared and have its memory freed by writing the empty string in 8079 * truncation mode to it i.e. echo > tracing/error_log. 8080 * 8081 * NOTE: the @errs array along with the @type param are used to 8082 * produce a static error string - this string is not copied and saved 8083 * when the error is logged - only a pointer to it is saved. See 8084 * existing callers for examples of how static strings are typically 8085 * defined for use with tracing_log_err(). 8086 */ 8087 void tracing_log_err(struct trace_array *tr, 8088 const char *loc, const char *cmd, 8089 const char **errs, u8 type, u16 pos) 8090 { 8091 struct tracing_log_err *err; 8092 int len = 0; 8093 8094 if (!tr) 8095 tr = &global_trace; 8096 8097 len += sizeof(CMD_PREFIX) + 2 * sizeof("\n") + strlen(cmd) + 1; 8098 8099 mutex_lock(&tracing_err_log_lock); 8100 err = get_tracing_log_err(tr, len); 8101 if (PTR_ERR(err) == -ENOMEM) { 8102 mutex_unlock(&tracing_err_log_lock); 8103 return; 8104 } 8105 8106 snprintf(err->loc, TRACING_LOG_LOC_MAX, "%s: error: ", loc); 8107 snprintf(err->cmd, len, "\n" CMD_PREFIX "%s\n", cmd); 8108 8109 err->info.errs = errs; 8110 err->info.type = type; 8111 err->info.pos = pos; 8112 err->info.ts = local_clock(); 8113 8114 list_add_tail(&err->list, &tr->err_log); 8115 mutex_unlock(&tracing_err_log_lock); 8116 } 8117 8118 static void clear_tracing_err_log(struct trace_array *tr) 8119 { 8120 struct tracing_log_err *err, *next; 8121 8122 mutex_lock(&tracing_err_log_lock); 8123 list_for_each_entry_safe(err, next, &tr->err_log, list) { 8124 list_del(&err->list); 8125 free_tracing_log_err(err); 8126 } 8127 8128 tr->n_err_log_entries = 0; 8129 mutex_unlock(&tracing_err_log_lock); 8130 } 8131 8132 static void *tracing_err_log_seq_start(struct seq_file *m, loff_t *pos) 8133 { 8134 struct trace_array *tr = m->private; 8135 8136 mutex_lock(&tracing_err_log_lock); 8137 8138 return seq_list_start(&tr->err_log, *pos); 8139 } 8140 8141 static void *tracing_err_log_seq_next(struct seq_file *m, void *v, loff_t *pos) 8142 { 8143 struct trace_array *tr = m->private; 8144 8145 return seq_list_next(v, &tr->err_log, pos); 8146 } 8147 8148 static void tracing_err_log_seq_stop(struct seq_file *m, void *v) 8149 { 8150 mutex_unlock(&tracing_err_log_lock); 8151 } 8152 8153 static void tracing_err_log_show_pos(struct seq_file *m, u16 pos) 8154 { 8155 u16 i; 8156 8157 for (i = 0; i < sizeof(CMD_PREFIX) - 1; i++) 8158 seq_putc(m, ' '); 8159 for (i = 0; i < pos; i++) 8160 seq_putc(m, ' '); 8161 seq_puts(m, "^\n"); 8162 } 8163 8164 static int tracing_err_log_seq_show(struct seq_file *m, void *v) 8165 { 8166 struct tracing_log_err *err = v; 8167 8168 if (err) { 8169 const char *err_text = err->info.errs[err->info.type]; 8170 u64 sec = err->info.ts; 8171 u32 nsec; 8172 8173 nsec = do_div(sec, NSEC_PER_SEC); 8174 seq_printf(m, "[%5llu.%06u] %s%s", sec, nsec / 1000, 8175 err->loc, err_text); 8176 seq_printf(m, "%s", err->cmd); 8177 tracing_err_log_show_pos(m, err->info.pos); 8178 } 8179 8180 return 0; 8181 } 8182 8183 static const struct seq_operations tracing_err_log_seq_ops = { 8184 .start = tracing_err_log_seq_start, 8185 .next = tracing_err_log_seq_next, 8186 .stop = tracing_err_log_seq_stop, 8187 .show = tracing_err_log_seq_show 8188 }; 8189 8190 static int tracing_err_log_open(struct inode *inode, struct file *file) 8191 { 8192 struct trace_array *tr = inode->i_private; 8193 int ret = 0; 8194 8195 ret = tracing_check_open_get_tr(tr); 8196 if (ret) 8197 return ret; 8198 8199 /* If this file was opened for write, then erase contents */ 8200 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) 8201 clear_tracing_err_log(tr); 8202 8203 if (file->f_mode & FMODE_READ) { 8204 ret = seq_open(file, &tracing_err_log_seq_ops); 8205 if (!ret) { 8206 struct seq_file *m = file->private_data; 8207 m->private = tr; 8208 } else { 8209 trace_array_put(tr); 8210 } 8211 } 8212 return ret; 8213 } 8214 8215 static ssize_t tracing_err_log_write(struct file *file, 8216 const char __user *buffer, 8217 size_t count, loff_t *ppos) 8218 { 8219 return count; 8220 } 8221 8222 static int tracing_err_log_release(struct inode *inode, struct file *file) 8223 { 8224 struct trace_array *tr = inode->i_private; 8225 8226 trace_array_put(tr); 8227 8228 if (file->f_mode & FMODE_READ) 8229 seq_release(inode, file); 8230 8231 return 0; 8232 } 8233 8234 static const struct file_operations tracing_err_log_fops = { 8235 .open = tracing_err_log_open, 8236 .write = tracing_err_log_write, 8237 .read = seq_read, 8238 .llseek = tracing_lseek, 8239 .release = tracing_err_log_release, 8240 }; 8241 8242 static int tracing_buffers_open(struct inode *inode, struct file *filp) 8243 { 8244 struct trace_array *tr = inode->i_private; 8245 struct ftrace_buffer_info *info; 8246 int ret; 8247 8248 ret = tracing_check_open_get_tr(tr); 8249 if (ret) 8250 return ret; 8251 8252 info = kvzalloc(sizeof(*info), GFP_KERNEL); 8253 if (!info) { 8254 trace_array_put(tr); 8255 return -ENOMEM; 8256 } 8257 8258 mutex_lock(&trace_types_lock); 8259 8260 info->iter.tr = tr; 8261 info->iter.cpu_file = tracing_get_cpu(inode); 8262 info->iter.trace = tr->current_trace; 8263 info->iter.array_buffer = &tr->array_buffer; 8264 info->spare = NULL; 8265 /* Force reading ring buffer for first read */ 8266 info->read = (unsigned int)-1; 8267 8268 filp->private_data = info; 8269 8270 tr->trace_ref++; 8271 8272 mutex_unlock(&trace_types_lock); 8273 8274 ret = nonseekable_open(inode, filp); 8275 if (ret < 0) 8276 trace_array_put(tr); 8277 8278 return ret; 8279 } 8280 8281 static __poll_t 8282 tracing_buffers_poll(struct file *filp, poll_table *poll_table) 8283 { 8284 struct ftrace_buffer_info *info = filp->private_data; 8285 struct trace_iterator *iter = &info->iter; 8286 8287 return trace_poll(iter, filp, poll_table); 8288 } 8289 8290 static ssize_t 8291 tracing_buffers_read(struct file *filp, char __user *ubuf, 8292 size_t count, loff_t *ppos) 8293 { 8294 struct ftrace_buffer_info *info = filp->private_data; 8295 struct trace_iterator *iter = &info->iter; 8296 ssize_t ret = 0; 8297 ssize_t size; 8298 8299 if (!count) 8300 return 0; 8301 8302 #ifdef CONFIG_TRACER_MAX_TRACE 8303 if (iter->snapshot && iter->tr->current_trace->use_max_tr) 8304 return -EBUSY; 8305 #endif 8306 8307 if (!info->spare) { 8308 info->spare = ring_buffer_alloc_read_page(iter->array_buffer->buffer, 8309 iter->cpu_file); 8310 if (IS_ERR(info->spare)) { 8311 ret = PTR_ERR(info->spare); 8312 info->spare = NULL; 8313 } else { 8314 info->spare_cpu = iter->cpu_file; 8315 } 8316 } 8317 if (!info->spare) 8318 return ret; 8319 8320 /* Do we have previous read data to read? */ 8321 if (info->read < PAGE_SIZE) 8322 goto read; 8323 8324 again: 8325 trace_access_lock(iter->cpu_file); 8326 ret = ring_buffer_read_page(iter->array_buffer->buffer, 8327 &info->spare, 8328 count, 8329 iter->cpu_file, 0); 8330 trace_access_unlock(iter->cpu_file); 8331 8332 if (ret < 0) { 8333 if (trace_empty(iter)) { 8334 if ((filp->f_flags & O_NONBLOCK)) 8335 return -EAGAIN; 8336 8337 ret = wait_on_pipe(iter, 0); 8338 if (ret) 8339 return ret; 8340 8341 goto again; 8342 } 8343 return 0; 8344 } 8345 8346 info->read = 0; 8347 read: 8348 size = PAGE_SIZE - info->read; 8349 if (size > count) 8350 size = count; 8351 8352 ret = copy_to_user(ubuf, info->spare + info->read, size); 8353 if (ret == size) 8354 return -EFAULT; 8355 8356 size -= ret; 8357 8358 *ppos += size; 8359 info->read += size; 8360 8361 return size; 8362 } 8363 8364 static int tracing_buffers_flush(struct file *file, fl_owner_t id) 8365 { 8366 struct ftrace_buffer_info *info = file->private_data; 8367 struct trace_iterator *iter = &info->iter; 8368 8369 iter->wait_index++; 8370 /* Make sure the waiters see the new wait_index */ 8371 smp_wmb(); 8372 8373 ring_buffer_wake_waiters(iter->array_buffer->buffer, iter->cpu_file); 8374 8375 return 0; 8376 } 8377 8378 static int tracing_buffers_release(struct inode *inode, struct file *file) 8379 { 8380 struct ftrace_buffer_info *info = file->private_data; 8381 struct trace_iterator *iter = &info->iter; 8382 8383 mutex_lock(&trace_types_lock); 8384 8385 iter->tr->trace_ref--; 8386 8387 __trace_array_put(iter->tr); 8388 8389 if (info->spare) 8390 ring_buffer_free_read_page(iter->array_buffer->buffer, 8391 info->spare_cpu, info->spare); 8392 kvfree(info); 8393 8394 mutex_unlock(&trace_types_lock); 8395 8396 return 0; 8397 } 8398 8399 struct buffer_ref { 8400 struct trace_buffer *buffer; 8401 void *page; 8402 int cpu; 8403 refcount_t refcount; 8404 }; 8405 8406 static void buffer_ref_release(struct buffer_ref *ref) 8407 { 8408 if (!refcount_dec_and_test(&ref->refcount)) 8409 return; 8410 ring_buffer_free_read_page(ref->buffer, ref->cpu, ref->page); 8411 kfree(ref); 8412 } 8413 8414 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe, 8415 struct pipe_buffer *buf) 8416 { 8417 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 8418 8419 buffer_ref_release(ref); 8420 buf->private = 0; 8421 } 8422 8423 static bool buffer_pipe_buf_get(struct pipe_inode_info *pipe, 8424 struct pipe_buffer *buf) 8425 { 8426 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 8427 8428 if (refcount_read(&ref->refcount) > INT_MAX/2) 8429 return false; 8430 8431 refcount_inc(&ref->refcount); 8432 return true; 8433 } 8434 8435 /* Pipe buffer operations for a buffer. */ 8436 static const struct pipe_buf_operations buffer_pipe_buf_ops = { 8437 .release = buffer_pipe_buf_release, 8438 .get = buffer_pipe_buf_get, 8439 }; 8440 8441 /* 8442 * Callback from splice_to_pipe(), if we need to release some pages 8443 * at the end of the spd in case we error'ed out in filling the pipe. 8444 */ 8445 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i) 8446 { 8447 struct buffer_ref *ref = 8448 (struct buffer_ref *)spd->partial[i].private; 8449 8450 buffer_ref_release(ref); 8451 spd->partial[i].private = 0; 8452 } 8453 8454 static ssize_t 8455 tracing_buffers_splice_read(struct file *file, loff_t *ppos, 8456 struct pipe_inode_info *pipe, size_t len, 8457 unsigned int flags) 8458 { 8459 struct ftrace_buffer_info *info = file->private_data; 8460 struct trace_iterator *iter = &info->iter; 8461 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 8462 struct page *pages_def[PIPE_DEF_BUFFERS]; 8463 struct splice_pipe_desc spd = { 8464 .pages = pages_def, 8465 .partial = partial_def, 8466 .nr_pages_max = PIPE_DEF_BUFFERS, 8467 .ops = &buffer_pipe_buf_ops, 8468 .spd_release = buffer_spd_release, 8469 }; 8470 struct buffer_ref *ref; 8471 int entries, i; 8472 ssize_t ret = 0; 8473 8474 #ifdef CONFIG_TRACER_MAX_TRACE 8475 if (iter->snapshot && iter->tr->current_trace->use_max_tr) 8476 return -EBUSY; 8477 #endif 8478 8479 if (*ppos & (PAGE_SIZE - 1)) 8480 return -EINVAL; 8481 8482 if (len & (PAGE_SIZE - 1)) { 8483 if (len < PAGE_SIZE) 8484 return -EINVAL; 8485 len &= PAGE_MASK; 8486 } 8487 8488 if (splice_grow_spd(pipe, &spd)) 8489 return -ENOMEM; 8490 8491 again: 8492 trace_access_lock(iter->cpu_file); 8493 entries = ring_buffer_entries_cpu(iter->array_buffer->buffer, iter->cpu_file); 8494 8495 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) { 8496 struct page *page; 8497 int r; 8498 8499 ref = kzalloc(sizeof(*ref), GFP_KERNEL); 8500 if (!ref) { 8501 ret = -ENOMEM; 8502 break; 8503 } 8504 8505 refcount_set(&ref->refcount, 1); 8506 ref->buffer = iter->array_buffer->buffer; 8507 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file); 8508 if (IS_ERR(ref->page)) { 8509 ret = PTR_ERR(ref->page); 8510 ref->page = NULL; 8511 kfree(ref); 8512 break; 8513 } 8514 ref->cpu = iter->cpu_file; 8515 8516 r = ring_buffer_read_page(ref->buffer, &ref->page, 8517 len, iter->cpu_file, 1); 8518 if (r < 0) { 8519 ring_buffer_free_read_page(ref->buffer, ref->cpu, 8520 ref->page); 8521 kfree(ref); 8522 break; 8523 } 8524 8525 page = virt_to_page(ref->page); 8526 8527 spd.pages[i] = page; 8528 spd.partial[i].len = PAGE_SIZE; 8529 spd.partial[i].offset = 0; 8530 spd.partial[i].private = (unsigned long)ref; 8531 spd.nr_pages++; 8532 *ppos += PAGE_SIZE; 8533 8534 entries = ring_buffer_entries_cpu(iter->array_buffer->buffer, iter->cpu_file); 8535 } 8536 8537 trace_access_unlock(iter->cpu_file); 8538 spd.nr_pages = i; 8539 8540 /* did we read anything? */ 8541 if (!spd.nr_pages) { 8542 long wait_index; 8543 8544 if (ret) 8545 goto out; 8546 8547 ret = -EAGAIN; 8548 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) 8549 goto out; 8550 8551 wait_index = READ_ONCE(iter->wait_index); 8552 8553 ret = wait_on_pipe(iter, iter->snapshot ? 0 : iter->tr->buffer_percent); 8554 if (ret) 8555 goto out; 8556 8557 /* No need to wait after waking up when tracing is off */ 8558 if (!tracer_tracing_is_on(iter->tr)) 8559 goto out; 8560 8561 /* Make sure we see the new wait_index */ 8562 smp_rmb(); 8563 if (wait_index != iter->wait_index) 8564 goto out; 8565 8566 goto again; 8567 } 8568 8569 ret = splice_to_pipe(pipe, &spd); 8570 out: 8571 splice_shrink_spd(&spd); 8572 8573 return ret; 8574 } 8575 8576 /* An ioctl call with cmd 0 to the ring buffer file will wake up all waiters */ 8577 static long tracing_buffers_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 8578 { 8579 struct ftrace_buffer_info *info = file->private_data; 8580 struct trace_iterator *iter = &info->iter; 8581 8582 if (cmd) 8583 return -ENOIOCTLCMD; 8584 8585 mutex_lock(&trace_types_lock); 8586 8587 iter->wait_index++; 8588 /* Make sure the waiters see the new wait_index */ 8589 smp_wmb(); 8590 8591 ring_buffer_wake_waiters(iter->array_buffer->buffer, iter->cpu_file); 8592 8593 mutex_unlock(&trace_types_lock); 8594 return 0; 8595 } 8596 8597 static const struct file_operations tracing_buffers_fops = { 8598 .open = tracing_buffers_open, 8599 .read = tracing_buffers_read, 8600 .poll = tracing_buffers_poll, 8601 .release = tracing_buffers_release, 8602 .flush = tracing_buffers_flush, 8603 .splice_read = tracing_buffers_splice_read, 8604 .unlocked_ioctl = tracing_buffers_ioctl, 8605 .llseek = no_llseek, 8606 }; 8607 8608 static ssize_t 8609 tracing_stats_read(struct file *filp, char __user *ubuf, 8610 size_t count, loff_t *ppos) 8611 { 8612 struct inode *inode = file_inode(filp); 8613 struct trace_array *tr = inode->i_private; 8614 struct array_buffer *trace_buf = &tr->array_buffer; 8615 int cpu = tracing_get_cpu(inode); 8616 struct trace_seq *s; 8617 unsigned long cnt; 8618 unsigned long long t; 8619 unsigned long usec_rem; 8620 8621 s = kmalloc(sizeof(*s), GFP_KERNEL); 8622 if (!s) 8623 return -ENOMEM; 8624 8625 trace_seq_init(s); 8626 8627 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu); 8628 trace_seq_printf(s, "entries: %ld\n", cnt); 8629 8630 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu); 8631 trace_seq_printf(s, "overrun: %ld\n", cnt); 8632 8633 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu); 8634 trace_seq_printf(s, "commit overrun: %ld\n", cnt); 8635 8636 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu); 8637 trace_seq_printf(s, "bytes: %ld\n", cnt); 8638 8639 if (trace_clocks[tr->clock_id].in_ns) { 8640 /* local or global for trace_clock */ 8641 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 8642 usec_rem = do_div(t, USEC_PER_SEC); 8643 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n", 8644 t, usec_rem); 8645 8646 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer)); 8647 usec_rem = do_div(t, USEC_PER_SEC); 8648 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem); 8649 } else { 8650 /* counter or tsc mode for trace_clock */ 8651 trace_seq_printf(s, "oldest event ts: %llu\n", 8652 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 8653 8654 trace_seq_printf(s, "now ts: %llu\n", 8655 ring_buffer_time_stamp(trace_buf->buffer)); 8656 } 8657 8658 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu); 8659 trace_seq_printf(s, "dropped events: %ld\n", cnt); 8660 8661 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu); 8662 trace_seq_printf(s, "read events: %ld\n", cnt); 8663 8664 count = simple_read_from_buffer(ubuf, count, ppos, 8665 s->buffer, trace_seq_used(s)); 8666 8667 kfree(s); 8668 8669 return count; 8670 } 8671 8672 static const struct file_operations tracing_stats_fops = { 8673 .open = tracing_open_generic_tr, 8674 .read = tracing_stats_read, 8675 .llseek = generic_file_llseek, 8676 .release = tracing_release_generic_tr, 8677 }; 8678 8679 #ifdef CONFIG_DYNAMIC_FTRACE 8680 8681 static ssize_t 8682 tracing_read_dyn_info(struct file *filp, char __user *ubuf, 8683 size_t cnt, loff_t *ppos) 8684 { 8685 ssize_t ret; 8686 char *buf; 8687 int r; 8688 8689 /* 256 should be plenty to hold the amount needed */ 8690 buf = kmalloc(256, GFP_KERNEL); 8691 if (!buf) 8692 return -ENOMEM; 8693 8694 r = scnprintf(buf, 256, "%ld pages:%ld groups: %ld\n", 8695 ftrace_update_tot_cnt, 8696 ftrace_number_of_pages, 8697 ftrace_number_of_groups); 8698 8699 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 8700 kfree(buf); 8701 return ret; 8702 } 8703 8704 static const struct file_operations tracing_dyn_info_fops = { 8705 .open = tracing_open_generic, 8706 .read = tracing_read_dyn_info, 8707 .llseek = generic_file_llseek, 8708 }; 8709 #endif /* CONFIG_DYNAMIC_FTRACE */ 8710 8711 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) 8712 static void 8713 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, 8714 struct trace_array *tr, struct ftrace_probe_ops *ops, 8715 void *data) 8716 { 8717 tracing_snapshot_instance(tr); 8718 } 8719 8720 static void 8721 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, 8722 struct trace_array *tr, struct ftrace_probe_ops *ops, 8723 void *data) 8724 { 8725 struct ftrace_func_mapper *mapper = data; 8726 long *count = NULL; 8727 8728 if (mapper) 8729 count = (long *)ftrace_func_mapper_find_ip(mapper, ip); 8730 8731 if (count) { 8732 8733 if (*count <= 0) 8734 return; 8735 8736 (*count)--; 8737 } 8738 8739 tracing_snapshot_instance(tr); 8740 } 8741 8742 static int 8743 ftrace_snapshot_print(struct seq_file *m, unsigned long ip, 8744 struct ftrace_probe_ops *ops, void *data) 8745 { 8746 struct ftrace_func_mapper *mapper = data; 8747 long *count = NULL; 8748 8749 seq_printf(m, "%ps:", (void *)ip); 8750 8751 seq_puts(m, "snapshot"); 8752 8753 if (mapper) 8754 count = (long *)ftrace_func_mapper_find_ip(mapper, ip); 8755 8756 if (count) 8757 seq_printf(m, ":count=%ld\n", *count); 8758 else 8759 seq_puts(m, ":unlimited\n"); 8760 8761 return 0; 8762 } 8763 8764 static int 8765 ftrace_snapshot_init(struct ftrace_probe_ops *ops, struct trace_array *tr, 8766 unsigned long ip, void *init_data, void **data) 8767 { 8768 struct ftrace_func_mapper *mapper = *data; 8769 8770 if (!mapper) { 8771 mapper = allocate_ftrace_func_mapper(); 8772 if (!mapper) 8773 return -ENOMEM; 8774 *data = mapper; 8775 } 8776 8777 return ftrace_func_mapper_add_ip(mapper, ip, init_data); 8778 } 8779 8780 static void 8781 ftrace_snapshot_free(struct ftrace_probe_ops *ops, struct trace_array *tr, 8782 unsigned long ip, void *data) 8783 { 8784 struct ftrace_func_mapper *mapper = data; 8785 8786 if (!ip) { 8787 if (!mapper) 8788 return; 8789 free_ftrace_func_mapper(mapper, NULL); 8790 return; 8791 } 8792 8793 ftrace_func_mapper_remove_ip(mapper, ip); 8794 } 8795 8796 static struct ftrace_probe_ops snapshot_probe_ops = { 8797 .func = ftrace_snapshot, 8798 .print = ftrace_snapshot_print, 8799 }; 8800 8801 static struct ftrace_probe_ops snapshot_count_probe_ops = { 8802 .func = ftrace_count_snapshot, 8803 .print = ftrace_snapshot_print, 8804 .init = ftrace_snapshot_init, 8805 .free = ftrace_snapshot_free, 8806 }; 8807 8808 static int 8809 ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash, 8810 char *glob, char *cmd, char *param, int enable) 8811 { 8812 struct ftrace_probe_ops *ops; 8813 void *count = (void *)-1; 8814 char *number; 8815 int ret; 8816 8817 if (!tr) 8818 return -ENODEV; 8819 8820 /* hash funcs only work with set_ftrace_filter */ 8821 if (!enable) 8822 return -EINVAL; 8823 8824 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops; 8825 8826 if (glob[0] == '!') 8827 return unregister_ftrace_function_probe_func(glob+1, tr, ops); 8828 8829 if (!param) 8830 goto out_reg; 8831 8832 number = strsep(¶m, ":"); 8833 8834 if (!strlen(number)) 8835 goto out_reg; 8836 8837 /* 8838 * We use the callback data field (which is a pointer) 8839 * as our counter. 8840 */ 8841 ret = kstrtoul(number, 0, (unsigned long *)&count); 8842 if (ret) 8843 return ret; 8844 8845 out_reg: 8846 ret = tracing_alloc_snapshot_instance(tr); 8847 if (ret < 0) 8848 goto out; 8849 8850 ret = register_ftrace_function_probe(glob, tr, ops, count); 8851 8852 out: 8853 return ret < 0 ? ret : 0; 8854 } 8855 8856 static struct ftrace_func_command ftrace_snapshot_cmd = { 8857 .name = "snapshot", 8858 .func = ftrace_trace_snapshot_callback, 8859 }; 8860 8861 static __init int register_snapshot_cmd(void) 8862 { 8863 return register_ftrace_command(&ftrace_snapshot_cmd); 8864 } 8865 #else 8866 static inline __init int register_snapshot_cmd(void) { return 0; } 8867 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */ 8868 8869 static struct dentry *tracing_get_dentry(struct trace_array *tr) 8870 { 8871 if (WARN_ON(!tr->dir)) 8872 return ERR_PTR(-ENODEV); 8873 8874 /* Top directory uses NULL as the parent */ 8875 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 8876 return NULL; 8877 8878 /* All sub buffers have a descriptor */ 8879 return tr->dir; 8880 } 8881 8882 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) 8883 { 8884 struct dentry *d_tracer; 8885 8886 if (tr->percpu_dir) 8887 return tr->percpu_dir; 8888 8889 d_tracer = tracing_get_dentry(tr); 8890 if (IS_ERR(d_tracer)) 8891 return NULL; 8892 8893 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer); 8894 8895 MEM_FAIL(!tr->percpu_dir, 8896 "Could not create tracefs directory 'per_cpu/%d'\n", cpu); 8897 8898 return tr->percpu_dir; 8899 } 8900 8901 static struct dentry * 8902 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent, 8903 void *data, long cpu, const struct file_operations *fops) 8904 { 8905 struct dentry *ret = trace_create_file(name, mode, parent, data, fops); 8906 8907 if (ret) /* See tracing_get_cpu() */ 8908 d_inode(ret)->i_cdev = (void *)(cpu + 1); 8909 return ret; 8910 } 8911 8912 static void 8913 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) 8914 { 8915 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); 8916 struct dentry *d_cpu; 8917 char cpu_dir[30]; /* 30 characters should be more than enough */ 8918 8919 if (!d_percpu) 8920 return; 8921 8922 snprintf(cpu_dir, 30, "cpu%ld", cpu); 8923 d_cpu = tracefs_create_dir(cpu_dir, d_percpu); 8924 if (!d_cpu) { 8925 pr_warn("Could not create tracefs '%s' entry\n", cpu_dir); 8926 return; 8927 } 8928 8929 /* per cpu trace_pipe */ 8930 trace_create_cpu_file("trace_pipe", TRACE_MODE_READ, d_cpu, 8931 tr, cpu, &tracing_pipe_fops); 8932 8933 /* per cpu trace */ 8934 trace_create_cpu_file("trace", TRACE_MODE_WRITE, d_cpu, 8935 tr, cpu, &tracing_fops); 8936 8937 trace_create_cpu_file("trace_pipe_raw", TRACE_MODE_READ, d_cpu, 8938 tr, cpu, &tracing_buffers_fops); 8939 8940 trace_create_cpu_file("stats", TRACE_MODE_READ, d_cpu, 8941 tr, cpu, &tracing_stats_fops); 8942 8943 trace_create_cpu_file("buffer_size_kb", TRACE_MODE_READ, d_cpu, 8944 tr, cpu, &tracing_entries_fops); 8945 8946 #ifdef CONFIG_TRACER_SNAPSHOT 8947 trace_create_cpu_file("snapshot", TRACE_MODE_WRITE, d_cpu, 8948 tr, cpu, &snapshot_fops); 8949 8950 trace_create_cpu_file("snapshot_raw", TRACE_MODE_READ, d_cpu, 8951 tr, cpu, &snapshot_raw_fops); 8952 #endif 8953 } 8954 8955 #ifdef CONFIG_FTRACE_SELFTEST 8956 /* Let selftest have access to static functions in this file */ 8957 #include "trace_selftest.c" 8958 #endif 8959 8960 static ssize_t 8961 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt, 8962 loff_t *ppos) 8963 { 8964 struct trace_option_dentry *topt = filp->private_data; 8965 char *buf; 8966 8967 if (topt->flags->val & topt->opt->bit) 8968 buf = "1\n"; 8969 else 8970 buf = "0\n"; 8971 8972 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 8973 } 8974 8975 static ssize_t 8976 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt, 8977 loff_t *ppos) 8978 { 8979 struct trace_option_dentry *topt = filp->private_data; 8980 unsigned long val; 8981 int ret; 8982 8983 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 8984 if (ret) 8985 return ret; 8986 8987 if (val != 0 && val != 1) 8988 return -EINVAL; 8989 8990 if (!!(topt->flags->val & topt->opt->bit) != val) { 8991 mutex_lock(&trace_types_lock); 8992 ret = __set_tracer_option(topt->tr, topt->flags, 8993 topt->opt, !val); 8994 mutex_unlock(&trace_types_lock); 8995 if (ret) 8996 return ret; 8997 } 8998 8999 *ppos += cnt; 9000 9001 return cnt; 9002 } 9003 9004 static int tracing_open_options(struct inode *inode, struct file *filp) 9005 { 9006 struct trace_option_dentry *topt = inode->i_private; 9007 int ret; 9008 9009 ret = tracing_check_open_get_tr(topt->tr); 9010 if (ret) 9011 return ret; 9012 9013 filp->private_data = inode->i_private; 9014 return 0; 9015 } 9016 9017 static int tracing_release_options(struct inode *inode, struct file *file) 9018 { 9019 struct trace_option_dentry *topt = file->private_data; 9020 9021 trace_array_put(topt->tr); 9022 return 0; 9023 } 9024 9025 static const struct file_operations trace_options_fops = { 9026 .open = tracing_open_options, 9027 .read = trace_options_read, 9028 .write = trace_options_write, 9029 .llseek = generic_file_llseek, 9030 .release = tracing_release_options, 9031 }; 9032 9033 /* 9034 * In order to pass in both the trace_array descriptor as well as the index 9035 * to the flag that the trace option file represents, the trace_array 9036 * has a character array of trace_flags_index[], which holds the index 9037 * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc. 9038 * The address of this character array is passed to the flag option file 9039 * read/write callbacks. 9040 * 9041 * In order to extract both the index and the trace_array descriptor, 9042 * get_tr_index() uses the following algorithm. 9043 * 9044 * idx = *ptr; 9045 * 9046 * As the pointer itself contains the address of the index (remember 9047 * index[1] == 1). 9048 * 9049 * Then to get the trace_array descriptor, by subtracting that index 9050 * from the ptr, we get to the start of the index itself. 9051 * 9052 * ptr - idx == &index[0] 9053 * 9054 * Then a simple container_of() from that pointer gets us to the 9055 * trace_array descriptor. 9056 */ 9057 static void get_tr_index(void *data, struct trace_array **ptr, 9058 unsigned int *pindex) 9059 { 9060 *pindex = *(unsigned char *)data; 9061 9062 *ptr = container_of(data - *pindex, struct trace_array, 9063 trace_flags_index); 9064 } 9065 9066 static ssize_t 9067 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt, 9068 loff_t *ppos) 9069 { 9070 void *tr_index = filp->private_data; 9071 struct trace_array *tr; 9072 unsigned int index; 9073 char *buf; 9074 9075 get_tr_index(tr_index, &tr, &index); 9076 9077 if (tr->trace_flags & (1 << index)) 9078 buf = "1\n"; 9079 else 9080 buf = "0\n"; 9081 9082 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 9083 } 9084 9085 static ssize_t 9086 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt, 9087 loff_t *ppos) 9088 { 9089 void *tr_index = filp->private_data; 9090 struct trace_array *tr; 9091 unsigned int index; 9092 unsigned long val; 9093 int ret; 9094 9095 get_tr_index(tr_index, &tr, &index); 9096 9097 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 9098 if (ret) 9099 return ret; 9100 9101 if (val != 0 && val != 1) 9102 return -EINVAL; 9103 9104 mutex_lock(&event_mutex); 9105 mutex_lock(&trace_types_lock); 9106 ret = set_tracer_flag(tr, 1 << index, val); 9107 mutex_unlock(&trace_types_lock); 9108 mutex_unlock(&event_mutex); 9109 9110 if (ret < 0) 9111 return ret; 9112 9113 *ppos += cnt; 9114 9115 return cnt; 9116 } 9117 9118 static const struct file_operations trace_options_core_fops = { 9119 .open = tracing_open_generic, 9120 .read = trace_options_core_read, 9121 .write = trace_options_core_write, 9122 .llseek = generic_file_llseek, 9123 }; 9124 9125 struct dentry *trace_create_file(const char *name, 9126 umode_t mode, 9127 struct dentry *parent, 9128 void *data, 9129 const struct file_operations *fops) 9130 { 9131 struct dentry *ret; 9132 9133 ret = tracefs_create_file(name, mode, parent, data, fops); 9134 if (!ret) 9135 pr_warn("Could not create tracefs '%s' entry\n", name); 9136 9137 return ret; 9138 } 9139 9140 9141 static struct dentry *trace_options_init_dentry(struct trace_array *tr) 9142 { 9143 struct dentry *d_tracer; 9144 9145 if (tr->options) 9146 return tr->options; 9147 9148 d_tracer = tracing_get_dentry(tr); 9149 if (IS_ERR(d_tracer)) 9150 return NULL; 9151 9152 tr->options = tracefs_create_dir("options", d_tracer); 9153 if (!tr->options) { 9154 pr_warn("Could not create tracefs directory 'options'\n"); 9155 return NULL; 9156 } 9157 9158 return tr->options; 9159 } 9160 9161 static void 9162 create_trace_option_file(struct trace_array *tr, 9163 struct trace_option_dentry *topt, 9164 struct tracer_flags *flags, 9165 struct tracer_opt *opt) 9166 { 9167 struct dentry *t_options; 9168 9169 t_options = trace_options_init_dentry(tr); 9170 if (!t_options) 9171 return; 9172 9173 topt->flags = flags; 9174 topt->opt = opt; 9175 topt->tr = tr; 9176 9177 topt->entry = trace_create_file(opt->name, TRACE_MODE_WRITE, 9178 t_options, topt, &trace_options_fops); 9179 9180 } 9181 9182 static void 9183 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) 9184 { 9185 struct trace_option_dentry *topts; 9186 struct trace_options *tr_topts; 9187 struct tracer_flags *flags; 9188 struct tracer_opt *opts; 9189 int cnt; 9190 int i; 9191 9192 if (!tracer) 9193 return; 9194 9195 flags = tracer->flags; 9196 9197 if (!flags || !flags->opts) 9198 return; 9199 9200 /* 9201 * If this is an instance, only create flags for tracers 9202 * the instance may have. 9203 */ 9204 if (!trace_ok_for_array(tracer, tr)) 9205 return; 9206 9207 for (i = 0; i < tr->nr_topts; i++) { 9208 /* Make sure there's no duplicate flags. */ 9209 if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags)) 9210 return; 9211 } 9212 9213 opts = flags->opts; 9214 9215 for (cnt = 0; opts[cnt].name; cnt++) 9216 ; 9217 9218 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL); 9219 if (!topts) 9220 return; 9221 9222 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), 9223 GFP_KERNEL); 9224 if (!tr_topts) { 9225 kfree(topts); 9226 return; 9227 } 9228 9229 tr->topts = tr_topts; 9230 tr->topts[tr->nr_topts].tracer = tracer; 9231 tr->topts[tr->nr_topts].topts = topts; 9232 tr->nr_topts++; 9233 9234 for (cnt = 0; opts[cnt].name; cnt++) { 9235 create_trace_option_file(tr, &topts[cnt], flags, 9236 &opts[cnt]); 9237 MEM_FAIL(topts[cnt].entry == NULL, 9238 "Failed to create trace option: %s", 9239 opts[cnt].name); 9240 } 9241 } 9242 9243 static struct dentry * 9244 create_trace_option_core_file(struct trace_array *tr, 9245 const char *option, long index) 9246 { 9247 struct dentry *t_options; 9248 9249 t_options = trace_options_init_dentry(tr); 9250 if (!t_options) 9251 return NULL; 9252 9253 return trace_create_file(option, TRACE_MODE_WRITE, t_options, 9254 (void *)&tr->trace_flags_index[index], 9255 &trace_options_core_fops); 9256 } 9257 9258 static void create_trace_options_dir(struct trace_array *tr) 9259 { 9260 struct dentry *t_options; 9261 bool top_level = tr == &global_trace; 9262 int i; 9263 9264 t_options = trace_options_init_dentry(tr); 9265 if (!t_options) 9266 return; 9267 9268 for (i = 0; trace_options[i]; i++) { 9269 if (top_level || 9270 !((1 << i) & TOP_LEVEL_TRACE_FLAGS)) 9271 create_trace_option_core_file(tr, trace_options[i], i); 9272 } 9273 } 9274 9275 static ssize_t 9276 rb_simple_read(struct file *filp, char __user *ubuf, 9277 size_t cnt, loff_t *ppos) 9278 { 9279 struct trace_array *tr = filp->private_data; 9280 char buf[64]; 9281 int r; 9282 9283 r = tracer_tracing_is_on(tr); 9284 r = sprintf(buf, "%d\n", r); 9285 9286 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 9287 } 9288 9289 static ssize_t 9290 rb_simple_write(struct file *filp, const char __user *ubuf, 9291 size_t cnt, loff_t *ppos) 9292 { 9293 struct trace_array *tr = filp->private_data; 9294 struct trace_buffer *buffer = tr->array_buffer.buffer; 9295 unsigned long val; 9296 int ret; 9297 9298 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 9299 if (ret) 9300 return ret; 9301 9302 if (buffer) { 9303 mutex_lock(&trace_types_lock); 9304 if (!!val == tracer_tracing_is_on(tr)) { 9305 val = 0; /* do nothing */ 9306 } else if (val) { 9307 tracer_tracing_on(tr); 9308 if (tr->current_trace->start) 9309 tr->current_trace->start(tr); 9310 } else { 9311 tracer_tracing_off(tr); 9312 if (tr->current_trace->stop) 9313 tr->current_trace->stop(tr); 9314 /* Wake up any waiters */ 9315 ring_buffer_wake_waiters(buffer, RING_BUFFER_ALL_CPUS); 9316 } 9317 mutex_unlock(&trace_types_lock); 9318 } 9319 9320 (*ppos)++; 9321 9322 return cnt; 9323 } 9324 9325 static const struct file_operations rb_simple_fops = { 9326 .open = tracing_open_generic_tr, 9327 .read = rb_simple_read, 9328 .write = rb_simple_write, 9329 .release = tracing_release_generic_tr, 9330 .llseek = default_llseek, 9331 }; 9332 9333 static ssize_t 9334 buffer_percent_read(struct file *filp, char __user *ubuf, 9335 size_t cnt, loff_t *ppos) 9336 { 9337 struct trace_array *tr = filp->private_data; 9338 char buf[64]; 9339 int r; 9340 9341 r = tr->buffer_percent; 9342 r = sprintf(buf, "%d\n", r); 9343 9344 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 9345 } 9346 9347 static ssize_t 9348 buffer_percent_write(struct file *filp, const char __user *ubuf, 9349 size_t cnt, loff_t *ppos) 9350 { 9351 struct trace_array *tr = filp->private_data; 9352 unsigned long val; 9353 int ret; 9354 9355 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 9356 if (ret) 9357 return ret; 9358 9359 if (val > 100) 9360 return -EINVAL; 9361 9362 tr->buffer_percent = val; 9363 9364 (*ppos)++; 9365 9366 return cnt; 9367 } 9368 9369 static const struct file_operations buffer_percent_fops = { 9370 .open = tracing_open_generic_tr, 9371 .read = buffer_percent_read, 9372 .write = buffer_percent_write, 9373 .release = tracing_release_generic_tr, 9374 .llseek = default_llseek, 9375 }; 9376 9377 static struct dentry *trace_instance_dir; 9378 9379 static void 9380 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer); 9381 9382 static int 9383 allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, int size) 9384 { 9385 enum ring_buffer_flags rb_flags; 9386 9387 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; 9388 9389 buf->tr = tr; 9390 9391 buf->buffer = ring_buffer_alloc(size, rb_flags); 9392 if (!buf->buffer) 9393 return -ENOMEM; 9394 9395 buf->data = alloc_percpu(struct trace_array_cpu); 9396 if (!buf->data) { 9397 ring_buffer_free(buf->buffer); 9398 buf->buffer = NULL; 9399 return -ENOMEM; 9400 } 9401 9402 /* Allocate the first page for all buffers */ 9403 set_buffer_entries(&tr->array_buffer, 9404 ring_buffer_size(tr->array_buffer.buffer, 0)); 9405 9406 return 0; 9407 } 9408 9409 static void free_trace_buffer(struct array_buffer *buf) 9410 { 9411 if (buf->buffer) { 9412 ring_buffer_free(buf->buffer); 9413 buf->buffer = NULL; 9414 free_percpu(buf->data); 9415 buf->data = NULL; 9416 } 9417 } 9418 9419 static int allocate_trace_buffers(struct trace_array *tr, int size) 9420 { 9421 int ret; 9422 9423 ret = allocate_trace_buffer(tr, &tr->array_buffer, size); 9424 if (ret) 9425 return ret; 9426 9427 #ifdef CONFIG_TRACER_MAX_TRACE 9428 ret = allocate_trace_buffer(tr, &tr->max_buffer, 9429 allocate_snapshot ? size : 1); 9430 if (MEM_FAIL(ret, "Failed to allocate trace buffer\n")) { 9431 free_trace_buffer(&tr->array_buffer); 9432 return -ENOMEM; 9433 } 9434 tr->allocated_snapshot = allocate_snapshot; 9435 9436 allocate_snapshot = false; 9437 #endif 9438 9439 return 0; 9440 } 9441 9442 static void free_trace_buffers(struct trace_array *tr) 9443 { 9444 if (!tr) 9445 return; 9446 9447 free_trace_buffer(&tr->array_buffer); 9448 9449 #ifdef CONFIG_TRACER_MAX_TRACE 9450 free_trace_buffer(&tr->max_buffer); 9451 #endif 9452 } 9453 9454 static void init_trace_flags_index(struct trace_array *tr) 9455 { 9456 int i; 9457 9458 /* Used by the trace options files */ 9459 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) 9460 tr->trace_flags_index[i] = i; 9461 } 9462 9463 static void __update_tracer_options(struct trace_array *tr) 9464 { 9465 struct tracer *t; 9466 9467 for (t = trace_types; t; t = t->next) 9468 add_tracer_options(tr, t); 9469 } 9470 9471 static void update_tracer_options(struct trace_array *tr) 9472 { 9473 mutex_lock(&trace_types_lock); 9474 tracer_options_updated = true; 9475 __update_tracer_options(tr); 9476 mutex_unlock(&trace_types_lock); 9477 } 9478 9479 /* Must have trace_types_lock held */ 9480 struct trace_array *trace_array_find(const char *instance) 9481 { 9482 struct trace_array *tr, *found = NULL; 9483 9484 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 9485 if (tr->name && strcmp(tr->name, instance) == 0) { 9486 found = tr; 9487 break; 9488 } 9489 } 9490 9491 return found; 9492 } 9493 9494 struct trace_array *trace_array_find_get(const char *instance) 9495 { 9496 struct trace_array *tr; 9497 9498 mutex_lock(&trace_types_lock); 9499 tr = trace_array_find(instance); 9500 if (tr) 9501 tr->ref++; 9502 mutex_unlock(&trace_types_lock); 9503 9504 return tr; 9505 } 9506 9507 static int trace_array_create_dir(struct trace_array *tr) 9508 { 9509 int ret; 9510 9511 tr->dir = tracefs_create_dir(tr->name, trace_instance_dir); 9512 if (!tr->dir) 9513 return -EINVAL; 9514 9515 ret = event_trace_add_tracer(tr->dir, tr); 9516 if (ret) { 9517 tracefs_remove(tr->dir); 9518 return ret; 9519 } 9520 9521 init_tracer_tracefs(tr, tr->dir); 9522 __update_tracer_options(tr); 9523 9524 return ret; 9525 } 9526 9527 static struct trace_array *trace_array_create(const char *name) 9528 { 9529 struct trace_array *tr; 9530 int ret; 9531 9532 ret = -ENOMEM; 9533 tr = kzalloc(sizeof(*tr), GFP_KERNEL); 9534 if (!tr) 9535 return ERR_PTR(ret); 9536 9537 tr->name = kstrdup(name, GFP_KERNEL); 9538 if (!tr->name) 9539 goto out_free_tr; 9540 9541 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) 9542 goto out_free_tr; 9543 9544 if (!zalloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL)) 9545 goto out_free_tr; 9546 9547 tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS; 9548 9549 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); 9550 9551 raw_spin_lock_init(&tr->start_lock); 9552 9553 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 9554 9555 tr->current_trace = &nop_trace; 9556 9557 INIT_LIST_HEAD(&tr->systems); 9558 INIT_LIST_HEAD(&tr->events); 9559 INIT_LIST_HEAD(&tr->hist_vars); 9560 INIT_LIST_HEAD(&tr->err_log); 9561 9562 if (allocate_trace_buffers(tr, trace_buf_size) < 0) 9563 goto out_free_tr; 9564 9565 if (ftrace_allocate_ftrace_ops(tr) < 0) 9566 goto out_free_tr; 9567 9568 ftrace_init_trace_array(tr); 9569 9570 init_trace_flags_index(tr); 9571 9572 if (trace_instance_dir) { 9573 ret = trace_array_create_dir(tr); 9574 if (ret) 9575 goto out_free_tr; 9576 } else 9577 __trace_early_add_events(tr); 9578 9579 list_add(&tr->list, &ftrace_trace_arrays); 9580 9581 tr->ref++; 9582 9583 return tr; 9584 9585 out_free_tr: 9586 ftrace_free_ftrace_ops(tr); 9587 free_trace_buffers(tr); 9588 free_cpumask_var(tr->pipe_cpumask); 9589 free_cpumask_var(tr->tracing_cpumask); 9590 kfree(tr->name); 9591 kfree(tr); 9592 9593 return ERR_PTR(ret); 9594 } 9595 9596 static int instance_mkdir(const char *name) 9597 { 9598 struct trace_array *tr; 9599 int ret; 9600 9601 mutex_lock(&event_mutex); 9602 mutex_lock(&trace_types_lock); 9603 9604 ret = -EEXIST; 9605 if (trace_array_find(name)) 9606 goto out_unlock; 9607 9608 tr = trace_array_create(name); 9609 9610 ret = PTR_ERR_OR_ZERO(tr); 9611 9612 out_unlock: 9613 mutex_unlock(&trace_types_lock); 9614 mutex_unlock(&event_mutex); 9615 return ret; 9616 } 9617 9618 /** 9619 * trace_array_get_by_name - Create/Lookup a trace array, given its name. 9620 * @name: The name of the trace array to be looked up/created. 9621 * 9622 * Returns pointer to trace array with given name. 9623 * NULL, if it cannot be created. 9624 * 9625 * NOTE: This function increments the reference counter associated with the 9626 * trace array returned. This makes sure it cannot be freed while in use. 9627 * Use trace_array_put() once the trace array is no longer needed. 9628 * If the trace_array is to be freed, trace_array_destroy() needs to 9629 * be called after the trace_array_put(), or simply let user space delete 9630 * it from the tracefs instances directory. But until the 9631 * trace_array_put() is called, user space can not delete it. 9632 * 9633 */ 9634 struct trace_array *trace_array_get_by_name(const char *name) 9635 { 9636 struct trace_array *tr; 9637 9638 mutex_lock(&event_mutex); 9639 mutex_lock(&trace_types_lock); 9640 9641 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 9642 if (tr->name && strcmp(tr->name, name) == 0) 9643 goto out_unlock; 9644 } 9645 9646 tr = trace_array_create(name); 9647 9648 if (IS_ERR(tr)) 9649 tr = NULL; 9650 out_unlock: 9651 if (tr) 9652 tr->ref++; 9653 9654 mutex_unlock(&trace_types_lock); 9655 mutex_unlock(&event_mutex); 9656 return tr; 9657 } 9658 EXPORT_SYMBOL_GPL(trace_array_get_by_name); 9659 9660 static int __remove_instance(struct trace_array *tr) 9661 { 9662 int i; 9663 9664 /* Reference counter for a newly created trace array = 1. */ 9665 if (tr->ref > 1 || (tr->current_trace && tr->trace_ref)) 9666 return -EBUSY; 9667 9668 list_del(&tr->list); 9669 9670 /* Disable all the flags that were enabled coming in */ 9671 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) { 9672 if ((1 << i) & ZEROED_TRACE_FLAGS) 9673 set_tracer_flag(tr, 1 << i, 0); 9674 } 9675 9676 tracing_set_nop(tr); 9677 clear_ftrace_function_probes(tr); 9678 event_trace_del_tracer(tr); 9679 ftrace_clear_pids(tr); 9680 ftrace_destroy_function_files(tr); 9681 tracefs_remove(tr->dir); 9682 free_percpu(tr->last_func_repeats); 9683 free_trace_buffers(tr); 9684 clear_tracing_err_log(tr); 9685 9686 for (i = 0; i < tr->nr_topts; i++) { 9687 kfree(tr->topts[i].topts); 9688 } 9689 kfree(tr->topts); 9690 9691 free_cpumask_var(tr->pipe_cpumask); 9692 free_cpumask_var(tr->tracing_cpumask); 9693 kfree(tr->name); 9694 kfree(tr); 9695 9696 return 0; 9697 } 9698 9699 int trace_array_destroy(struct trace_array *this_tr) 9700 { 9701 struct trace_array *tr; 9702 int ret; 9703 9704 if (!this_tr) 9705 return -EINVAL; 9706 9707 mutex_lock(&event_mutex); 9708 mutex_lock(&trace_types_lock); 9709 9710 ret = -ENODEV; 9711 9712 /* Making sure trace array exists before destroying it. */ 9713 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 9714 if (tr == this_tr) { 9715 ret = __remove_instance(tr); 9716 break; 9717 } 9718 } 9719 9720 mutex_unlock(&trace_types_lock); 9721 mutex_unlock(&event_mutex); 9722 9723 return ret; 9724 } 9725 EXPORT_SYMBOL_GPL(trace_array_destroy); 9726 9727 static int instance_rmdir(const char *name) 9728 { 9729 struct trace_array *tr; 9730 int ret; 9731 9732 mutex_lock(&event_mutex); 9733 mutex_lock(&trace_types_lock); 9734 9735 ret = -ENODEV; 9736 tr = trace_array_find(name); 9737 if (tr) 9738 ret = __remove_instance(tr); 9739 9740 mutex_unlock(&trace_types_lock); 9741 mutex_unlock(&event_mutex); 9742 9743 return ret; 9744 } 9745 9746 static __init void create_trace_instances(struct dentry *d_tracer) 9747 { 9748 struct trace_array *tr; 9749 9750 trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer, 9751 instance_mkdir, 9752 instance_rmdir); 9753 if (MEM_FAIL(!trace_instance_dir, "Failed to create instances directory\n")) 9754 return; 9755 9756 mutex_lock(&event_mutex); 9757 mutex_lock(&trace_types_lock); 9758 9759 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 9760 if (!tr->name) 9761 continue; 9762 if (MEM_FAIL(trace_array_create_dir(tr) < 0, 9763 "Failed to create instance directory\n")) 9764 break; 9765 } 9766 9767 mutex_unlock(&trace_types_lock); 9768 mutex_unlock(&event_mutex); 9769 } 9770 9771 static void 9772 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) 9773 { 9774 int cpu; 9775 9776 trace_create_file("available_tracers", TRACE_MODE_READ, d_tracer, 9777 tr, &show_traces_fops); 9778 9779 trace_create_file("current_tracer", TRACE_MODE_WRITE, d_tracer, 9780 tr, &set_tracer_fops); 9781 9782 trace_create_file("tracing_cpumask", TRACE_MODE_WRITE, d_tracer, 9783 tr, &tracing_cpumask_fops); 9784 9785 trace_create_file("trace_options", TRACE_MODE_WRITE, d_tracer, 9786 tr, &tracing_iter_fops); 9787 9788 trace_create_file("trace", TRACE_MODE_WRITE, d_tracer, 9789 tr, &tracing_fops); 9790 9791 trace_create_file("trace_pipe", TRACE_MODE_READ, d_tracer, 9792 tr, &tracing_pipe_fops); 9793 9794 trace_create_file("buffer_size_kb", TRACE_MODE_WRITE, d_tracer, 9795 tr, &tracing_entries_fops); 9796 9797 trace_create_file("buffer_total_size_kb", TRACE_MODE_READ, d_tracer, 9798 tr, &tracing_total_entries_fops); 9799 9800 trace_create_file("free_buffer", 0200, d_tracer, 9801 tr, &tracing_free_buffer_fops); 9802 9803 trace_create_file("trace_marker", 0220, d_tracer, 9804 tr, &tracing_mark_fops); 9805 9806 tr->trace_marker_file = __find_event_file(tr, "ftrace", "print"); 9807 9808 trace_create_file("trace_marker_raw", 0220, d_tracer, 9809 tr, &tracing_mark_raw_fops); 9810 9811 trace_create_file("trace_clock", TRACE_MODE_WRITE, d_tracer, tr, 9812 &trace_clock_fops); 9813 9814 trace_create_file("tracing_on", TRACE_MODE_WRITE, d_tracer, 9815 tr, &rb_simple_fops); 9816 9817 trace_create_file("timestamp_mode", TRACE_MODE_READ, d_tracer, tr, 9818 &trace_time_stamp_mode_fops); 9819 9820 tr->buffer_percent = 50; 9821 9822 trace_create_file("buffer_percent", TRACE_MODE_WRITE, d_tracer, 9823 tr, &buffer_percent_fops); 9824 9825 create_trace_options_dir(tr); 9826 9827 #ifdef CONFIG_TRACER_MAX_TRACE 9828 trace_create_maxlat_file(tr, d_tracer); 9829 #endif 9830 9831 if (ftrace_create_function_files(tr, d_tracer)) 9832 MEM_FAIL(1, "Could not allocate function filter files"); 9833 9834 #ifdef CONFIG_TRACER_SNAPSHOT 9835 trace_create_file("snapshot", TRACE_MODE_WRITE, d_tracer, 9836 tr, &snapshot_fops); 9837 #endif 9838 9839 trace_create_file("error_log", TRACE_MODE_WRITE, d_tracer, 9840 tr, &tracing_err_log_fops); 9841 9842 for_each_tracing_cpu(cpu) 9843 tracing_init_tracefs_percpu(tr, cpu); 9844 9845 ftrace_init_tracefs(tr, d_tracer); 9846 } 9847 9848 static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore) 9849 { 9850 struct vfsmount *mnt; 9851 struct file_system_type *type; 9852 9853 /* 9854 * To maintain backward compatibility for tools that mount 9855 * debugfs to get to the tracing facility, tracefs is automatically 9856 * mounted to the debugfs/tracing directory. 9857 */ 9858 type = get_fs_type("tracefs"); 9859 if (!type) 9860 return NULL; 9861 mnt = vfs_submount(mntpt, type, "tracefs", NULL); 9862 put_filesystem(type); 9863 if (IS_ERR(mnt)) 9864 return NULL; 9865 mntget(mnt); 9866 9867 return mnt; 9868 } 9869 9870 /** 9871 * tracing_init_dentry - initialize top level trace array 9872 * 9873 * This is called when creating files or directories in the tracing 9874 * directory. It is called via fs_initcall() by any of the boot up code 9875 * and expects to return the dentry of the top level tracing directory. 9876 */ 9877 int tracing_init_dentry(void) 9878 { 9879 struct trace_array *tr = &global_trace; 9880 9881 if (security_locked_down(LOCKDOWN_TRACEFS)) { 9882 pr_warn("Tracing disabled due to lockdown\n"); 9883 return -EPERM; 9884 } 9885 9886 /* The top level trace array uses NULL as parent */ 9887 if (tr->dir) 9888 return 0; 9889 9890 if (WARN_ON(!tracefs_initialized())) 9891 return -ENODEV; 9892 9893 /* 9894 * As there may still be users that expect the tracing 9895 * files to exist in debugfs/tracing, we must automount 9896 * the tracefs file system there, so older tools still 9897 * work with the newer kernel. 9898 */ 9899 tr->dir = debugfs_create_automount("tracing", NULL, 9900 trace_automount, NULL); 9901 9902 return 0; 9903 } 9904 9905 extern struct trace_eval_map *__start_ftrace_eval_maps[]; 9906 extern struct trace_eval_map *__stop_ftrace_eval_maps[]; 9907 9908 static struct workqueue_struct *eval_map_wq __initdata; 9909 static struct work_struct eval_map_work __initdata; 9910 static struct work_struct tracerfs_init_work __initdata; 9911 9912 static void __init eval_map_work_func(struct work_struct *work) 9913 { 9914 int len; 9915 9916 len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps; 9917 trace_insert_eval_map(NULL, __start_ftrace_eval_maps, len); 9918 } 9919 9920 static int __init trace_eval_init(void) 9921 { 9922 INIT_WORK(&eval_map_work, eval_map_work_func); 9923 9924 eval_map_wq = alloc_workqueue("eval_map_wq", WQ_UNBOUND, 0); 9925 if (!eval_map_wq) { 9926 pr_err("Unable to allocate eval_map_wq\n"); 9927 /* Do work here */ 9928 eval_map_work_func(&eval_map_work); 9929 return -ENOMEM; 9930 } 9931 9932 queue_work(eval_map_wq, &eval_map_work); 9933 return 0; 9934 } 9935 9936 subsys_initcall(trace_eval_init); 9937 9938 static int __init trace_eval_sync(void) 9939 { 9940 /* Make sure the eval map updates are finished */ 9941 if (eval_map_wq) 9942 destroy_workqueue(eval_map_wq); 9943 return 0; 9944 } 9945 9946 late_initcall_sync(trace_eval_sync); 9947 9948 9949 #ifdef CONFIG_MODULES 9950 static void trace_module_add_evals(struct module *mod) 9951 { 9952 if (!mod->num_trace_evals) 9953 return; 9954 9955 /* 9956 * Modules with bad taint do not have events created, do 9957 * not bother with enums either. 9958 */ 9959 if (trace_module_has_bad_taint(mod)) 9960 return; 9961 9962 trace_insert_eval_map(mod, mod->trace_evals, mod->num_trace_evals); 9963 } 9964 9965 #ifdef CONFIG_TRACE_EVAL_MAP_FILE 9966 static void trace_module_remove_evals(struct module *mod) 9967 { 9968 union trace_eval_map_item *map; 9969 union trace_eval_map_item **last = &trace_eval_maps; 9970 9971 if (!mod->num_trace_evals) 9972 return; 9973 9974 mutex_lock(&trace_eval_mutex); 9975 9976 map = trace_eval_maps; 9977 9978 while (map) { 9979 if (map->head.mod == mod) 9980 break; 9981 map = trace_eval_jmp_to_tail(map); 9982 last = &map->tail.next; 9983 map = map->tail.next; 9984 } 9985 if (!map) 9986 goto out; 9987 9988 *last = trace_eval_jmp_to_tail(map)->tail.next; 9989 kfree(map); 9990 out: 9991 mutex_unlock(&trace_eval_mutex); 9992 } 9993 #else 9994 static inline void trace_module_remove_evals(struct module *mod) { } 9995 #endif /* CONFIG_TRACE_EVAL_MAP_FILE */ 9996 9997 static int trace_module_notify(struct notifier_block *self, 9998 unsigned long val, void *data) 9999 { 10000 struct module *mod = data; 10001 10002 switch (val) { 10003 case MODULE_STATE_COMING: 10004 trace_module_add_evals(mod); 10005 break; 10006 case MODULE_STATE_GOING: 10007 trace_module_remove_evals(mod); 10008 break; 10009 } 10010 10011 return NOTIFY_OK; 10012 } 10013 10014 static struct notifier_block trace_module_nb = { 10015 .notifier_call = trace_module_notify, 10016 .priority = 0, 10017 }; 10018 #endif /* CONFIG_MODULES */ 10019 10020 static __init void tracer_init_tracefs_work_func(struct work_struct *work) 10021 { 10022 10023 event_trace_init(); 10024 10025 init_tracer_tracefs(&global_trace, NULL); 10026 ftrace_init_tracefs_toplevel(&global_trace, NULL); 10027 10028 trace_create_file("tracing_thresh", TRACE_MODE_WRITE, NULL, 10029 &global_trace, &tracing_thresh_fops); 10030 10031 trace_create_file("README", TRACE_MODE_READ, NULL, 10032 NULL, &tracing_readme_fops); 10033 10034 trace_create_file("saved_cmdlines", TRACE_MODE_READ, NULL, 10035 NULL, &tracing_saved_cmdlines_fops); 10036 10037 trace_create_file("saved_cmdlines_size", TRACE_MODE_WRITE, NULL, 10038 NULL, &tracing_saved_cmdlines_size_fops); 10039 10040 trace_create_file("saved_tgids", TRACE_MODE_READ, NULL, 10041 NULL, &tracing_saved_tgids_fops); 10042 10043 trace_create_eval_file(NULL); 10044 10045 #ifdef CONFIG_MODULES 10046 register_module_notifier(&trace_module_nb); 10047 #endif 10048 10049 #ifdef CONFIG_DYNAMIC_FTRACE 10050 trace_create_file("dyn_ftrace_total_info", TRACE_MODE_READ, NULL, 10051 NULL, &tracing_dyn_info_fops); 10052 #endif 10053 10054 create_trace_instances(NULL); 10055 10056 update_tracer_options(&global_trace); 10057 } 10058 10059 static __init int tracer_init_tracefs(void) 10060 { 10061 int ret; 10062 10063 trace_access_lock_init(); 10064 10065 ret = tracing_init_dentry(); 10066 if (ret) 10067 return 0; 10068 10069 if (eval_map_wq) { 10070 INIT_WORK(&tracerfs_init_work, tracer_init_tracefs_work_func); 10071 queue_work(eval_map_wq, &tracerfs_init_work); 10072 } else { 10073 tracer_init_tracefs_work_func(NULL); 10074 } 10075 10076 rv_init_interface(); 10077 10078 return 0; 10079 } 10080 10081 fs_initcall(tracer_init_tracefs); 10082 10083 static int trace_die_panic_handler(struct notifier_block *self, 10084 unsigned long ev, void *unused); 10085 10086 static struct notifier_block trace_panic_notifier = { 10087 .notifier_call = trace_die_panic_handler, 10088 .priority = INT_MAX - 1, 10089 }; 10090 10091 static struct notifier_block trace_die_notifier = { 10092 .notifier_call = trace_die_panic_handler, 10093 .priority = INT_MAX - 1, 10094 }; 10095 10096 /* 10097 * The idea is to execute the following die/panic callback early, in order 10098 * to avoid showing irrelevant information in the trace (like other panic 10099 * notifier functions); we are the 2nd to run, after hung_task/rcu_stall 10100 * warnings get disabled (to prevent potential log flooding). 10101 */ 10102 static int trace_die_panic_handler(struct notifier_block *self, 10103 unsigned long ev, void *unused) 10104 { 10105 if (!ftrace_dump_on_oops) 10106 return NOTIFY_DONE; 10107 10108 /* The die notifier requires DIE_OOPS to trigger */ 10109 if (self == &trace_die_notifier && ev != DIE_OOPS) 10110 return NOTIFY_DONE; 10111 10112 ftrace_dump(ftrace_dump_on_oops); 10113 10114 return NOTIFY_DONE; 10115 } 10116 10117 /* 10118 * printk is set to max of 1024, we really don't need it that big. 10119 * Nothing should be printing 1000 characters anyway. 10120 */ 10121 #define TRACE_MAX_PRINT 1000 10122 10123 /* 10124 * Define here KERN_TRACE so that we have one place to modify 10125 * it if we decide to change what log level the ftrace dump 10126 * should be at. 10127 */ 10128 #define KERN_TRACE KERN_EMERG 10129 10130 void 10131 trace_printk_seq(struct trace_seq *s) 10132 { 10133 /* Probably should print a warning here. */ 10134 if (s->seq.len >= TRACE_MAX_PRINT) 10135 s->seq.len = TRACE_MAX_PRINT; 10136 10137 /* 10138 * More paranoid code. Although the buffer size is set to 10139 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just 10140 * an extra layer of protection. 10141 */ 10142 if (WARN_ON_ONCE(s->seq.len >= s->seq.size)) 10143 s->seq.len = s->seq.size - 1; 10144 10145 /* should be zero ended, but we are paranoid. */ 10146 s->buffer[s->seq.len] = 0; 10147 10148 printk(KERN_TRACE "%s", s->buffer); 10149 10150 trace_seq_init(s); 10151 } 10152 10153 void trace_init_global_iter(struct trace_iterator *iter) 10154 { 10155 iter->tr = &global_trace; 10156 iter->trace = iter->tr->current_trace; 10157 iter->cpu_file = RING_BUFFER_ALL_CPUS; 10158 iter->array_buffer = &global_trace.array_buffer; 10159 10160 if (iter->trace && iter->trace->open) 10161 iter->trace->open(iter); 10162 10163 /* Annotate start of buffers if we had overruns */ 10164 if (ring_buffer_overruns(iter->array_buffer->buffer)) 10165 iter->iter_flags |= TRACE_FILE_ANNOTATE; 10166 10167 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 10168 if (trace_clocks[iter->tr->clock_id].in_ns) 10169 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 10170 10171 /* Can not use kmalloc for iter.temp and iter.fmt */ 10172 iter->temp = static_temp_buf; 10173 iter->temp_size = STATIC_TEMP_BUF_SIZE; 10174 iter->fmt = static_fmt_buf; 10175 iter->fmt_size = STATIC_FMT_BUF_SIZE; 10176 } 10177 10178 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) 10179 { 10180 /* use static because iter can be a bit big for the stack */ 10181 static struct trace_iterator iter; 10182 static atomic_t dump_running; 10183 struct trace_array *tr = &global_trace; 10184 unsigned int old_userobj; 10185 unsigned long flags; 10186 int cnt = 0, cpu; 10187 10188 /* Only allow one dump user at a time. */ 10189 if (atomic_inc_return(&dump_running) != 1) { 10190 atomic_dec(&dump_running); 10191 return; 10192 } 10193 10194 /* 10195 * Always turn off tracing when we dump. 10196 * We don't need to show trace output of what happens 10197 * between multiple crashes. 10198 * 10199 * If the user does a sysrq-z, then they can re-enable 10200 * tracing with echo 1 > tracing_on. 10201 */ 10202 tracing_off(); 10203 10204 local_irq_save(flags); 10205 10206 /* Simulate the iterator */ 10207 trace_init_global_iter(&iter); 10208 10209 for_each_tracing_cpu(cpu) { 10210 atomic_inc(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled); 10211 } 10212 10213 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ; 10214 10215 /* don't look at user memory in panic mode */ 10216 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ; 10217 10218 switch (oops_dump_mode) { 10219 case DUMP_ALL: 10220 iter.cpu_file = RING_BUFFER_ALL_CPUS; 10221 break; 10222 case DUMP_ORIG: 10223 iter.cpu_file = raw_smp_processor_id(); 10224 break; 10225 case DUMP_NONE: 10226 goto out_enable; 10227 default: 10228 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n"); 10229 iter.cpu_file = RING_BUFFER_ALL_CPUS; 10230 } 10231 10232 printk(KERN_TRACE "Dumping ftrace buffer:\n"); 10233 10234 /* Did function tracer already get disabled? */ 10235 if (ftrace_is_dead()) { 10236 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n"); 10237 printk("# MAY BE MISSING FUNCTION EVENTS\n"); 10238 } 10239 10240 /* 10241 * We need to stop all tracing on all CPUS to read 10242 * the next buffer. This is a bit expensive, but is 10243 * not done often. We fill all what we can read, 10244 * and then release the locks again. 10245 */ 10246 10247 while (!trace_empty(&iter)) { 10248 10249 if (!cnt) 10250 printk(KERN_TRACE "---------------------------------\n"); 10251 10252 cnt++; 10253 10254 trace_iterator_reset(&iter); 10255 iter.iter_flags |= TRACE_FILE_LAT_FMT; 10256 10257 if (trace_find_next_entry_inc(&iter) != NULL) { 10258 int ret; 10259 10260 ret = print_trace_line(&iter); 10261 if (ret != TRACE_TYPE_NO_CONSUME) 10262 trace_consume(&iter); 10263 } 10264 touch_nmi_watchdog(); 10265 10266 trace_printk_seq(&iter.seq); 10267 } 10268 10269 if (!cnt) 10270 printk(KERN_TRACE " (ftrace buffer empty)\n"); 10271 else 10272 printk(KERN_TRACE "---------------------------------\n"); 10273 10274 out_enable: 10275 tr->trace_flags |= old_userobj; 10276 10277 for_each_tracing_cpu(cpu) { 10278 atomic_dec(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled); 10279 } 10280 atomic_dec(&dump_running); 10281 local_irq_restore(flags); 10282 } 10283 EXPORT_SYMBOL_GPL(ftrace_dump); 10284 10285 #define WRITE_BUFSIZE 4096 10286 10287 ssize_t trace_parse_run_command(struct file *file, const char __user *buffer, 10288 size_t count, loff_t *ppos, 10289 int (*createfn)(const char *)) 10290 { 10291 char *kbuf, *buf, *tmp; 10292 int ret = 0; 10293 size_t done = 0; 10294 size_t size; 10295 10296 kbuf = kmalloc(WRITE_BUFSIZE, GFP_KERNEL); 10297 if (!kbuf) 10298 return -ENOMEM; 10299 10300 while (done < count) { 10301 size = count - done; 10302 10303 if (size >= WRITE_BUFSIZE) 10304 size = WRITE_BUFSIZE - 1; 10305 10306 if (copy_from_user(kbuf, buffer + done, size)) { 10307 ret = -EFAULT; 10308 goto out; 10309 } 10310 kbuf[size] = '\0'; 10311 buf = kbuf; 10312 do { 10313 tmp = strchr(buf, '\n'); 10314 if (tmp) { 10315 *tmp = '\0'; 10316 size = tmp - buf + 1; 10317 } else { 10318 size = strlen(buf); 10319 if (done + size < count) { 10320 if (buf != kbuf) 10321 break; 10322 /* This can accept WRITE_BUFSIZE - 2 ('\n' + '\0') */ 10323 pr_warn("Line length is too long: Should be less than %d\n", 10324 WRITE_BUFSIZE - 2); 10325 ret = -EINVAL; 10326 goto out; 10327 } 10328 } 10329 done += size; 10330 10331 /* Remove comments */ 10332 tmp = strchr(buf, '#'); 10333 10334 if (tmp) 10335 *tmp = '\0'; 10336 10337 ret = createfn(buf); 10338 if (ret) 10339 goto out; 10340 buf += size; 10341 10342 } while (done < count); 10343 } 10344 ret = done; 10345 10346 out: 10347 kfree(kbuf); 10348 10349 return ret; 10350 } 10351 10352 #ifdef CONFIG_TRACER_MAX_TRACE 10353 __init static bool tr_needs_alloc_snapshot(const char *name) 10354 { 10355 char *test; 10356 int len = strlen(name); 10357 bool ret; 10358 10359 if (!boot_snapshot_index) 10360 return false; 10361 10362 if (strncmp(name, boot_snapshot_info, len) == 0 && 10363 boot_snapshot_info[len] == '\t') 10364 return true; 10365 10366 test = kmalloc(strlen(name) + 3, GFP_KERNEL); 10367 if (!test) 10368 return false; 10369 10370 sprintf(test, "\t%s\t", name); 10371 ret = strstr(boot_snapshot_info, test) == NULL; 10372 kfree(test); 10373 return ret; 10374 } 10375 10376 __init static void do_allocate_snapshot(const char *name) 10377 { 10378 if (!tr_needs_alloc_snapshot(name)) 10379 return; 10380 10381 /* 10382 * When allocate_snapshot is set, the next call to 10383 * allocate_trace_buffers() (called by trace_array_get_by_name()) 10384 * will allocate the snapshot buffer. That will alse clear 10385 * this flag. 10386 */ 10387 allocate_snapshot = true; 10388 } 10389 #else 10390 static inline void do_allocate_snapshot(const char *name) { } 10391 #endif 10392 10393 __init static void enable_instances(void) 10394 { 10395 struct trace_array *tr; 10396 char *curr_str; 10397 char *str; 10398 char *tok; 10399 10400 /* A tab is always appended */ 10401 boot_instance_info[boot_instance_index - 1] = '\0'; 10402 str = boot_instance_info; 10403 10404 while ((curr_str = strsep(&str, "\t"))) { 10405 10406 tok = strsep(&curr_str, ","); 10407 10408 if (IS_ENABLED(CONFIG_TRACER_MAX_TRACE)) 10409 do_allocate_snapshot(tok); 10410 10411 tr = trace_array_get_by_name(tok); 10412 if (!tr) { 10413 pr_warn("Failed to create instance buffer %s\n", curr_str); 10414 continue; 10415 } 10416 /* Allow user space to delete it */ 10417 trace_array_put(tr); 10418 10419 while ((tok = strsep(&curr_str, ","))) { 10420 early_enable_events(tr, tok, true); 10421 } 10422 } 10423 } 10424 10425 __init static int tracer_alloc_buffers(void) 10426 { 10427 int ring_buf_size; 10428 int ret = -ENOMEM; 10429 10430 10431 if (security_locked_down(LOCKDOWN_TRACEFS)) { 10432 pr_warn("Tracing disabled due to lockdown\n"); 10433 return -EPERM; 10434 } 10435 10436 /* 10437 * Make sure we don't accidentally add more trace options 10438 * than we have bits for. 10439 */ 10440 BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE); 10441 10442 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) 10443 goto out; 10444 10445 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL)) 10446 goto out_free_buffer_mask; 10447 10448 /* Only allocate trace_printk buffers if a trace_printk exists */ 10449 if (&__stop___trace_bprintk_fmt != &__start___trace_bprintk_fmt) 10450 /* Must be called before global_trace.buffer is allocated */ 10451 trace_printk_init_buffers(); 10452 10453 /* To save memory, keep the ring buffer size to its minimum */ 10454 if (ring_buffer_expanded) 10455 ring_buf_size = trace_buf_size; 10456 else 10457 ring_buf_size = 1; 10458 10459 cpumask_copy(tracing_buffer_mask, cpu_possible_mask); 10460 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask); 10461 10462 raw_spin_lock_init(&global_trace.start_lock); 10463 10464 /* 10465 * The prepare callbacks allocates some memory for the ring buffer. We 10466 * don't free the buffer if the CPU goes down. If we were to free 10467 * the buffer, then the user would lose any trace that was in the 10468 * buffer. The memory will be removed once the "instance" is removed. 10469 */ 10470 ret = cpuhp_setup_state_multi(CPUHP_TRACE_RB_PREPARE, 10471 "trace/RB:prepare", trace_rb_cpu_prepare, 10472 NULL); 10473 if (ret < 0) 10474 goto out_free_cpumask; 10475 /* Used for event triggers */ 10476 ret = -ENOMEM; 10477 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE); 10478 if (!temp_buffer) 10479 goto out_rm_hp_state; 10480 10481 if (trace_create_savedcmd() < 0) 10482 goto out_free_temp_buffer; 10483 10484 if (!zalloc_cpumask_var(&global_trace.pipe_cpumask, GFP_KERNEL)) 10485 goto out_free_savedcmd; 10486 10487 /* TODO: make the number of buffers hot pluggable with CPUS */ 10488 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) { 10489 MEM_FAIL(1, "tracer: failed to allocate ring buffer!\n"); 10490 goto out_free_pipe_cpumask; 10491 } 10492 if (global_trace.buffer_disabled) 10493 tracing_off(); 10494 10495 if (trace_boot_clock) { 10496 ret = tracing_set_clock(&global_trace, trace_boot_clock); 10497 if (ret < 0) 10498 pr_warn("Trace clock %s not defined, going back to default\n", 10499 trace_boot_clock); 10500 } 10501 10502 /* 10503 * register_tracer() might reference current_trace, so it 10504 * needs to be set before we register anything. This is 10505 * just a bootstrap of current_trace anyway. 10506 */ 10507 global_trace.current_trace = &nop_trace; 10508 10509 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 10510 10511 ftrace_init_global_array_ops(&global_trace); 10512 10513 init_trace_flags_index(&global_trace); 10514 10515 register_tracer(&nop_trace); 10516 10517 /* Function tracing may start here (via kernel command line) */ 10518 init_function_trace(); 10519 10520 /* All seems OK, enable tracing */ 10521 tracing_disabled = 0; 10522 10523 atomic_notifier_chain_register(&panic_notifier_list, 10524 &trace_panic_notifier); 10525 10526 register_die_notifier(&trace_die_notifier); 10527 10528 global_trace.flags = TRACE_ARRAY_FL_GLOBAL; 10529 10530 INIT_LIST_HEAD(&global_trace.systems); 10531 INIT_LIST_HEAD(&global_trace.events); 10532 INIT_LIST_HEAD(&global_trace.hist_vars); 10533 INIT_LIST_HEAD(&global_trace.err_log); 10534 list_add(&global_trace.list, &ftrace_trace_arrays); 10535 10536 apply_trace_boot_options(); 10537 10538 register_snapshot_cmd(); 10539 10540 test_can_verify(); 10541 10542 return 0; 10543 10544 out_free_pipe_cpumask: 10545 free_cpumask_var(global_trace.pipe_cpumask); 10546 out_free_savedcmd: 10547 free_saved_cmdlines_buffer(savedcmd); 10548 out_free_temp_buffer: 10549 ring_buffer_free(temp_buffer); 10550 out_rm_hp_state: 10551 cpuhp_remove_multi_state(CPUHP_TRACE_RB_PREPARE); 10552 out_free_cpumask: 10553 free_cpumask_var(global_trace.tracing_cpumask); 10554 out_free_buffer_mask: 10555 free_cpumask_var(tracing_buffer_mask); 10556 out: 10557 return ret; 10558 } 10559 10560 void __init ftrace_boot_snapshot(void) 10561 { 10562 #ifdef CONFIG_TRACER_MAX_TRACE 10563 struct trace_array *tr; 10564 10565 if (!snapshot_at_boot) 10566 return; 10567 10568 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 10569 if (!tr->allocated_snapshot) 10570 continue; 10571 10572 tracing_snapshot_instance(tr); 10573 trace_array_puts(tr, "** Boot snapshot taken **\n"); 10574 } 10575 #endif 10576 } 10577 10578 void __init early_trace_init(void) 10579 { 10580 if (tracepoint_printk) { 10581 tracepoint_print_iter = 10582 kzalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL); 10583 if (MEM_FAIL(!tracepoint_print_iter, 10584 "Failed to allocate trace iterator\n")) 10585 tracepoint_printk = 0; 10586 else 10587 static_key_enable(&tracepoint_printk_key.key); 10588 } 10589 tracer_alloc_buffers(); 10590 10591 init_events(); 10592 } 10593 10594 void __init trace_init(void) 10595 { 10596 trace_event_init(); 10597 10598 if (boot_instance_index) 10599 enable_instances(); 10600 } 10601 10602 __init static void clear_boot_tracer(void) 10603 { 10604 /* 10605 * The default tracer at boot buffer is an init section. 10606 * This function is called in lateinit. If we did not 10607 * find the boot tracer, then clear it out, to prevent 10608 * later registration from accessing the buffer that is 10609 * about to be freed. 10610 */ 10611 if (!default_bootup_tracer) 10612 return; 10613 10614 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n", 10615 default_bootup_tracer); 10616 default_bootup_tracer = NULL; 10617 } 10618 10619 #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK 10620 __init static void tracing_set_default_clock(void) 10621 { 10622 /* sched_clock_stable() is determined in late_initcall */ 10623 if (!trace_boot_clock && !sched_clock_stable()) { 10624 if (security_locked_down(LOCKDOWN_TRACEFS)) { 10625 pr_warn("Can not set tracing clock due to lockdown\n"); 10626 return; 10627 } 10628 10629 printk(KERN_WARNING 10630 "Unstable clock detected, switching default tracing clock to \"global\"\n" 10631 "If you want to keep using the local clock, then add:\n" 10632 " \"trace_clock=local\"\n" 10633 "on the kernel command line\n"); 10634 tracing_set_clock(&global_trace, "global"); 10635 } 10636 } 10637 #else 10638 static inline void tracing_set_default_clock(void) { } 10639 #endif 10640 10641 __init static int late_trace_init(void) 10642 { 10643 if (tracepoint_printk && tracepoint_printk_stop_on_boot) { 10644 static_key_disable(&tracepoint_printk_key.key); 10645 tracepoint_printk = 0; 10646 } 10647 10648 tracing_set_default_clock(); 10649 clear_boot_tracer(); 10650 return 0; 10651 } 10652 10653 late_initcall_sync(late_trace_init); 10654