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