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