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