1 /* 2 * ring buffer based function tracer 3 * 4 * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com> 5 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com> 6 * 7 * Originally taken from the RT patch by: 8 * Arnaldo Carvalho de Melo <acme@redhat.com> 9 * 10 * Based on code from the latency_tracer, that is: 11 * Copyright (C) 2004-2006 Ingo Molnar 12 * Copyright (C) 2004 Nadia Yvette Chambers 13 */ 14 #include <linux/ring_buffer.h> 15 #include <generated/utsrelease.h> 16 #include <linux/stacktrace.h> 17 #include <linux/writeback.h> 18 #include <linux/kallsyms.h> 19 #include <linux/seq_file.h> 20 #include <linux/notifier.h> 21 #include <linux/irqflags.h> 22 #include <linux/debugfs.h> 23 #include <linux/tracefs.h> 24 #include <linux/pagemap.h> 25 #include <linux/hardirq.h> 26 #include <linux/linkage.h> 27 #include <linux/uaccess.h> 28 #include <linux/kprobes.h> 29 #include <linux/ftrace.h> 30 #include <linux/module.h> 31 #include <linux/percpu.h> 32 #include <linux/splice.h> 33 #include <linux/kdebug.h> 34 #include <linux/string.h> 35 #include <linux/mount.h> 36 #include <linux/rwsem.h> 37 #include <linux/slab.h> 38 #include <linux/ctype.h> 39 #include <linux/init.h> 40 #include <linux/poll.h> 41 #include <linux/nmi.h> 42 #include <linux/fs.h> 43 #include <linux/sched/rt.h> 44 45 #include "trace.h" 46 #include "trace_output.h" 47 48 /* 49 * On boot up, the ring buffer is set to the minimum size, so that 50 * we do not waste memory on systems that are not using tracing. 51 */ 52 bool ring_buffer_expanded; 53 54 /* 55 * We need to change this state when a selftest is running. 56 * A selftest will lurk into the ring-buffer to count the 57 * entries inserted during the selftest although some concurrent 58 * insertions into the ring-buffer such as trace_printk could occurred 59 * at the same time, giving false positive or negative results. 60 */ 61 static bool __read_mostly tracing_selftest_running; 62 63 /* 64 * If a tracer is running, we do not want to run SELFTEST. 65 */ 66 bool __read_mostly tracing_selftest_disabled; 67 68 /* Pipe tracepoints to printk */ 69 struct trace_iterator *tracepoint_print_iter; 70 int tracepoint_printk; 71 72 /* For tracers that don't implement custom flags */ 73 static struct tracer_opt dummy_tracer_opt[] = { 74 { } 75 }; 76 77 static struct tracer_flags dummy_tracer_flags = { 78 .val = 0, 79 .opts = dummy_tracer_opt 80 }; 81 82 static int 83 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) 84 { 85 return 0; 86 } 87 88 /* 89 * To prevent the comm cache from being overwritten when no 90 * tracing is active, only save the comm when a trace event 91 * occurred. 92 */ 93 static DEFINE_PER_CPU(bool, trace_cmdline_save); 94 95 /* 96 * Kill all tracing for good (never come back). 97 * It is initialized to 1 but will turn to zero if the initialization 98 * of the tracer is successful. But that is the only place that sets 99 * this back to zero. 100 */ 101 static int tracing_disabled = 1; 102 103 DEFINE_PER_CPU(int, ftrace_cpu_disabled); 104 105 cpumask_var_t __read_mostly tracing_buffer_mask; 106 107 /* 108 * ftrace_dump_on_oops - variable to dump ftrace buffer on oops 109 * 110 * If there is an oops (or kernel panic) and the ftrace_dump_on_oops 111 * is set, then ftrace_dump is called. This will output the contents 112 * of the ftrace buffers to the console. This is very useful for 113 * capturing traces that lead to crashes and outputing it to a 114 * serial console. 115 * 116 * It is default off, but you can enable it with either specifying 117 * "ftrace_dump_on_oops" in the kernel command line, or setting 118 * /proc/sys/kernel/ftrace_dump_on_oops 119 * Set 1 if you want to dump buffers of all CPUs 120 * Set 2 if you want to dump the buffer of the CPU that triggered oops 121 */ 122 123 enum ftrace_dump_mode ftrace_dump_on_oops; 124 125 /* When set, tracing will stop when a WARN*() is hit */ 126 int __disable_trace_on_warning; 127 128 #ifdef CONFIG_TRACE_ENUM_MAP_FILE 129 /* Map of enums to their values, for "enum_map" file */ 130 struct trace_enum_map_head { 131 struct module *mod; 132 unsigned long length; 133 }; 134 135 union trace_enum_map_item; 136 137 struct trace_enum_map_tail { 138 /* 139 * "end" is first and points to NULL as it must be different 140 * than "mod" or "enum_string" 141 */ 142 union trace_enum_map_item *next; 143 const char *end; /* points to NULL */ 144 }; 145 146 static DEFINE_MUTEX(trace_enum_mutex); 147 148 /* 149 * The trace_enum_maps are saved in an array with two extra elements, 150 * one at the beginning, and one at the end. The beginning item contains 151 * the count of the saved maps (head.length), and the module they 152 * belong to if not built in (head.mod). The ending item contains a 153 * pointer to the next array of saved enum_map items. 154 */ 155 union trace_enum_map_item { 156 struct trace_enum_map map; 157 struct trace_enum_map_head head; 158 struct trace_enum_map_tail tail; 159 }; 160 161 static union trace_enum_map_item *trace_enum_maps; 162 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */ 163 164 static int tracing_set_tracer(struct trace_array *tr, const char *buf); 165 166 #define MAX_TRACER_SIZE 100 167 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata; 168 static char *default_bootup_tracer; 169 170 static bool allocate_snapshot; 171 172 static int __init set_cmdline_ftrace(char *str) 173 { 174 strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE); 175 default_bootup_tracer = bootup_tracer_buf; 176 /* We are using ftrace early, expand it */ 177 ring_buffer_expanded = true; 178 return 1; 179 } 180 __setup("ftrace=", set_cmdline_ftrace); 181 182 static int __init set_ftrace_dump_on_oops(char *str) 183 { 184 if (*str++ != '=' || !*str) { 185 ftrace_dump_on_oops = DUMP_ALL; 186 return 1; 187 } 188 189 if (!strcmp("orig_cpu", str)) { 190 ftrace_dump_on_oops = DUMP_ORIG; 191 return 1; 192 } 193 194 return 0; 195 } 196 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops); 197 198 static int __init stop_trace_on_warning(char *str) 199 { 200 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0)) 201 __disable_trace_on_warning = 1; 202 return 1; 203 } 204 __setup("traceoff_on_warning", stop_trace_on_warning); 205 206 static int __init boot_alloc_snapshot(char *str) 207 { 208 allocate_snapshot = true; 209 /* We also need the main ring buffer expanded */ 210 ring_buffer_expanded = true; 211 return 1; 212 } 213 __setup("alloc_snapshot", boot_alloc_snapshot); 214 215 216 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata; 217 218 static int __init set_trace_boot_options(char *str) 219 { 220 strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE); 221 return 0; 222 } 223 __setup("trace_options=", set_trace_boot_options); 224 225 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata; 226 static char *trace_boot_clock __initdata; 227 228 static int __init set_trace_boot_clock(char *str) 229 { 230 strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE); 231 trace_boot_clock = trace_boot_clock_buf; 232 return 0; 233 } 234 __setup("trace_clock=", set_trace_boot_clock); 235 236 static int __init set_tracepoint_printk(char *str) 237 { 238 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0)) 239 tracepoint_printk = 1; 240 return 1; 241 } 242 __setup("tp_printk", set_tracepoint_printk); 243 244 unsigned long long ns2usecs(cycle_t nsec) 245 { 246 nsec += 500; 247 do_div(nsec, 1000); 248 return nsec; 249 } 250 251 /* trace_flags holds trace_options default values */ 252 #define TRACE_DEFAULT_FLAGS \ 253 (FUNCTION_DEFAULT_FLAGS | \ 254 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | \ 255 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | \ 256 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | \ 257 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS) 258 259 /* trace_options that are only supported by global_trace */ 260 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK | \ 261 TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD) 262 263 264 /* 265 * The global_trace is the descriptor that holds the tracing 266 * buffers for the live tracing. For each CPU, it contains 267 * a link list of pages that will store trace entries. The 268 * page descriptor of the pages in the memory is used to hold 269 * the link list by linking the lru item in the page descriptor 270 * to each of the pages in the buffer per CPU. 271 * 272 * For each active CPU there is a data field that holds the 273 * pages for the buffer for that CPU. Each CPU has the same number 274 * of pages allocated for its buffer. 275 */ 276 static struct trace_array global_trace = { 277 .trace_flags = TRACE_DEFAULT_FLAGS, 278 }; 279 280 LIST_HEAD(ftrace_trace_arrays); 281 282 int trace_array_get(struct trace_array *this_tr) 283 { 284 struct trace_array *tr; 285 int ret = -ENODEV; 286 287 mutex_lock(&trace_types_lock); 288 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 289 if (tr == this_tr) { 290 tr->ref++; 291 ret = 0; 292 break; 293 } 294 } 295 mutex_unlock(&trace_types_lock); 296 297 return ret; 298 } 299 300 static void __trace_array_put(struct trace_array *this_tr) 301 { 302 WARN_ON(!this_tr->ref); 303 this_tr->ref--; 304 } 305 306 void trace_array_put(struct trace_array *this_tr) 307 { 308 mutex_lock(&trace_types_lock); 309 __trace_array_put(this_tr); 310 mutex_unlock(&trace_types_lock); 311 } 312 313 int filter_check_discard(struct trace_event_file *file, void *rec, 314 struct ring_buffer *buffer, 315 struct ring_buffer_event *event) 316 { 317 if (unlikely(file->flags & EVENT_FILE_FL_FILTERED) && 318 !filter_match_preds(file->filter, rec)) { 319 ring_buffer_discard_commit(buffer, event); 320 return 1; 321 } 322 323 return 0; 324 } 325 EXPORT_SYMBOL_GPL(filter_check_discard); 326 327 int call_filter_check_discard(struct trace_event_call *call, void *rec, 328 struct ring_buffer *buffer, 329 struct ring_buffer_event *event) 330 { 331 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) && 332 !filter_match_preds(call->filter, rec)) { 333 ring_buffer_discard_commit(buffer, event); 334 return 1; 335 } 336 337 return 0; 338 } 339 EXPORT_SYMBOL_GPL(call_filter_check_discard); 340 341 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu) 342 { 343 u64 ts; 344 345 /* Early boot up does not have a buffer yet */ 346 if (!buf->buffer) 347 return trace_clock_local(); 348 349 ts = ring_buffer_time_stamp(buf->buffer, cpu); 350 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts); 351 352 return ts; 353 } 354 355 cycle_t ftrace_now(int cpu) 356 { 357 return buffer_ftrace_now(&global_trace.trace_buffer, cpu); 358 } 359 360 /** 361 * tracing_is_enabled - Show if global_trace has been disabled 362 * 363 * Shows if the global trace has been enabled or not. It uses the 364 * mirror flag "buffer_disabled" to be used in fast paths such as for 365 * the irqsoff tracer. But it may be inaccurate due to races. If you 366 * need to know the accurate state, use tracing_is_on() which is a little 367 * slower, but accurate. 368 */ 369 int tracing_is_enabled(void) 370 { 371 /* 372 * For quick access (irqsoff uses this in fast path), just 373 * return the mirror variable of the state of the ring buffer. 374 * It's a little racy, but we don't really care. 375 */ 376 smp_rmb(); 377 return !global_trace.buffer_disabled; 378 } 379 380 /* 381 * trace_buf_size is the size in bytes that is allocated 382 * for a buffer. Note, the number of bytes is always rounded 383 * to page size. 384 * 385 * This number is purposely set to a low number of 16384. 386 * If the dump on oops happens, it will be much appreciated 387 * to not have to wait for all that output. Anyway this can be 388 * boot time and run time configurable. 389 */ 390 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */ 391 392 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT; 393 394 /* trace_types holds a link list of available tracers. */ 395 static struct tracer *trace_types __read_mostly; 396 397 /* 398 * trace_types_lock is used to protect the trace_types list. 399 */ 400 DEFINE_MUTEX(trace_types_lock); 401 402 /* 403 * serialize the access of the ring buffer 404 * 405 * ring buffer serializes readers, but it is low level protection. 406 * The validity of the events (which returns by ring_buffer_peek() ..etc) 407 * are not protected by ring buffer. 408 * 409 * The content of events may become garbage if we allow other process consumes 410 * these events concurrently: 411 * A) the page of the consumed events may become a normal page 412 * (not reader page) in ring buffer, and this page will be rewrited 413 * by events producer. 414 * B) The page of the consumed events may become a page for splice_read, 415 * and this page will be returned to system. 416 * 417 * These primitives allow multi process access to different cpu ring buffer 418 * concurrently. 419 * 420 * These primitives don't distinguish read-only and read-consume access. 421 * Multi read-only access are also serialized. 422 */ 423 424 #ifdef CONFIG_SMP 425 static DECLARE_RWSEM(all_cpu_access_lock); 426 static DEFINE_PER_CPU(struct mutex, cpu_access_lock); 427 428 static inline void trace_access_lock(int cpu) 429 { 430 if (cpu == RING_BUFFER_ALL_CPUS) { 431 /* gain it for accessing the whole ring buffer. */ 432 down_write(&all_cpu_access_lock); 433 } else { 434 /* gain it for accessing a cpu ring buffer. */ 435 436 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */ 437 down_read(&all_cpu_access_lock); 438 439 /* Secondly block other access to this @cpu ring buffer. */ 440 mutex_lock(&per_cpu(cpu_access_lock, cpu)); 441 } 442 } 443 444 static inline void trace_access_unlock(int cpu) 445 { 446 if (cpu == RING_BUFFER_ALL_CPUS) { 447 up_write(&all_cpu_access_lock); 448 } else { 449 mutex_unlock(&per_cpu(cpu_access_lock, cpu)); 450 up_read(&all_cpu_access_lock); 451 } 452 } 453 454 static inline void trace_access_lock_init(void) 455 { 456 int cpu; 457 458 for_each_possible_cpu(cpu) 459 mutex_init(&per_cpu(cpu_access_lock, cpu)); 460 } 461 462 #else 463 464 static DEFINE_MUTEX(access_lock); 465 466 static inline void trace_access_lock(int cpu) 467 { 468 (void)cpu; 469 mutex_lock(&access_lock); 470 } 471 472 static inline void trace_access_unlock(int cpu) 473 { 474 (void)cpu; 475 mutex_unlock(&access_lock); 476 } 477 478 static inline void trace_access_lock_init(void) 479 { 480 } 481 482 #endif 483 484 #ifdef CONFIG_STACKTRACE 485 static void __ftrace_trace_stack(struct ring_buffer *buffer, 486 unsigned long flags, 487 int skip, int pc, struct pt_regs *regs); 488 static inline void ftrace_trace_stack(struct trace_array *tr, 489 struct ring_buffer *buffer, 490 unsigned long flags, 491 int skip, int pc, struct pt_regs *regs); 492 493 #else 494 static inline void __ftrace_trace_stack(struct ring_buffer *buffer, 495 unsigned long flags, 496 int skip, int pc, struct pt_regs *regs) 497 { 498 } 499 static inline void ftrace_trace_stack(struct trace_array *tr, 500 struct ring_buffer *buffer, 501 unsigned long flags, 502 int skip, int pc, struct pt_regs *regs) 503 { 504 } 505 506 #endif 507 508 static void tracer_tracing_on(struct trace_array *tr) 509 { 510 if (tr->trace_buffer.buffer) 511 ring_buffer_record_on(tr->trace_buffer.buffer); 512 /* 513 * This flag is looked at when buffers haven't been allocated 514 * yet, or by some tracers (like irqsoff), that just want to 515 * know if the ring buffer has been disabled, but it can handle 516 * races of where it gets disabled but we still do a record. 517 * As the check is in the fast path of the tracers, it is more 518 * important to be fast than accurate. 519 */ 520 tr->buffer_disabled = 0; 521 /* Make the flag seen by readers */ 522 smp_wmb(); 523 } 524 525 /** 526 * tracing_on - enable tracing buffers 527 * 528 * This function enables tracing buffers that may have been 529 * disabled with tracing_off. 530 */ 531 void tracing_on(void) 532 { 533 tracer_tracing_on(&global_trace); 534 } 535 EXPORT_SYMBOL_GPL(tracing_on); 536 537 /** 538 * __trace_puts - write a constant string into the trace buffer. 539 * @ip: The address of the caller 540 * @str: The constant string to write 541 * @size: The size of the string. 542 */ 543 int __trace_puts(unsigned long ip, const char *str, int size) 544 { 545 struct ring_buffer_event *event; 546 struct ring_buffer *buffer; 547 struct print_entry *entry; 548 unsigned long irq_flags; 549 int alloc; 550 int pc; 551 552 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 553 return 0; 554 555 pc = preempt_count(); 556 557 if (unlikely(tracing_selftest_running || tracing_disabled)) 558 return 0; 559 560 alloc = sizeof(*entry) + size + 2; /* possible \n added */ 561 562 local_save_flags(irq_flags); 563 buffer = global_trace.trace_buffer.buffer; 564 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, 565 irq_flags, pc); 566 if (!event) 567 return 0; 568 569 entry = ring_buffer_event_data(event); 570 entry->ip = ip; 571 572 memcpy(&entry->buf, str, size); 573 574 /* Add a newline if necessary */ 575 if (entry->buf[size - 1] != '\n') { 576 entry->buf[size] = '\n'; 577 entry->buf[size + 1] = '\0'; 578 } else 579 entry->buf[size] = '\0'; 580 581 __buffer_unlock_commit(buffer, event); 582 ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL); 583 584 return size; 585 } 586 EXPORT_SYMBOL_GPL(__trace_puts); 587 588 /** 589 * __trace_bputs - write the pointer to a constant string into trace buffer 590 * @ip: The address of the caller 591 * @str: The constant string to write to the buffer to 592 */ 593 int __trace_bputs(unsigned long ip, const char *str) 594 { 595 struct ring_buffer_event *event; 596 struct ring_buffer *buffer; 597 struct bputs_entry *entry; 598 unsigned long irq_flags; 599 int size = sizeof(struct bputs_entry); 600 int pc; 601 602 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 603 return 0; 604 605 pc = preempt_count(); 606 607 if (unlikely(tracing_selftest_running || tracing_disabled)) 608 return 0; 609 610 local_save_flags(irq_flags); 611 buffer = global_trace.trace_buffer.buffer; 612 event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, 613 irq_flags, pc); 614 if (!event) 615 return 0; 616 617 entry = ring_buffer_event_data(event); 618 entry->ip = ip; 619 entry->str = str; 620 621 __buffer_unlock_commit(buffer, event); 622 ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL); 623 624 return 1; 625 } 626 EXPORT_SYMBOL_GPL(__trace_bputs); 627 628 #ifdef CONFIG_TRACER_SNAPSHOT 629 /** 630 * trace_snapshot - take a snapshot of the current buffer. 631 * 632 * This causes a swap between the snapshot buffer and the current live 633 * tracing buffer. You can use this to take snapshots of the live 634 * trace when some condition is triggered, but continue to trace. 635 * 636 * Note, make sure to allocate the snapshot with either 637 * a tracing_snapshot_alloc(), or by doing it manually 638 * with: echo 1 > /sys/kernel/debug/tracing/snapshot 639 * 640 * If the snapshot buffer is not allocated, it will stop tracing. 641 * Basically making a permanent snapshot. 642 */ 643 void tracing_snapshot(void) 644 { 645 struct trace_array *tr = &global_trace; 646 struct tracer *tracer = tr->current_trace; 647 unsigned long flags; 648 649 if (in_nmi()) { 650 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n"); 651 internal_trace_puts("*** snapshot is being ignored ***\n"); 652 return; 653 } 654 655 if (!tr->allocated_snapshot) { 656 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n"); 657 internal_trace_puts("*** stopping trace here! ***\n"); 658 tracing_off(); 659 return; 660 } 661 662 /* Note, snapshot can not be used when the tracer uses it */ 663 if (tracer->use_max_tr) { 664 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n"); 665 internal_trace_puts("*** Can not use snapshot (sorry) ***\n"); 666 return; 667 } 668 669 local_irq_save(flags); 670 update_max_tr(tr, current, smp_processor_id()); 671 local_irq_restore(flags); 672 } 673 EXPORT_SYMBOL_GPL(tracing_snapshot); 674 675 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf, 676 struct trace_buffer *size_buf, int cpu_id); 677 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val); 678 679 static int alloc_snapshot(struct trace_array *tr) 680 { 681 int ret; 682 683 if (!tr->allocated_snapshot) { 684 685 /* allocate spare buffer */ 686 ret = resize_buffer_duplicate_size(&tr->max_buffer, 687 &tr->trace_buffer, RING_BUFFER_ALL_CPUS); 688 if (ret < 0) 689 return ret; 690 691 tr->allocated_snapshot = true; 692 } 693 694 return 0; 695 } 696 697 static void free_snapshot(struct trace_array *tr) 698 { 699 /* 700 * We don't free the ring buffer. instead, resize it because 701 * The max_tr ring buffer has some state (e.g. ring->clock) and 702 * we want preserve it. 703 */ 704 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); 705 set_buffer_entries(&tr->max_buffer, 1); 706 tracing_reset_online_cpus(&tr->max_buffer); 707 tr->allocated_snapshot = false; 708 } 709 710 /** 711 * tracing_alloc_snapshot - allocate snapshot buffer. 712 * 713 * This only allocates the snapshot buffer if it isn't already 714 * allocated - it doesn't also take a snapshot. 715 * 716 * This is meant to be used in cases where the snapshot buffer needs 717 * to be set up for events that can't sleep but need to be able to 718 * trigger a snapshot. 719 */ 720 int tracing_alloc_snapshot(void) 721 { 722 struct trace_array *tr = &global_trace; 723 int ret; 724 725 ret = alloc_snapshot(tr); 726 WARN_ON(ret < 0); 727 728 return ret; 729 } 730 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 731 732 /** 733 * trace_snapshot_alloc - allocate and take a snapshot of the current buffer. 734 * 735 * This is similar to trace_snapshot(), but it will allocate the 736 * snapshot buffer if it isn't already allocated. Use this only 737 * where it is safe to sleep, as the allocation may sleep. 738 * 739 * This causes a swap between the snapshot buffer and the current live 740 * tracing buffer. You can use this to take snapshots of the live 741 * trace when some condition is triggered, but continue to trace. 742 */ 743 void tracing_snapshot_alloc(void) 744 { 745 int ret; 746 747 ret = tracing_alloc_snapshot(); 748 if (ret < 0) 749 return; 750 751 tracing_snapshot(); 752 } 753 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 754 #else 755 void tracing_snapshot(void) 756 { 757 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used"); 758 } 759 EXPORT_SYMBOL_GPL(tracing_snapshot); 760 int tracing_alloc_snapshot(void) 761 { 762 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used"); 763 return -ENODEV; 764 } 765 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 766 void tracing_snapshot_alloc(void) 767 { 768 /* Give warning */ 769 tracing_snapshot(); 770 } 771 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 772 #endif /* CONFIG_TRACER_SNAPSHOT */ 773 774 static void tracer_tracing_off(struct trace_array *tr) 775 { 776 if (tr->trace_buffer.buffer) 777 ring_buffer_record_off(tr->trace_buffer.buffer); 778 /* 779 * This flag is looked at when buffers haven't been allocated 780 * yet, or by some tracers (like irqsoff), that just want to 781 * know if the ring buffer has been disabled, but it can handle 782 * races of where it gets disabled but we still do a record. 783 * As the check is in the fast path of the tracers, it is more 784 * important to be fast than accurate. 785 */ 786 tr->buffer_disabled = 1; 787 /* Make the flag seen by readers */ 788 smp_wmb(); 789 } 790 791 /** 792 * tracing_off - turn off tracing buffers 793 * 794 * This function stops the tracing buffers from recording data. 795 * It does not disable any overhead the tracers themselves may 796 * be causing. This function simply causes all recording to 797 * the ring buffers to fail. 798 */ 799 void tracing_off(void) 800 { 801 tracer_tracing_off(&global_trace); 802 } 803 EXPORT_SYMBOL_GPL(tracing_off); 804 805 void disable_trace_on_warning(void) 806 { 807 if (__disable_trace_on_warning) 808 tracing_off(); 809 } 810 811 /** 812 * tracer_tracing_is_on - show real state of ring buffer enabled 813 * @tr : the trace array to know if ring buffer is enabled 814 * 815 * Shows real state of the ring buffer if it is enabled or not. 816 */ 817 static int tracer_tracing_is_on(struct trace_array *tr) 818 { 819 if (tr->trace_buffer.buffer) 820 return ring_buffer_record_is_on(tr->trace_buffer.buffer); 821 return !tr->buffer_disabled; 822 } 823 824 /** 825 * tracing_is_on - show state of ring buffers enabled 826 */ 827 int tracing_is_on(void) 828 { 829 return tracer_tracing_is_on(&global_trace); 830 } 831 EXPORT_SYMBOL_GPL(tracing_is_on); 832 833 static int __init set_buf_size(char *str) 834 { 835 unsigned long buf_size; 836 837 if (!str) 838 return 0; 839 buf_size = memparse(str, &str); 840 /* nr_entries can not be zero */ 841 if (buf_size == 0) 842 return 0; 843 trace_buf_size = buf_size; 844 return 1; 845 } 846 __setup("trace_buf_size=", set_buf_size); 847 848 static int __init set_tracing_thresh(char *str) 849 { 850 unsigned long threshold; 851 int ret; 852 853 if (!str) 854 return 0; 855 ret = kstrtoul(str, 0, &threshold); 856 if (ret < 0) 857 return 0; 858 tracing_thresh = threshold * 1000; 859 return 1; 860 } 861 __setup("tracing_thresh=", set_tracing_thresh); 862 863 unsigned long nsecs_to_usecs(unsigned long nsecs) 864 { 865 return nsecs / 1000; 866 } 867 868 /* 869 * TRACE_FLAGS is defined as a tuple matching bit masks with strings. 870 * It uses C(a, b) where 'a' is the enum name and 'b' is the string that 871 * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list 872 * of strings in the order that the enums were defined. 873 */ 874 #undef C 875 #define C(a, b) b 876 877 /* These must match the bit postions in trace_iterator_flags */ 878 static const char *trace_options[] = { 879 TRACE_FLAGS 880 NULL 881 }; 882 883 static struct { 884 u64 (*func)(void); 885 const char *name; 886 int in_ns; /* is this clock in nanoseconds? */ 887 } trace_clocks[] = { 888 { trace_clock_local, "local", 1 }, 889 { trace_clock_global, "global", 1 }, 890 { trace_clock_counter, "counter", 0 }, 891 { trace_clock_jiffies, "uptime", 0 }, 892 { trace_clock, "perf", 1 }, 893 { ktime_get_mono_fast_ns, "mono", 1 }, 894 { ktime_get_raw_fast_ns, "mono_raw", 1 }, 895 ARCH_TRACE_CLOCKS 896 }; 897 898 /* 899 * trace_parser_get_init - gets the buffer for trace parser 900 */ 901 int trace_parser_get_init(struct trace_parser *parser, int size) 902 { 903 memset(parser, 0, sizeof(*parser)); 904 905 parser->buffer = kmalloc(size, GFP_KERNEL); 906 if (!parser->buffer) 907 return 1; 908 909 parser->size = size; 910 return 0; 911 } 912 913 /* 914 * trace_parser_put - frees the buffer for trace parser 915 */ 916 void trace_parser_put(struct trace_parser *parser) 917 { 918 kfree(parser->buffer); 919 } 920 921 /* 922 * trace_get_user - reads the user input string separated by space 923 * (matched by isspace(ch)) 924 * 925 * For each string found the 'struct trace_parser' is updated, 926 * and the function returns. 927 * 928 * Returns number of bytes read. 929 * 930 * See kernel/trace/trace.h for 'struct trace_parser' details. 931 */ 932 int trace_get_user(struct trace_parser *parser, const char __user *ubuf, 933 size_t cnt, loff_t *ppos) 934 { 935 char ch; 936 size_t read = 0; 937 ssize_t ret; 938 939 if (!*ppos) 940 trace_parser_clear(parser); 941 942 ret = get_user(ch, ubuf++); 943 if (ret) 944 goto out; 945 946 read++; 947 cnt--; 948 949 /* 950 * The parser is not finished with the last write, 951 * continue reading the user input without skipping spaces. 952 */ 953 if (!parser->cont) { 954 /* skip white space */ 955 while (cnt && isspace(ch)) { 956 ret = get_user(ch, ubuf++); 957 if (ret) 958 goto out; 959 read++; 960 cnt--; 961 } 962 963 /* only spaces were written */ 964 if (isspace(ch)) { 965 *ppos += read; 966 ret = read; 967 goto out; 968 } 969 970 parser->idx = 0; 971 } 972 973 /* read the non-space input */ 974 while (cnt && !isspace(ch)) { 975 if (parser->idx < parser->size - 1) 976 parser->buffer[parser->idx++] = ch; 977 else { 978 ret = -EINVAL; 979 goto out; 980 } 981 ret = get_user(ch, ubuf++); 982 if (ret) 983 goto out; 984 read++; 985 cnt--; 986 } 987 988 /* We either got finished input or we have to wait for another call. */ 989 if (isspace(ch)) { 990 parser->buffer[parser->idx] = 0; 991 parser->cont = false; 992 } else if (parser->idx < parser->size - 1) { 993 parser->cont = true; 994 parser->buffer[parser->idx++] = ch; 995 } else { 996 ret = -EINVAL; 997 goto out; 998 } 999 1000 *ppos += read; 1001 ret = read; 1002 1003 out: 1004 return ret; 1005 } 1006 1007 /* TODO add a seq_buf_to_buffer() */ 1008 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt) 1009 { 1010 int len; 1011 1012 if (trace_seq_used(s) <= s->seq.readpos) 1013 return -EBUSY; 1014 1015 len = trace_seq_used(s) - s->seq.readpos; 1016 if (cnt > len) 1017 cnt = len; 1018 memcpy(buf, s->buffer + s->seq.readpos, cnt); 1019 1020 s->seq.readpos += cnt; 1021 return cnt; 1022 } 1023 1024 unsigned long __read_mostly tracing_thresh; 1025 1026 #ifdef CONFIG_TRACER_MAX_TRACE 1027 /* 1028 * Copy the new maximum trace into the separate maximum-trace 1029 * structure. (this way the maximum trace is permanently saved, 1030 * for later retrieval via /sys/kernel/debug/tracing/latency_trace) 1031 */ 1032 static void 1033 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 1034 { 1035 struct trace_buffer *trace_buf = &tr->trace_buffer; 1036 struct trace_buffer *max_buf = &tr->max_buffer; 1037 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu); 1038 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu); 1039 1040 max_buf->cpu = cpu; 1041 max_buf->time_start = data->preempt_timestamp; 1042 1043 max_data->saved_latency = tr->max_latency; 1044 max_data->critical_start = data->critical_start; 1045 max_data->critical_end = data->critical_end; 1046 1047 memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN); 1048 max_data->pid = tsk->pid; 1049 /* 1050 * If tsk == current, then use current_uid(), as that does not use 1051 * RCU. The irq tracer can be called out of RCU scope. 1052 */ 1053 if (tsk == current) 1054 max_data->uid = current_uid(); 1055 else 1056 max_data->uid = task_uid(tsk); 1057 1058 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; 1059 max_data->policy = tsk->policy; 1060 max_data->rt_priority = tsk->rt_priority; 1061 1062 /* record this tasks comm */ 1063 tracing_record_cmdline(tsk); 1064 } 1065 1066 /** 1067 * update_max_tr - snapshot all trace buffers from global_trace to max_tr 1068 * @tr: tracer 1069 * @tsk: the task with the latency 1070 * @cpu: The cpu that initiated the trace. 1071 * 1072 * Flip the buffers between the @tr and the max_tr and record information 1073 * about which task was the cause of this latency. 1074 */ 1075 void 1076 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 1077 { 1078 struct ring_buffer *buf; 1079 1080 if (tr->stop_count) 1081 return; 1082 1083 WARN_ON_ONCE(!irqs_disabled()); 1084 1085 if (!tr->allocated_snapshot) { 1086 /* Only the nop tracer should hit this when disabling */ 1087 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1088 return; 1089 } 1090 1091 arch_spin_lock(&tr->max_lock); 1092 1093 buf = tr->trace_buffer.buffer; 1094 tr->trace_buffer.buffer = tr->max_buffer.buffer; 1095 tr->max_buffer.buffer = buf; 1096 1097 __update_max_tr(tr, tsk, cpu); 1098 arch_spin_unlock(&tr->max_lock); 1099 } 1100 1101 /** 1102 * update_max_tr_single - only copy one trace over, and reset the rest 1103 * @tr - tracer 1104 * @tsk - task with the latency 1105 * @cpu - the cpu of the buffer to copy. 1106 * 1107 * Flip the trace of a single CPU buffer between the @tr and the max_tr. 1108 */ 1109 void 1110 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) 1111 { 1112 int ret; 1113 1114 if (tr->stop_count) 1115 return; 1116 1117 WARN_ON_ONCE(!irqs_disabled()); 1118 if (!tr->allocated_snapshot) { 1119 /* Only the nop tracer should hit this when disabling */ 1120 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1121 return; 1122 } 1123 1124 arch_spin_lock(&tr->max_lock); 1125 1126 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu); 1127 1128 if (ret == -EBUSY) { 1129 /* 1130 * We failed to swap the buffer due to a commit taking 1131 * place on this CPU. We fail to record, but we reset 1132 * the max trace buffer (no one writes directly to it) 1133 * and flag that it failed. 1134 */ 1135 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, 1136 "Failed to swap buffers due to commit in progress\n"); 1137 } 1138 1139 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY); 1140 1141 __update_max_tr(tr, tsk, cpu); 1142 arch_spin_unlock(&tr->max_lock); 1143 } 1144 #endif /* CONFIG_TRACER_MAX_TRACE */ 1145 1146 static int wait_on_pipe(struct trace_iterator *iter, bool full) 1147 { 1148 /* Iterators are static, they should be filled or empty */ 1149 if (trace_buffer_iter(iter, iter->cpu_file)) 1150 return 0; 1151 1152 return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file, 1153 full); 1154 } 1155 1156 #ifdef CONFIG_FTRACE_STARTUP_TEST 1157 static int run_tracer_selftest(struct tracer *type) 1158 { 1159 struct trace_array *tr = &global_trace; 1160 struct tracer *saved_tracer = tr->current_trace; 1161 int ret; 1162 1163 if (!type->selftest || tracing_selftest_disabled) 1164 return 0; 1165 1166 /* 1167 * Run a selftest on this tracer. 1168 * Here we reset the trace buffer, and set the current 1169 * tracer to be this tracer. The tracer can then run some 1170 * internal tracing to verify that everything is in order. 1171 * If we fail, we do not register this tracer. 1172 */ 1173 tracing_reset_online_cpus(&tr->trace_buffer); 1174 1175 tr->current_trace = type; 1176 1177 #ifdef CONFIG_TRACER_MAX_TRACE 1178 if (type->use_max_tr) { 1179 /* If we expanded the buffers, make sure the max is expanded too */ 1180 if (ring_buffer_expanded) 1181 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, 1182 RING_BUFFER_ALL_CPUS); 1183 tr->allocated_snapshot = true; 1184 } 1185 #endif 1186 1187 /* the test is responsible for initializing and enabling */ 1188 pr_info("Testing tracer %s: ", type->name); 1189 ret = type->selftest(type, tr); 1190 /* the test is responsible for resetting too */ 1191 tr->current_trace = saved_tracer; 1192 if (ret) { 1193 printk(KERN_CONT "FAILED!\n"); 1194 /* Add the warning after printing 'FAILED' */ 1195 WARN_ON(1); 1196 return -1; 1197 } 1198 /* Only reset on passing, to avoid touching corrupted buffers */ 1199 tracing_reset_online_cpus(&tr->trace_buffer); 1200 1201 #ifdef CONFIG_TRACER_MAX_TRACE 1202 if (type->use_max_tr) { 1203 tr->allocated_snapshot = false; 1204 1205 /* Shrink the max buffer again */ 1206 if (ring_buffer_expanded) 1207 ring_buffer_resize(tr->max_buffer.buffer, 1, 1208 RING_BUFFER_ALL_CPUS); 1209 } 1210 #endif 1211 1212 printk(KERN_CONT "PASSED\n"); 1213 return 0; 1214 } 1215 #else 1216 static inline int run_tracer_selftest(struct tracer *type) 1217 { 1218 return 0; 1219 } 1220 #endif /* CONFIG_FTRACE_STARTUP_TEST */ 1221 1222 static void add_tracer_options(struct trace_array *tr, struct tracer *t); 1223 1224 static void __init apply_trace_boot_options(void); 1225 1226 /** 1227 * register_tracer - register a tracer with the ftrace system. 1228 * @type - the plugin for the tracer 1229 * 1230 * Register a new plugin tracer. 1231 */ 1232 int __init register_tracer(struct tracer *type) 1233 { 1234 struct tracer *t; 1235 int ret = 0; 1236 1237 if (!type->name) { 1238 pr_info("Tracer must have a name\n"); 1239 return -1; 1240 } 1241 1242 if (strlen(type->name) >= MAX_TRACER_SIZE) { 1243 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE); 1244 return -1; 1245 } 1246 1247 mutex_lock(&trace_types_lock); 1248 1249 tracing_selftest_running = true; 1250 1251 for (t = trace_types; t; t = t->next) { 1252 if (strcmp(type->name, t->name) == 0) { 1253 /* already found */ 1254 pr_info("Tracer %s already registered\n", 1255 type->name); 1256 ret = -1; 1257 goto out; 1258 } 1259 } 1260 1261 if (!type->set_flag) 1262 type->set_flag = &dummy_set_flag; 1263 if (!type->flags) 1264 type->flags = &dummy_tracer_flags; 1265 else 1266 if (!type->flags->opts) 1267 type->flags->opts = dummy_tracer_opt; 1268 1269 ret = run_tracer_selftest(type); 1270 if (ret < 0) 1271 goto out; 1272 1273 type->next = trace_types; 1274 trace_types = type; 1275 add_tracer_options(&global_trace, type); 1276 1277 out: 1278 tracing_selftest_running = false; 1279 mutex_unlock(&trace_types_lock); 1280 1281 if (ret || !default_bootup_tracer) 1282 goto out_unlock; 1283 1284 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE)) 1285 goto out_unlock; 1286 1287 printk(KERN_INFO "Starting tracer '%s'\n", type->name); 1288 /* Do we want this tracer to start on bootup? */ 1289 tracing_set_tracer(&global_trace, type->name); 1290 default_bootup_tracer = NULL; 1291 1292 apply_trace_boot_options(); 1293 1294 /* disable other selftests, since this will break it. */ 1295 tracing_selftest_disabled = true; 1296 #ifdef CONFIG_FTRACE_STARTUP_TEST 1297 printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n", 1298 type->name); 1299 #endif 1300 1301 out_unlock: 1302 return ret; 1303 } 1304 1305 void tracing_reset(struct trace_buffer *buf, int cpu) 1306 { 1307 struct ring_buffer *buffer = buf->buffer; 1308 1309 if (!buffer) 1310 return; 1311 1312 ring_buffer_record_disable(buffer); 1313 1314 /* Make sure all commits have finished */ 1315 synchronize_sched(); 1316 ring_buffer_reset_cpu(buffer, cpu); 1317 1318 ring_buffer_record_enable(buffer); 1319 } 1320 1321 void tracing_reset_online_cpus(struct trace_buffer *buf) 1322 { 1323 struct ring_buffer *buffer = buf->buffer; 1324 int cpu; 1325 1326 if (!buffer) 1327 return; 1328 1329 ring_buffer_record_disable(buffer); 1330 1331 /* Make sure all commits have finished */ 1332 synchronize_sched(); 1333 1334 buf->time_start = buffer_ftrace_now(buf, buf->cpu); 1335 1336 for_each_online_cpu(cpu) 1337 ring_buffer_reset_cpu(buffer, cpu); 1338 1339 ring_buffer_record_enable(buffer); 1340 } 1341 1342 /* Must have trace_types_lock held */ 1343 void tracing_reset_all_online_cpus(void) 1344 { 1345 struct trace_array *tr; 1346 1347 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 1348 tracing_reset_online_cpus(&tr->trace_buffer); 1349 #ifdef CONFIG_TRACER_MAX_TRACE 1350 tracing_reset_online_cpus(&tr->max_buffer); 1351 #endif 1352 } 1353 } 1354 1355 #define SAVED_CMDLINES_DEFAULT 128 1356 #define NO_CMDLINE_MAP UINT_MAX 1357 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED; 1358 struct saved_cmdlines_buffer { 1359 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1]; 1360 unsigned *map_cmdline_to_pid; 1361 unsigned cmdline_num; 1362 int cmdline_idx; 1363 char *saved_cmdlines; 1364 }; 1365 static struct saved_cmdlines_buffer *savedcmd; 1366 1367 /* temporary disable recording */ 1368 static atomic_t trace_record_cmdline_disabled __read_mostly; 1369 1370 static inline char *get_saved_cmdlines(int idx) 1371 { 1372 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN]; 1373 } 1374 1375 static inline void set_cmdline(int idx, const char *cmdline) 1376 { 1377 memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN); 1378 } 1379 1380 static int allocate_cmdlines_buffer(unsigned int val, 1381 struct saved_cmdlines_buffer *s) 1382 { 1383 s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid), 1384 GFP_KERNEL); 1385 if (!s->map_cmdline_to_pid) 1386 return -ENOMEM; 1387 1388 s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL); 1389 if (!s->saved_cmdlines) { 1390 kfree(s->map_cmdline_to_pid); 1391 return -ENOMEM; 1392 } 1393 1394 s->cmdline_idx = 0; 1395 s->cmdline_num = val; 1396 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP, 1397 sizeof(s->map_pid_to_cmdline)); 1398 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP, 1399 val * sizeof(*s->map_cmdline_to_pid)); 1400 1401 return 0; 1402 } 1403 1404 static int trace_create_savedcmd(void) 1405 { 1406 int ret; 1407 1408 savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL); 1409 if (!savedcmd) 1410 return -ENOMEM; 1411 1412 ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd); 1413 if (ret < 0) { 1414 kfree(savedcmd); 1415 savedcmd = NULL; 1416 return -ENOMEM; 1417 } 1418 1419 return 0; 1420 } 1421 1422 int is_tracing_stopped(void) 1423 { 1424 return global_trace.stop_count; 1425 } 1426 1427 /** 1428 * tracing_start - quick start of the tracer 1429 * 1430 * If tracing is enabled but was stopped by tracing_stop, 1431 * this will start the tracer back up. 1432 */ 1433 void tracing_start(void) 1434 { 1435 struct ring_buffer *buffer; 1436 unsigned long flags; 1437 1438 if (tracing_disabled) 1439 return; 1440 1441 raw_spin_lock_irqsave(&global_trace.start_lock, flags); 1442 if (--global_trace.stop_count) { 1443 if (global_trace.stop_count < 0) { 1444 /* Someone screwed up their debugging */ 1445 WARN_ON_ONCE(1); 1446 global_trace.stop_count = 0; 1447 } 1448 goto out; 1449 } 1450 1451 /* Prevent the buffers from switching */ 1452 arch_spin_lock(&global_trace.max_lock); 1453 1454 buffer = global_trace.trace_buffer.buffer; 1455 if (buffer) 1456 ring_buffer_record_enable(buffer); 1457 1458 #ifdef CONFIG_TRACER_MAX_TRACE 1459 buffer = global_trace.max_buffer.buffer; 1460 if (buffer) 1461 ring_buffer_record_enable(buffer); 1462 #endif 1463 1464 arch_spin_unlock(&global_trace.max_lock); 1465 1466 out: 1467 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); 1468 } 1469 1470 static void tracing_start_tr(struct trace_array *tr) 1471 { 1472 struct ring_buffer *buffer; 1473 unsigned long flags; 1474 1475 if (tracing_disabled) 1476 return; 1477 1478 /* If global, we need to also start the max tracer */ 1479 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 1480 return tracing_start(); 1481 1482 raw_spin_lock_irqsave(&tr->start_lock, flags); 1483 1484 if (--tr->stop_count) { 1485 if (tr->stop_count < 0) { 1486 /* Someone screwed up their debugging */ 1487 WARN_ON_ONCE(1); 1488 tr->stop_count = 0; 1489 } 1490 goto out; 1491 } 1492 1493 buffer = tr->trace_buffer.buffer; 1494 if (buffer) 1495 ring_buffer_record_enable(buffer); 1496 1497 out: 1498 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 1499 } 1500 1501 /** 1502 * tracing_stop - quick stop of the tracer 1503 * 1504 * Light weight way to stop tracing. Use in conjunction with 1505 * tracing_start. 1506 */ 1507 void tracing_stop(void) 1508 { 1509 struct ring_buffer *buffer; 1510 unsigned long flags; 1511 1512 raw_spin_lock_irqsave(&global_trace.start_lock, flags); 1513 if (global_trace.stop_count++) 1514 goto out; 1515 1516 /* Prevent the buffers from switching */ 1517 arch_spin_lock(&global_trace.max_lock); 1518 1519 buffer = global_trace.trace_buffer.buffer; 1520 if (buffer) 1521 ring_buffer_record_disable(buffer); 1522 1523 #ifdef CONFIG_TRACER_MAX_TRACE 1524 buffer = global_trace.max_buffer.buffer; 1525 if (buffer) 1526 ring_buffer_record_disable(buffer); 1527 #endif 1528 1529 arch_spin_unlock(&global_trace.max_lock); 1530 1531 out: 1532 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); 1533 } 1534 1535 static void tracing_stop_tr(struct trace_array *tr) 1536 { 1537 struct ring_buffer *buffer; 1538 unsigned long flags; 1539 1540 /* If global, we need to also stop the max tracer */ 1541 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 1542 return tracing_stop(); 1543 1544 raw_spin_lock_irqsave(&tr->start_lock, flags); 1545 if (tr->stop_count++) 1546 goto out; 1547 1548 buffer = tr->trace_buffer.buffer; 1549 if (buffer) 1550 ring_buffer_record_disable(buffer); 1551 1552 out: 1553 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 1554 } 1555 1556 void trace_stop_cmdline_recording(void); 1557 1558 static int trace_save_cmdline(struct task_struct *tsk) 1559 { 1560 unsigned pid, idx; 1561 1562 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) 1563 return 0; 1564 1565 /* 1566 * It's not the end of the world if we don't get 1567 * the lock, but we also don't want to spin 1568 * nor do we want to disable interrupts, 1569 * so if we miss here, then better luck next time. 1570 */ 1571 if (!arch_spin_trylock(&trace_cmdline_lock)) 1572 return 0; 1573 1574 idx = savedcmd->map_pid_to_cmdline[tsk->pid]; 1575 if (idx == NO_CMDLINE_MAP) { 1576 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num; 1577 1578 /* 1579 * Check whether the cmdline buffer at idx has a pid 1580 * mapped. We are going to overwrite that entry so we 1581 * need to clear the map_pid_to_cmdline. Otherwise we 1582 * would read the new comm for the old pid. 1583 */ 1584 pid = savedcmd->map_cmdline_to_pid[idx]; 1585 if (pid != NO_CMDLINE_MAP) 1586 savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP; 1587 1588 savedcmd->map_cmdline_to_pid[idx] = tsk->pid; 1589 savedcmd->map_pid_to_cmdline[tsk->pid] = idx; 1590 1591 savedcmd->cmdline_idx = idx; 1592 } 1593 1594 set_cmdline(idx, tsk->comm); 1595 1596 arch_spin_unlock(&trace_cmdline_lock); 1597 1598 return 1; 1599 } 1600 1601 static void __trace_find_cmdline(int pid, char comm[]) 1602 { 1603 unsigned map; 1604 1605 if (!pid) { 1606 strcpy(comm, "<idle>"); 1607 return; 1608 } 1609 1610 if (WARN_ON_ONCE(pid < 0)) { 1611 strcpy(comm, "<XXX>"); 1612 return; 1613 } 1614 1615 if (pid > PID_MAX_DEFAULT) { 1616 strcpy(comm, "<...>"); 1617 return; 1618 } 1619 1620 map = savedcmd->map_pid_to_cmdline[pid]; 1621 if (map != NO_CMDLINE_MAP) 1622 strcpy(comm, get_saved_cmdlines(map)); 1623 else 1624 strcpy(comm, "<...>"); 1625 } 1626 1627 void trace_find_cmdline(int pid, char comm[]) 1628 { 1629 preempt_disable(); 1630 arch_spin_lock(&trace_cmdline_lock); 1631 1632 __trace_find_cmdline(pid, comm); 1633 1634 arch_spin_unlock(&trace_cmdline_lock); 1635 preempt_enable(); 1636 } 1637 1638 void tracing_record_cmdline(struct task_struct *tsk) 1639 { 1640 if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on()) 1641 return; 1642 1643 if (!__this_cpu_read(trace_cmdline_save)) 1644 return; 1645 1646 if (trace_save_cmdline(tsk)) 1647 __this_cpu_write(trace_cmdline_save, false); 1648 } 1649 1650 void 1651 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, 1652 int pc) 1653 { 1654 struct task_struct *tsk = current; 1655 1656 entry->preempt_count = pc & 0xff; 1657 entry->pid = (tsk) ? tsk->pid : 0; 1658 entry->flags = 1659 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT 1660 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | 1661 #else 1662 TRACE_FLAG_IRQS_NOSUPPORT | 1663 #endif 1664 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | 1665 ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) | 1666 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) | 1667 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0); 1668 } 1669 EXPORT_SYMBOL_GPL(tracing_generic_entry_update); 1670 1671 struct ring_buffer_event * 1672 trace_buffer_lock_reserve(struct ring_buffer *buffer, 1673 int type, 1674 unsigned long len, 1675 unsigned long flags, int pc) 1676 { 1677 struct ring_buffer_event *event; 1678 1679 event = ring_buffer_lock_reserve(buffer, len); 1680 if (event != NULL) { 1681 struct trace_entry *ent = ring_buffer_event_data(event); 1682 1683 tracing_generic_entry_update(ent, flags, pc); 1684 ent->type = type; 1685 } 1686 1687 return event; 1688 } 1689 1690 void 1691 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event) 1692 { 1693 __this_cpu_write(trace_cmdline_save, true); 1694 ring_buffer_unlock_commit(buffer, event); 1695 } 1696 1697 void trace_buffer_unlock_commit(struct trace_array *tr, 1698 struct ring_buffer *buffer, 1699 struct ring_buffer_event *event, 1700 unsigned long flags, int pc) 1701 { 1702 __buffer_unlock_commit(buffer, event); 1703 1704 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL); 1705 ftrace_trace_userstack(buffer, flags, pc); 1706 } 1707 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit); 1708 1709 static struct ring_buffer *temp_buffer; 1710 1711 struct ring_buffer_event * 1712 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb, 1713 struct trace_event_file *trace_file, 1714 int type, unsigned long len, 1715 unsigned long flags, int pc) 1716 { 1717 struct ring_buffer_event *entry; 1718 1719 *current_rb = trace_file->tr->trace_buffer.buffer; 1720 entry = trace_buffer_lock_reserve(*current_rb, 1721 type, len, flags, pc); 1722 /* 1723 * If tracing is off, but we have triggers enabled 1724 * we still need to look at the event data. Use the temp_buffer 1725 * to store the trace event for the tigger to use. It's recusive 1726 * safe and will not be recorded anywhere. 1727 */ 1728 if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) { 1729 *current_rb = temp_buffer; 1730 entry = trace_buffer_lock_reserve(*current_rb, 1731 type, len, flags, pc); 1732 } 1733 return entry; 1734 } 1735 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve); 1736 1737 struct ring_buffer_event * 1738 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb, 1739 int type, unsigned long len, 1740 unsigned long flags, int pc) 1741 { 1742 *current_rb = global_trace.trace_buffer.buffer; 1743 return trace_buffer_lock_reserve(*current_rb, 1744 type, len, flags, pc); 1745 } 1746 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve); 1747 1748 void trace_buffer_unlock_commit_regs(struct trace_array *tr, 1749 struct ring_buffer *buffer, 1750 struct ring_buffer_event *event, 1751 unsigned long flags, int pc, 1752 struct pt_regs *regs) 1753 { 1754 __buffer_unlock_commit(buffer, event); 1755 1756 ftrace_trace_stack(tr, buffer, flags, 6, pc, regs); 1757 ftrace_trace_userstack(buffer, flags, pc); 1758 } 1759 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs); 1760 1761 void trace_current_buffer_discard_commit(struct ring_buffer *buffer, 1762 struct ring_buffer_event *event) 1763 { 1764 ring_buffer_discard_commit(buffer, event); 1765 } 1766 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit); 1767 1768 void 1769 trace_function(struct trace_array *tr, 1770 unsigned long ip, unsigned long parent_ip, unsigned long flags, 1771 int pc) 1772 { 1773 struct trace_event_call *call = &event_function; 1774 struct ring_buffer *buffer = tr->trace_buffer.buffer; 1775 struct ring_buffer_event *event; 1776 struct ftrace_entry *entry; 1777 1778 /* If we are reading the ring buffer, don't trace */ 1779 if (unlikely(__this_cpu_read(ftrace_cpu_disabled))) 1780 return; 1781 1782 event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry), 1783 flags, pc); 1784 if (!event) 1785 return; 1786 entry = ring_buffer_event_data(event); 1787 entry->ip = ip; 1788 entry->parent_ip = parent_ip; 1789 1790 if (!call_filter_check_discard(call, entry, buffer, event)) 1791 __buffer_unlock_commit(buffer, event); 1792 } 1793 1794 #ifdef CONFIG_STACKTRACE 1795 1796 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long)) 1797 struct ftrace_stack { 1798 unsigned long calls[FTRACE_STACK_MAX_ENTRIES]; 1799 }; 1800 1801 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack); 1802 static DEFINE_PER_CPU(int, ftrace_stack_reserve); 1803 1804 static void __ftrace_trace_stack(struct ring_buffer *buffer, 1805 unsigned long flags, 1806 int skip, int pc, struct pt_regs *regs) 1807 { 1808 struct trace_event_call *call = &event_kernel_stack; 1809 struct ring_buffer_event *event; 1810 struct stack_entry *entry; 1811 struct stack_trace trace; 1812 int use_stack; 1813 int size = FTRACE_STACK_ENTRIES; 1814 1815 trace.nr_entries = 0; 1816 trace.skip = skip; 1817 1818 /* 1819 * Since events can happen in NMIs there's no safe way to 1820 * use the per cpu ftrace_stacks. We reserve it and if an interrupt 1821 * or NMI comes in, it will just have to use the default 1822 * FTRACE_STACK_SIZE. 1823 */ 1824 preempt_disable_notrace(); 1825 1826 use_stack = __this_cpu_inc_return(ftrace_stack_reserve); 1827 /* 1828 * We don't need any atomic variables, just a barrier. 1829 * If an interrupt comes in, we don't care, because it would 1830 * have exited and put the counter back to what we want. 1831 * We just need a barrier to keep gcc from moving things 1832 * around. 1833 */ 1834 barrier(); 1835 if (use_stack == 1) { 1836 trace.entries = this_cpu_ptr(ftrace_stack.calls); 1837 trace.max_entries = FTRACE_STACK_MAX_ENTRIES; 1838 1839 if (regs) 1840 save_stack_trace_regs(regs, &trace); 1841 else 1842 save_stack_trace(&trace); 1843 1844 if (trace.nr_entries > size) 1845 size = trace.nr_entries; 1846 } else 1847 /* From now on, use_stack is a boolean */ 1848 use_stack = 0; 1849 1850 size *= sizeof(unsigned long); 1851 1852 event = trace_buffer_lock_reserve(buffer, TRACE_STACK, 1853 sizeof(*entry) + size, flags, pc); 1854 if (!event) 1855 goto out; 1856 entry = ring_buffer_event_data(event); 1857 1858 memset(&entry->caller, 0, size); 1859 1860 if (use_stack) 1861 memcpy(&entry->caller, trace.entries, 1862 trace.nr_entries * sizeof(unsigned long)); 1863 else { 1864 trace.max_entries = FTRACE_STACK_ENTRIES; 1865 trace.entries = entry->caller; 1866 if (regs) 1867 save_stack_trace_regs(regs, &trace); 1868 else 1869 save_stack_trace(&trace); 1870 } 1871 1872 entry->size = trace.nr_entries; 1873 1874 if (!call_filter_check_discard(call, entry, buffer, event)) 1875 __buffer_unlock_commit(buffer, event); 1876 1877 out: 1878 /* Again, don't let gcc optimize things here */ 1879 barrier(); 1880 __this_cpu_dec(ftrace_stack_reserve); 1881 preempt_enable_notrace(); 1882 1883 } 1884 1885 static inline void ftrace_trace_stack(struct trace_array *tr, 1886 struct ring_buffer *buffer, 1887 unsigned long flags, 1888 int skip, int pc, struct pt_regs *regs) 1889 { 1890 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) 1891 return; 1892 1893 __ftrace_trace_stack(buffer, flags, skip, pc, regs); 1894 } 1895 1896 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, 1897 int pc) 1898 { 1899 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL); 1900 } 1901 1902 /** 1903 * trace_dump_stack - record a stack back trace in the trace buffer 1904 * @skip: Number of functions to skip (helper handlers) 1905 */ 1906 void trace_dump_stack(int skip) 1907 { 1908 unsigned long flags; 1909 1910 if (tracing_disabled || tracing_selftest_running) 1911 return; 1912 1913 local_save_flags(flags); 1914 1915 /* 1916 * Skip 3 more, seems to get us at the caller of 1917 * this function. 1918 */ 1919 skip += 3; 1920 __ftrace_trace_stack(global_trace.trace_buffer.buffer, 1921 flags, skip, preempt_count(), NULL); 1922 } 1923 1924 static DEFINE_PER_CPU(int, user_stack_count); 1925 1926 void 1927 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc) 1928 { 1929 struct trace_event_call *call = &event_user_stack; 1930 struct ring_buffer_event *event; 1931 struct userstack_entry *entry; 1932 struct stack_trace trace; 1933 1934 if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE)) 1935 return; 1936 1937 /* 1938 * NMIs can not handle page faults, even with fix ups. 1939 * The save user stack can (and often does) fault. 1940 */ 1941 if (unlikely(in_nmi())) 1942 return; 1943 1944 /* 1945 * prevent recursion, since the user stack tracing may 1946 * trigger other kernel events. 1947 */ 1948 preempt_disable(); 1949 if (__this_cpu_read(user_stack_count)) 1950 goto out; 1951 1952 __this_cpu_inc(user_stack_count); 1953 1954 event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK, 1955 sizeof(*entry), flags, pc); 1956 if (!event) 1957 goto out_drop_count; 1958 entry = ring_buffer_event_data(event); 1959 1960 entry->tgid = current->tgid; 1961 memset(&entry->caller, 0, sizeof(entry->caller)); 1962 1963 trace.nr_entries = 0; 1964 trace.max_entries = FTRACE_STACK_ENTRIES; 1965 trace.skip = 0; 1966 trace.entries = entry->caller; 1967 1968 save_stack_trace_user(&trace); 1969 if (!call_filter_check_discard(call, entry, buffer, event)) 1970 __buffer_unlock_commit(buffer, event); 1971 1972 out_drop_count: 1973 __this_cpu_dec(user_stack_count); 1974 out: 1975 preempt_enable(); 1976 } 1977 1978 #ifdef UNUSED 1979 static void __trace_userstack(struct trace_array *tr, unsigned long flags) 1980 { 1981 ftrace_trace_userstack(tr, flags, preempt_count()); 1982 } 1983 #endif /* UNUSED */ 1984 1985 #endif /* CONFIG_STACKTRACE */ 1986 1987 /* created for use with alloc_percpu */ 1988 struct trace_buffer_struct { 1989 char buffer[TRACE_BUF_SIZE]; 1990 }; 1991 1992 static struct trace_buffer_struct *trace_percpu_buffer; 1993 static struct trace_buffer_struct *trace_percpu_sirq_buffer; 1994 static struct trace_buffer_struct *trace_percpu_irq_buffer; 1995 static struct trace_buffer_struct *trace_percpu_nmi_buffer; 1996 1997 /* 1998 * The buffer used is dependent on the context. There is a per cpu 1999 * buffer for normal context, softirq contex, hard irq context and 2000 * for NMI context. Thise allows for lockless recording. 2001 * 2002 * Note, if the buffers failed to be allocated, then this returns NULL 2003 */ 2004 static char *get_trace_buf(void) 2005 { 2006 struct trace_buffer_struct *percpu_buffer; 2007 2008 /* 2009 * If we have allocated per cpu buffers, then we do not 2010 * need to do any locking. 2011 */ 2012 if (in_nmi()) 2013 percpu_buffer = trace_percpu_nmi_buffer; 2014 else if (in_irq()) 2015 percpu_buffer = trace_percpu_irq_buffer; 2016 else if (in_softirq()) 2017 percpu_buffer = trace_percpu_sirq_buffer; 2018 else 2019 percpu_buffer = trace_percpu_buffer; 2020 2021 if (!percpu_buffer) 2022 return NULL; 2023 2024 return this_cpu_ptr(&percpu_buffer->buffer[0]); 2025 } 2026 2027 static int alloc_percpu_trace_buffer(void) 2028 { 2029 struct trace_buffer_struct *buffers; 2030 struct trace_buffer_struct *sirq_buffers; 2031 struct trace_buffer_struct *irq_buffers; 2032 struct trace_buffer_struct *nmi_buffers; 2033 2034 buffers = alloc_percpu(struct trace_buffer_struct); 2035 if (!buffers) 2036 goto err_warn; 2037 2038 sirq_buffers = alloc_percpu(struct trace_buffer_struct); 2039 if (!sirq_buffers) 2040 goto err_sirq; 2041 2042 irq_buffers = alloc_percpu(struct trace_buffer_struct); 2043 if (!irq_buffers) 2044 goto err_irq; 2045 2046 nmi_buffers = alloc_percpu(struct trace_buffer_struct); 2047 if (!nmi_buffers) 2048 goto err_nmi; 2049 2050 trace_percpu_buffer = buffers; 2051 trace_percpu_sirq_buffer = sirq_buffers; 2052 trace_percpu_irq_buffer = irq_buffers; 2053 trace_percpu_nmi_buffer = nmi_buffers; 2054 2055 return 0; 2056 2057 err_nmi: 2058 free_percpu(irq_buffers); 2059 err_irq: 2060 free_percpu(sirq_buffers); 2061 err_sirq: 2062 free_percpu(buffers); 2063 err_warn: 2064 WARN(1, "Could not allocate percpu trace_printk buffer"); 2065 return -ENOMEM; 2066 } 2067 2068 static int buffers_allocated; 2069 2070 void trace_printk_init_buffers(void) 2071 { 2072 if (buffers_allocated) 2073 return; 2074 2075 if (alloc_percpu_trace_buffer()) 2076 return; 2077 2078 /* trace_printk() is for debug use only. Don't use it in production. */ 2079 2080 pr_warning("\n"); 2081 pr_warning("**********************************************************\n"); 2082 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 2083 pr_warning("** **\n"); 2084 pr_warning("** trace_printk() being used. Allocating extra memory. **\n"); 2085 pr_warning("** **\n"); 2086 pr_warning("** This means that this is a DEBUG kernel and it is **\n"); 2087 pr_warning("** unsafe for production use. **\n"); 2088 pr_warning("** **\n"); 2089 pr_warning("** If you see this message and you are not debugging **\n"); 2090 pr_warning("** the kernel, report this immediately to your vendor! **\n"); 2091 pr_warning("** **\n"); 2092 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 2093 pr_warning("**********************************************************\n"); 2094 2095 /* Expand the buffers to set size */ 2096 tracing_update_buffers(); 2097 2098 buffers_allocated = 1; 2099 2100 /* 2101 * trace_printk_init_buffers() can be called by modules. 2102 * If that happens, then we need to start cmdline recording 2103 * directly here. If the global_trace.buffer is already 2104 * allocated here, then this was called by module code. 2105 */ 2106 if (global_trace.trace_buffer.buffer) 2107 tracing_start_cmdline_record(); 2108 } 2109 2110 void trace_printk_start_comm(void) 2111 { 2112 /* Start tracing comms if trace printk is set */ 2113 if (!buffers_allocated) 2114 return; 2115 tracing_start_cmdline_record(); 2116 } 2117 2118 static void trace_printk_start_stop_comm(int enabled) 2119 { 2120 if (!buffers_allocated) 2121 return; 2122 2123 if (enabled) 2124 tracing_start_cmdline_record(); 2125 else 2126 tracing_stop_cmdline_record(); 2127 } 2128 2129 /** 2130 * trace_vbprintk - write binary msg to tracing buffer 2131 * 2132 */ 2133 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) 2134 { 2135 struct trace_event_call *call = &event_bprint; 2136 struct ring_buffer_event *event; 2137 struct ring_buffer *buffer; 2138 struct trace_array *tr = &global_trace; 2139 struct bprint_entry *entry; 2140 unsigned long flags; 2141 char *tbuffer; 2142 int len = 0, size, pc; 2143 2144 if (unlikely(tracing_selftest_running || tracing_disabled)) 2145 return 0; 2146 2147 /* Don't pollute graph traces with trace_vprintk internals */ 2148 pause_graph_tracing(); 2149 2150 pc = preempt_count(); 2151 preempt_disable_notrace(); 2152 2153 tbuffer = get_trace_buf(); 2154 if (!tbuffer) { 2155 len = 0; 2156 goto out; 2157 } 2158 2159 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args); 2160 2161 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0) 2162 goto out; 2163 2164 local_save_flags(flags); 2165 size = sizeof(*entry) + sizeof(u32) * len; 2166 buffer = tr->trace_buffer.buffer; 2167 event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, 2168 flags, pc); 2169 if (!event) 2170 goto out; 2171 entry = ring_buffer_event_data(event); 2172 entry->ip = ip; 2173 entry->fmt = fmt; 2174 2175 memcpy(entry->buf, tbuffer, sizeof(u32) * len); 2176 if (!call_filter_check_discard(call, entry, buffer, event)) { 2177 __buffer_unlock_commit(buffer, event); 2178 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL); 2179 } 2180 2181 out: 2182 preempt_enable_notrace(); 2183 unpause_graph_tracing(); 2184 2185 return len; 2186 } 2187 EXPORT_SYMBOL_GPL(trace_vbprintk); 2188 2189 static int 2190 __trace_array_vprintk(struct ring_buffer *buffer, 2191 unsigned long ip, const char *fmt, va_list args) 2192 { 2193 struct trace_event_call *call = &event_print; 2194 struct ring_buffer_event *event; 2195 int len = 0, size, pc; 2196 struct print_entry *entry; 2197 unsigned long flags; 2198 char *tbuffer; 2199 2200 if (tracing_disabled || tracing_selftest_running) 2201 return 0; 2202 2203 /* Don't pollute graph traces with trace_vprintk internals */ 2204 pause_graph_tracing(); 2205 2206 pc = preempt_count(); 2207 preempt_disable_notrace(); 2208 2209 2210 tbuffer = get_trace_buf(); 2211 if (!tbuffer) { 2212 len = 0; 2213 goto out; 2214 } 2215 2216 len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args); 2217 2218 local_save_flags(flags); 2219 size = sizeof(*entry) + len + 1; 2220 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 2221 flags, pc); 2222 if (!event) 2223 goto out; 2224 entry = ring_buffer_event_data(event); 2225 entry->ip = ip; 2226 2227 memcpy(&entry->buf, tbuffer, len + 1); 2228 if (!call_filter_check_discard(call, entry, buffer, event)) { 2229 __buffer_unlock_commit(buffer, event); 2230 ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL); 2231 } 2232 out: 2233 preempt_enable_notrace(); 2234 unpause_graph_tracing(); 2235 2236 return len; 2237 } 2238 2239 int trace_array_vprintk(struct trace_array *tr, 2240 unsigned long ip, const char *fmt, va_list args) 2241 { 2242 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args); 2243 } 2244 2245 int trace_array_printk(struct trace_array *tr, 2246 unsigned long ip, const char *fmt, ...) 2247 { 2248 int ret; 2249 va_list ap; 2250 2251 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 2252 return 0; 2253 2254 va_start(ap, fmt); 2255 ret = trace_array_vprintk(tr, ip, fmt, ap); 2256 va_end(ap); 2257 return ret; 2258 } 2259 2260 int trace_array_printk_buf(struct ring_buffer *buffer, 2261 unsigned long ip, const char *fmt, ...) 2262 { 2263 int ret; 2264 va_list ap; 2265 2266 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) 2267 return 0; 2268 2269 va_start(ap, fmt); 2270 ret = __trace_array_vprintk(buffer, ip, fmt, ap); 2271 va_end(ap); 2272 return ret; 2273 } 2274 2275 int trace_vprintk(unsigned long ip, const char *fmt, va_list args) 2276 { 2277 return trace_array_vprintk(&global_trace, ip, fmt, args); 2278 } 2279 EXPORT_SYMBOL_GPL(trace_vprintk); 2280 2281 static void trace_iterator_increment(struct trace_iterator *iter) 2282 { 2283 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu); 2284 2285 iter->idx++; 2286 if (buf_iter) 2287 ring_buffer_read(buf_iter, NULL); 2288 } 2289 2290 static struct trace_entry * 2291 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts, 2292 unsigned long *lost_events) 2293 { 2294 struct ring_buffer_event *event; 2295 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu); 2296 2297 if (buf_iter) 2298 event = ring_buffer_iter_peek(buf_iter, ts); 2299 else 2300 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts, 2301 lost_events); 2302 2303 if (event) { 2304 iter->ent_size = ring_buffer_event_length(event); 2305 return ring_buffer_event_data(event); 2306 } 2307 iter->ent_size = 0; 2308 return NULL; 2309 } 2310 2311 static struct trace_entry * 2312 __find_next_entry(struct trace_iterator *iter, int *ent_cpu, 2313 unsigned long *missing_events, u64 *ent_ts) 2314 { 2315 struct ring_buffer *buffer = iter->trace_buffer->buffer; 2316 struct trace_entry *ent, *next = NULL; 2317 unsigned long lost_events = 0, next_lost = 0; 2318 int cpu_file = iter->cpu_file; 2319 u64 next_ts = 0, ts; 2320 int next_cpu = -1; 2321 int next_size = 0; 2322 int cpu; 2323 2324 /* 2325 * If we are in a per_cpu trace file, don't bother by iterating over 2326 * all cpu and peek directly. 2327 */ 2328 if (cpu_file > RING_BUFFER_ALL_CPUS) { 2329 if (ring_buffer_empty_cpu(buffer, cpu_file)) 2330 return NULL; 2331 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events); 2332 if (ent_cpu) 2333 *ent_cpu = cpu_file; 2334 2335 return ent; 2336 } 2337 2338 for_each_tracing_cpu(cpu) { 2339 2340 if (ring_buffer_empty_cpu(buffer, cpu)) 2341 continue; 2342 2343 ent = peek_next_entry(iter, cpu, &ts, &lost_events); 2344 2345 /* 2346 * Pick the entry with the smallest timestamp: 2347 */ 2348 if (ent && (!next || ts < next_ts)) { 2349 next = ent; 2350 next_cpu = cpu; 2351 next_ts = ts; 2352 next_lost = lost_events; 2353 next_size = iter->ent_size; 2354 } 2355 } 2356 2357 iter->ent_size = next_size; 2358 2359 if (ent_cpu) 2360 *ent_cpu = next_cpu; 2361 2362 if (ent_ts) 2363 *ent_ts = next_ts; 2364 2365 if (missing_events) 2366 *missing_events = next_lost; 2367 2368 return next; 2369 } 2370 2371 /* Find the next real entry, without updating the iterator itself */ 2372 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter, 2373 int *ent_cpu, u64 *ent_ts) 2374 { 2375 return __find_next_entry(iter, ent_cpu, NULL, ent_ts); 2376 } 2377 2378 /* Find the next real entry, and increment the iterator to the next entry */ 2379 void *trace_find_next_entry_inc(struct trace_iterator *iter) 2380 { 2381 iter->ent = __find_next_entry(iter, &iter->cpu, 2382 &iter->lost_events, &iter->ts); 2383 2384 if (iter->ent) 2385 trace_iterator_increment(iter); 2386 2387 return iter->ent ? iter : NULL; 2388 } 2389 2390 static void trace_consume(struct trace_iterator *iter) 2391 { 2392 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts, 2393 &iter->lost_events); 2394 } 2395 2396 static void *s_next(struct seq_file *m, void *v, loff_t *pos) 2397 { 2398 struct trace_iterator *iter = m->private; 2399 int i = (int)*pos; 2400 void *ent; 2401 2402 WARN_ON_ONCE(iter->leftover); 2403 2404 (*pos)++; 2405 2406 /* can't go backwards */ 2407 if (iter->idx > i) 2408 return NULL; 2409 2410 if (iter->idx < 0) 2411 ent = trace_find_next_entry_inc(iter); 2412 else 2413 ent = iter; 2414 2415 while (ent && iter->idx < i) 2416 ent = trace_find_next_entry_inc(iter); 2417 2418 iter->pos = *pos; 2419 2420 return ent; 2421 } 2422 2423 void tracing_iter_reset(struct trace_iterator *iter, int cpu) 2424 { 2425 struct ring_buffer_event *event; 2426 struct ring_buffer_iter *buf_iter; 2427 unsigned long entries = 0; 2428 u64 ts; 2429 2430 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0; 2431 2432 buf_iter = trace_buffer_iter(iter, cpu); 2433 if (!buf_iter) 2434 return; 2435 2436 ring_buffer_iter_reset(buf_iter); 2437 2438 /* 2439 * We could have the case with the max latency tracers 2440 * that a reset never took place on a cpu. This is evident 2441 * by the timestamp being before the start of the buffer. 2442 */ 2443 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) { 2444 if (ts >= iter->trace_buffer->time_start) 2445 break; 2446 entries++; 2447 ring_buffer_read(buf_iter, NULL); 2448 } 2449 2450 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries; 2451 } 2452 2453 /* 2454 * The current tracer is copied to avoid a global locking 2455 * all around. 2456 */ 2457 static void *s_start(struct seq_file *m, loff_t *pos) 2458 { 2459 struct trace_iterator *iter = m->private; 2460 struct trace_array *tr = iter->tr; 2461 int cpu_file = iter->cpu_file; 2462 void *p = NULL; 2463 loff_t l = 0; 2464 int cpu; 2465 2466 /* 2467 * copy the tracer to avoid using a global lock all around. 2468 * iter->trace is a copy of current_trace, the pointer to the 2469 * name may be used instead of a strcmp(), as iter->trace->name 2470 * will point to the same string as current_trace->name. 2471 */ 2472 mutex_lock(&trace_types_lock); 2473 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name)) 2474 *iter->trace = *tr->current_trace; 2475 mutex_unlock(&trace_types_lock); 2476 2477 #ifdef CONFIG_TRACER_MAX_TRACE 2478 if (iter->snapshot && iter->trace->use_max_tr) 2479 return ERR_PTR(-EBUSY); 2480 #endif 2481 2482 if (!iter->snapshot) 2483 atomic_inc(&trace_record_cmdline_disabled); 2484 2485 if (*pos != iter->pos) { 2486 iter->ent = NULL; 2487 iter->cpu = 0; 2488 iter->idx = -1; 2489 2490 if (cpu_file == RING_BUFFER_ALL_CPUS) { 2491 for_each_tracing_cpu(cpu) 2492 tracing_iter_reset(iter, cpu); 2493 } else 2494 tracing_iter_reset(iter, cpu_file); 2495 2496 iter->leftover = 0; 2497 for (p = iter; p && l < *pos; p = s_next(m, p, &l)) 2498 ; 2499 2500 } else { 2501 /* 2502 * If we overflowed the seq_file before, then we want 2503 * to just reuse the trace_seq buffer again. 2504 */ 2505 if (iter->leftover) 2506 p = iter; 2507 else { 2508 l = *pos - 1; 2509 p = s_next(m, p, &l); 2510 } 2511 } 2512 2513 trace_event_read_lock(); 2514 trace_access_lock(cpu_file); 2515 return p; 2516 } 2517 2518 static void s_stop(struct seq_file *m, void *p) 2519 { 2520 struct trace_iterator *iter = m->private; 2521 2522 #ifdef CONFIG_TRACER_MAX_TRACE 2523 if (iter->snapshot && iter->trace->use_max_tr) 2524 return; 2525 #endif 2526 2527 if (!iter->snapshot) 2528 atomic_dec(&trace_record_cmdline_disabled); 2529 2530 trace_access_unlock(iter->cpu_file); 2531 trace_event_read_unlock(); 2532 } 2533 2534 static void 2535 get_total_entries(struct trace_buffer *buf, 2536 unsigned long *total, unsigned long *entries) 2537 { 2538 unsigned long count; 2539 int cpu; 2540 2541 *total = 0; 2542 *entries = 0; 2543 2544 for_each_tracing_cpu(cpu) { 2545 count = ring_buffer_entries_cpu(buf->buffer, cpu); 2546 /* 2547 * If this buffer has skipped entries, then we hold all 2548 * entries for the trace and we need to ignore the 2549 * ones before the time stamp. 2550 */ 2551 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) { 2552 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries; 2553 /* total is the same as the entries */ 2554 *total += count; 2555 } else 2556 *total += count + 2557 ring_buffer_overrun_cpu(buf->buffer, cpu); 2558 *entries += count; 2559 } 2560 } 2561 2562 static void print_lat_help_header(struct seq_file *m) 2563 { 2564 seq_puts(m, "# _------=> CPU# \n" 2565 "# / _-----=> irqs-off \n" 2566 "# | / _----=> need-resched \n" 2567 "# || / _---=> hardirq/softirq \n" 2568 "# ||| / _--=> preempt-depth \n" 2569 "# |||| / delay \n" 2570 "# cmd pid ||||| time | caller \n" 2571 "# \\ / ||||| \\ | / \n"); 2572 } 2573 2574 static void print_event_info(struct trace_buffer *buf, struct seq_file *m) 2575 { 2576 unsigned long total; 2577 unsigned long entries; 2578 2579 get_total_entries(buf, &total, &entries); 2580 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n", 2581 entries, total, num_online_cpus()); 2582 seq_puts(m, "#\n"); 2583 } 2584 2585 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m) 2586 { 2587 print_event_info(buf, m); 2588 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n" 2589 "# | | | | |\n"); 2590 } 2591 2592 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m) 2593 { 2594 print_event_info(buf, m); 2595 seq_puts(m, "# _-----=> irqs-off\n" 2596 "# / _----=> need-resched\n" 2597 "# | / _---=> hardirq/softirq\n" 2598 "# || / _--=> preempt-depth\n" 2599 "# ||| / delay\n" 2600 "# TASK-PID CPU# |||| TIMESTAMP FUNCTION\n" 2601 "# | | | |||| | |\n"); 2602 } 2603 2604 void 2605 print_trace_header(struct seq_file *m, struct trace_iterator *iter) 2606 { 2607 unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK); 2608 struct trace_buffer *buf = iter->trace_buffer; 2609 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu); 2610 struct tracer *type = iter->trace; 2611 unsigned long entries; 2612 unsigned long total; 2613 const char *name = "preemption"; 2614 2615 name = type->name; 2616 2617 get_total_entries(buf, &total, &entries); 2618 2619 seq_printf(m, "# %s latency trace v1.1.5 on %s\n", 2620 name, UTS_RELEASE); 2621 seq_puts(m, "# -----------------------------------" 2622 "---------------------------------\n"); 2623 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |" 2624 " (M:%s VP:%d, KP:%d, SP:%d HP:%d", 2625 nsecs_to_usecs(data->saved_latency), 2626 entries, 2627 total, 2628 buf->cpu, 2629 #if defined(CONFIG_PREEMPT_NONE) 2630 "server", 2631 #elif defined(CONFIG_PREEMPT_VOLUNTARY) 2632 "desktop", 2633 #elif defined(CONFIG_PREEMPT) 2634 "preempt", 2635 #else 2636 "unknown", 2637 #endif 2638 /* These are reserved for later use */ 2639 0, 0, 0, 0); 2640 #ifdef CONFIG_SMP 2641 seq_printf(m, " #P:%d)\n", num_online_cpus()); 2642 #else 2643 seq_puts(m, ")\n"); 2644 #endif 2645 seq_puts(m, "# -----------------\n"); 2646 seq_printf(m, "# | task: %.16s-%d " 2647 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n", 2648 data->comm, data->pid, 2649 from_kuid_munged(seq_user_ns(m), data->uid), data->nice, 2650 data->policy, data->rt_priority); 2651 seq_puts(m, "# -----------------\n"); 2652 2653 if (data->critical_start) { 2654 seq_puts(m, "# => started at: "); 2655 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags); 2656 trace_print_seq(m, &iter->seq); 2657 seq_puts(m, "\n# => ended at: "); 2658 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags); 2659 trace_print_seq(m, &iter->seq); 2660 seq_puts(m, "\n#\n"); 2661 } 2662 2663 seq_puts(m, "#\n"); 2664 } 2665 2666 static void test_cpu_buff_start(struct trace_iterator *iter) 2667 { 2668 struct trace_seq *s = &iter->seq; 2669 struct trace_array *tr = iter->tr; 2670 2671 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE)) 2672 return; 2673 2674 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE)) 2675 return; 2676 2677 if (iter->started && cpumask_test_cpu(iter->cpu, iter->started)) 2678 return; 2679 2680 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries) 2681 return; 2682 2683 if (iter->started) 2684 cpumask_set_cpu(iter->cpu, iter->started); 2685 2686 /* Don't print started cpu buffer for the first entry of the trace */ 2687 if (iter->idx > 1) 2688 trace_seq_printf(s, "##### CPU %u buffer started ####\n", 2689 iter->cpu); 2690 } 2691 2692 static enum print_line_t print_trace_fmt(struct trace_iterator *iter) 2693 { 2694 struct trace_array *tr = iter->tr; 2695 struct trace_seq *s = &iter->seq; 2696 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK); 2697 struct trace_entry *entry; 2698 struct trace_event *event; 2699 2700 entry = iter->ent; 2701 2702 test_cpu_buff_start(iter); 2703 2704 event = ftrace_find_event(entry->type); 2705 2706 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 2707 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 2708 trace_print_lat_context(iter); 2709 else 2710 trace_print_context(iter); 2711 } 2712 2713 if (trace_seq_has_overflowed(s)) 2714 return TRACE_TYPE_PARTIAL_LINE; 2715 2716 if (event) 2717 return event->funcs->trace(iter, sym_flags, event); 2718 2719 trace_seq_printf(s, "Unknown type %d\n", entry->type); 2720 2721 return trace_handle_return(s); 2722 } 2723 2724 static enum print_line_t print_raw_fmt(struct trace_iterator *iter) 2725 { 2726 struct trace_array *tr = iter->tr; 2727 struct trace_seq *s = &iter->seq; 2728 struct trace_entry *entry; 2729 struct trace_event *event; 2730 2731 entry = iter->ent; 2732 2733 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) 2734 trace_seq_printf(s, "%d %d %llu ", 2735 entry->pid, iter->cpu, iter->ts); 2736 2737 if (trace_seq_has_overflowed(s)) 2738 return TRACE_TYPE_PARTIAL_LINE; 2739 2740 event = ftrace_find_event(entry->type); 2741 if (event) 2742 return event->funcs->raw(iter, 0, event); 2743 2744 trace_seq_printf(s, "%d ?\n", entry->type); 2745 2746 return trace_handle_return(s); 2747 } 2748 2749 static enum print_line_t print_hex_fmt(struct trace_iterator *iter) 2750 { 2751 struct trace_array *tr = iter->tr; 2752 struct trace_seq *s = &iter->seq; 2753 unsigned char newline = '\n'; 2754 struct trace_entry *entry; 2755 struct trace_event *event; 2756 2757 entry = iter->ent; 2758 2759 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 2760 SEQ_PUT_HEX_FIELD(s, entry->pid); 2761 SEQ_PUT_HEX_FIELD(s, iter->cpu); 2762 SEQ_PUT_HEX_FIELD(s, iter->ts); 2763 if (trace_seq_has_overflowed(s)) 2764 return TRACE_TYPE_PARTIAL_LINE; 2765 } 2766 2767 event = ftrace_find_event(entry->type); 2768 if (event) { 2769 enum print_line_t ret = event->funcs->hex(iter, 0, event); 2770 if (ret != TRACE_TYPE_HANDLED) 2771 return ret; 2772 } 2773 2774 SEQ_PUT_FIELD(s, newline); 2775 2776 return trace_handle_return(s); 2777 } 2778 2779 static enum print_line_t print_bin_fmt(struct trace_iterator *iter) 2780 { 2781 struct trace_array *tr = iter->tr; 2782 struct trace_seq *s = &iter->seq; 2783 struct trace_entry *entry; 2784 struct trace_event *event; 2785 2786 entry = iter->ent; 2787 2788 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { 2789 SEQ_PUT_FIELD(s, entry->pid); 2790 SEQ_PUT_FIELD(s, iter->cpu); 2791 SEQ_PUT_FIELD(s, iter->ts); 2792 if (trace_seq_has_overflowed(s)) 2793 return TRACE_TYPE_PARTIAL_LINE; 2794 } 2795 2796 event = ftrace_find_event(entry->type); 2797 return event ? event->funcs->binary(iter, 0, event) : 2798 TRACE_TYPE_HANDLED; 2799 } 2800 2801 int trace_empty(struct trace_iterator *iter) 2802 { 2803 struct ring_buffer_iter *buf_iter; 2804 int cpu; 2805 2806 /* If we are looking at one CPU buffer, only check that one */ 2807 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 2808 cpu = iter->cpu_file; 2809 buf_iter = trace_buffer_iter(iter, cpu); 2810 if (buf_iter) { 2811 if (!ring_buffer_iter_empty(buf_iter)) 2812 return 0; 2813 } else { 2814 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu)) 2815 return 0; 2816 } 2817 return 1; 2818 } 2819 2820 for_each_tracing_cpu(cpu) { 2821 buf_iter = trace_buffer_iter(iter, cpu); 2822 if (buf_iter) { 2823 if (!ring_buffer_iter_empty(buf_iter)) 2824 return 0; 2825 } else { 2826 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu)) 2827 return 0; 2828 } 2829 } 2830 2831 return 1; 2832 } 2833 2834 /* Called with trace_event_read_lock() held. */ 2835 enum print_line_t print_trace_line(struct trace_iterator *iter) 2836 { 2837 struct trace_array *tr = iter->tr; 2838 unsigned long trace_flags = tr->trace_flags; 2839 enum print_line_t ret; 2840 2841 if (iter->lost_events) { 2842 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n", 2843 iter->cpu, iter->lost_events); 2844 if (trace_seq_has_overflowed(&iter->seq)) 2845 return TRACE_TYPE_PARTIAL_LINE; 2846 } 2847 2848 if (iter->trace && iter->trace->print_line) { 2849 ret = iter->trace->print_line(iter); 2850 if (ret != TRACE_TYPE_UNHANDLED) 2851 return ret; 2852 } 2853 2854 if (iter->ent->type == TRACE_BPUTS && 2855 trace_flags & TRACE_ITER_PRINTK && 2856 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2857 return trace_print_bputs_msg_only(iter); 2858 2859 if (iter->ent->type == TRACE_BPRINT && 2860 trace_flags & TRACE_ITER_PRINTK && 2861 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2862 return trace_print_bprintk_msg_only(iter); 2863 2864 if (iter->ent->type == TRACE_PRINT && 2865 trace_flags & TRACE_ITER_PRINTK && 2866 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2867 return trace_print_printk_msg_only(iter); 2868 2869 if (trace_flags & TRACE_ITER_BIN) 2870 return print_bin_fmt(iter); 2871 2872 if (trace_flags & TRACE_ITER_HEX) 2873 return print_hex_fmt(iter); 2874 2875 if (trace_flags & TRACE_ITER_RAW) 2876 return print_raw_fmt(iter); 2877 2878 return print_trace_fmt(iter); 2879 } 2880 2881 void trace_latency_header(struct seq_file *m) 2882 { 2883 struct trace_iterator *iter = m->private; 2884 struct trace_array *tr = iter->tr; 2885 2886 /* print nothing if the buffers are empty */ 2887 if (trace_empty(iter)) 2888 return; 2889 2890 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 2891 print_trace_header(m, iter); 2892 2893 if (!(tr->trace_flags & TRACE_ITER_VERBOSE)) 2894 print_lat_help_header(m); 2895 } 2896 2897 void trace_default_header(struct seq_file *m) 2898 { 2899 struct trace_iterator *iter = m->private; 2900 struct trace_array *tr = iter->tr; 2901 unsigned long trace_flags = tr->trace_flags; 2902 2903 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) 2904 return; 2905 2906 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { 2907 /* print nothing if the buffers are empty */ 2908 if (trace_empty(iter)) 2909 return; 2910 print_trace_header(m, iter); 2911 if (!(trace_flags & TRACE_ITER_VERBOSE)) 2912 print_lat_help_header(m); 2913 } else { 2914 if (!(trace_flags & TRACE_ITER_VERBOSE)) { 2915 if (trace_flags & TRACE_ITER_IRQ_INFO) 2916 print_func_help_header_irq(iter->trace_buffer, m); 2917 else 2918 print_func_help_header(iter->trace_buffer, m); 2919 } 2920 } 2921 } 2922 2923 static void test_ftrace_alive(struct seq_file *m) 2924 { 2925 if (!ftrace_is_dead()) 2926 return; 2927 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n" 2928 "# MAY BE MISSING FUNCTION EVENTS\n"); 2929 } 2930 2931 #ifdef CONFIG_TRACER_MAX_TRACE 2932 static void show_snapshot_main_help(struct seq_file *m) 2933 { 2934 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n" 2935 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n" 2936 "# Takes a snapshot of the main buffer.\n" 2937 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n" 2938 "# (Doesn't have to be '2' works with any number that\n" 2939 "# is not a '0' or '1')\n"); 2940 } 2941 2942 static void show_snapshot_percpu_help(struct seq_file *m) 2943 { 2944 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n"); 2945 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP 2946 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n" 2947 "# Takes a snapshot of the main buffer for this cpu.\n"); 2948 #else 2949 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n" 2950 "# Must use main snapshot file to allocate.\n"); 2951 #endif 2952 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n" 2953 "# (Doesn't have to be '2' works with any number that\n" 2954 "# is not a '0' or '1')\n"); 2955 } 2956 2957 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) 2958 { 2959 if (iter->tr->allocated_snapshot) 2960 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n"); 2961 else 2962 seq_puts(m, "#\n# * Snapshot is freed *\n#\n"); 2963 2964 seq_puts(m, "# Snapshot commands:\n"); 2965 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 2966 show_snapshot_main_help(m); 2967 else 2968 show_snapshot_percpu_help(m); 2969 } 2970 #else 2971 /* Should never be called */ 2972 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { } 2973 #endif 2974 2975 static int s_show(struct seq_file *m, void *v) 2976 { 2977 struct trace_iterator *iter = v; 2978 int ret; 2979 2980 if (iter->ent == NULL) { 2981 if (iter->tr) { 2982 seq_printf(m, "# tracer: %s\n", iter->trace->name); 2983 seq_puts(m, "#\n"); 2984 test_ftrace_alive(m); 2985 } 2986 if (iter->snapshot && trace_empty(iter)) 2987 print_snapshot_help(m, iter); 2988 else if (iter->trace && iter->trace->print_header) 2989 iter->trace->print_header(m); 2990 else 2991 trace_default_header(m); 2992 2993 } else if (iter->leftover) { 2994 /* 2995 * If we filled the seq_file buffer earlier, we 2996 * want to just show it now. 2997 */ 2998 ret = trace_print_seq(m, &iter->seq); 2999 3000 /* ret should this time be zero, but you never know */ 3001 iter->leftover = ret; 3002 3003 } else { 3004 print_trace_line(iter); 3005 ret = trace_print_seq(m, &iter->seq); 3006 /* 3007 * If we overflow the seq_file buffer, then it will 3008 * ask us for this data again at start up. 3009 * Use that instead. 3010 * ret is 0 if seq_file write succeeded. 3011 * -1 otherwise. 3012 */ 3013 iter->leftover = ret; 3014 } 3015 3016 return 0; 3017 } 3018 3019 /* 3020 * Should be used after trace_array_get(), trace_types_lock 3021 * ensures that i_cdev was already initialized. 3022 */ 3023 static inline int tracing_get_cpu(struct inode *inode) 3024 { 3025 if (inode->i_cdev) /* See trace_create_cpu_file() */ 3026 return (long)inode->i_cdev - 1; 3027 return RING_BUFFER_ALL_CPUS; 3028 } 3029 3030 static const struct seq_operations tracer_seq_ops = { 3031 .start = s_start, 3032 .next = s_next, 3033 .stop = s_stop, 3034 .show = s_show, 3035 }; 3036 3037 static struct trace_iterator * 3038 __tracing_open(struct inode *inode, struct file *file, bool snapshot) 3039 { 3040 struct trace_array *tr = inode->i_private; 3041 struct trace_iterator *iter; 3042 int cpu; 3043 3044 if (tracing_disabled) 3045 return ERR_PTR(-ENODEV); 3046 3047 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter)); 3048 if (!iter) 3049 return ERR_PTR(-ENOMEM); 3050 3051 iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter), 3052 GFP_KERNEL); 3053 if (!iter->buffer_iter) 3054 goto release; 3055 3056 /* 3057 * We make a copy of the current tracer to avoid concurrent 3058 * changes on it while we are reading. 3059 */ 3060 mutex_lock(&trace_types_lock); 3061 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL); 3062 if (!iter->trace) 3063 goto fail; 3064 3065 *iter->trace = *tr->current_trace; 3066 3067 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL)) 3068 goto fail; 3069 3070 iter->tr = tr; 3071 3072 #ifdef CONFIG_TRACER_MAX_TRACE 3073 /* Currently only the top directory has a snapshot */ 3074 if (tr->current_trace->print_max || snapshot) 3075 iter->trace_buffer = &tr->max_buffer; 3076 else 3077 #endif 3078 iter->trace_buffer = &tr->trace_buffer; 3079 iter->snapshot = snapshot; 3080 iter->pos = -1; 3081 iter->cpu_file = tracing_get_cpu(inode); 3082 mutex_init(&iter->mutex); 3083 3084 /* Notify the tracer early; before we stop tracing. */ 3085 if (iter->trace && iter->trace->open) 3086 iter->trace->open(iter); 3087 3088 /* Annotate start of buffers if we had overruns */ 3089 if (ring_buffer_overruns(iter->trace_buffer->buffer)) 3090 iter->iter_flags |= TRACE_FILE_ANNOTATE; 3091 3092 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 3093 if (trace_clocks[tr->clock_id].in_ns) 3094 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 3095 3096 /* stop the trace while dumping if we are not opening "snapshot" */ 3097 if (!iter->snapshot) 3098 tracing_stop_tr(tr); 3099 3100 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) { 3101 for_each_tracing_cpu(cpu) { 3102 iter->buffer_iter[cpu] = 3103 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); 3104 } 3105 ring_buffer_read_prepare_sync(); 3106 for_each_tracing_cpu(cpu) { 3107 ring_buffer_read_start(iter->buffer_iter[cpu]); 3108 tracing_iter_reset(iter, cpu); 3109 } 3110 } else { 3111 cpu = iter->cpu_file; 3112 iter->buffer_iter[cpu] = 3113 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); 3114 ring_buffer_read_prepare_sync(); 3115 ring_buffer_read_start(iter->buffer_iter[cpu]); 3116 tracing_iter_reset(iter, cpu); 3117 } 3118 3119 mutex_unlock(&trace_types_lock); 3120 3121 return iter; 3122 3123 fail: 3124 mutex_unlock(&trace_types_lock); 3125 kfree(iter->trace); 3126 kfree(iter->buffer_iter); 3127 release: 3128 seq_release_private(inode, file); 3129 return ERR_PTR(-ENOMEM); 3130 } 3131 3132 int tracing_open_generic(struct inode *inode, struct file *filp) 3133 { 3134 if (tracing_disabled) 3135 return -ENODEV; 3136 3137 filp->private_data = inode->i_private; 3138 return 0; 3139 } 3140 3141 bool tracing_is_disabled(void) 3142 { 3143 return (tracing_disabled) ? true: false; 3144 } 3145 3146 /* 3147 * Open and update trace_array ref count. 3148 * Must have the current trace_array passed to it. 3149 */ 3150 static int tracing_open_generic_tr(struct inode *inode, struct file *filp) 3151 { 3152 struct trace_array *tr = inode->i_private; 3153 3154 if (tracing_disabled) 3155 return -ENODEV; 3156 3157 if (trace_array_get(tr) < 0) 3158 return -ENODEV; 3159 3160 filp->private_data = inode->i_private; 3161 3162 return 0; 3163 } 3164 3165 static int tracing_release(struct inode *inode, struct file *file) 3166 { 3167 struct trace_array *tr = inode->i_private; 3168 struct seq_file *m = file->private_data; 3169 struct trace_iterator *iter; 3170 int cpu; 3171 3172 if (!(file->f_mode & FMODE_READ)) { 3173 trace_array_put(tr); 3174 return 0; 3175 } 3176 3177 /* Writes do not use seq_file */ 3178 iter = m->private; 3179 mutex_lock(&trace_types_lock); 3180 3181 for_each_tracing_cpu(cpu) { 3182 if (iter->buffer_iter[cpu]) 3183 ring_buffer_read_finish(iter->buffer_iter[cpu]); 3184 } 3185 3186 if (iter->trace && iter->trace->close) 3187 iter->trace->close(iter); 3188 3189 if (!iter->snapshot) 3190 /* reenable tracing if it was previously enabled */ 3191 tracing_start_tr(tr); 3192 3193 __trace_array_put(tr); 3194 3195 mutex_unlock(&trace_types_lock); 3196 3197 mutex_destroy(&iter->mutex); 3198 free_cpumask_var(iter->started); 3199 kfree(iter->trace); 3200 kfree(iter->buffer_iter); 3201 seq_release_private(inode, file); 3202 3203 return 0; 3204 } 3205 3206 static int tracing_release_generic_tr(struct inode *inode, struct file *file) 3207 { 3208 struct trace_array *tr = inode->i_private; 3209 3210 trace_array_put(tr); 3211 return 0; 3212 } 3213 3214 static int tracing_single_release_tr(struct inode *inode, struct file *file) 3215 { 3216 struct trace_array *tr = inode->i_private; 3217 3218 trace_array_put(tr); 3219 3220 return single_release(inode, file); 3221 } 3222 3223 static int tracing_open(struct inode *inode, struct file *file) 3224 { 3225 struct trace_array *tr = inode->i_private; 3226 struct trace_iterator *iter; 3227 int ret = 0; 3228 3229 if (trace_array_get(tr) < 0) 3230 return -ENODEV; 3231 3232 /* If this file was open for write, then erase contents */ 3233 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) { 3234 int cpu = tracing_get_cpu(inode); 3235 3236 if (cpu == RING_BUFFER_ALL_CPUS) 3237 tracing_reset_online_cpus(&tr->trace_buffer); 3238 else 3239 tracing_reset(&tr->trace_buffer, cpu); 3240 } 3241 3242 if (file->f_mode & FMODE_READ) { 3243 iter = __tracing_open(inode, file, false); 3244 if (IS_ERR(iter)) 3245 ret = PTR_ERR(iter); 3246 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) 3247 iter->iter_flags |= TRACE_FILE_LAT_FMT; 3248 } 3249 3250 if (ret < 0) 3251 trace_array_put(tr); 3252 3253 return ret; 3254 } 3255 3256 /* 3257 * Some tracers are not suitable for instance buffers. 3258 * A tracer is always available for the global array (toplevel) 3259 * or if it explicitly states that it is. 3260 */ 3261 static bool 3262 trace_ok_for_array(struct tracer *t, struct trace_array *tr) 3263 { 3264 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; 3265 } 3266 3267 /* Find the next tracer that this trace array may use */ 3268 static struct tracer * 3269 get_tracer_for_array(struct trace_array *tr, struct tracer *t) 3270 { 3271 while (t && !trace_ok_for_array(t, tr)) 3272 t = t->next; 3273 3274 return t; 3275 } 3276 3277 static void * 3278 t_next(struct seq_file *m, void *v, loff_t *pos) 3279 { 3280 struct trace_array *tr = m->private; 3281 struct tracer *t = v; 3282 3283 (*pos)++; 3284 3285 if (t) 3286 t = get_tracer_for_array(tr, t->next); 3287 3288 return t; 3289 } 3290 3291 static void *t_start(struct seq_file *m, loff_t *pos) 3292 { 3293 struct trace_array *tr = m->private; 3294 struct tracer *t; 3295 loff_t l = 0; 3296 3297 mutex_lock(&trace_types_lock); 3298 3299 t = get_tracer_for_array(tr, trace_types); 3300 for (; t && l < *pos; t = t_next(m, t, &l)) 3301 ; 3302 3303 return t; 3304 } 3305 3306 static void t_stop(struct seq_file *m, void *p) 3307 { 3308 mutex_unlock(&trace_types_lock); 3309 } 3310 3311 static int t_show(struct seq_file *m, void *v) 3312 { 3313 struct tracer *t = v; 3314 3315 if (!t) 3316 return 0; 3317 3318 seq_puts(m, t->name); 3319 if (t->next) 3320 seq_putc(m, ' '); 3321 else 3322 seq_putc(m, '\n'); 3323 3324 return 0; 3325 } 3326 3327 static const struct seq_operations show_traces_seq_ops = { 3328 .start = t_start, 3329 .next = t_next, 3330 .stop = t_stop, 3331 .show = t_show, 3332 }; 3333 3334 static int show_traces_open(struct inode *inode, struct file *file) 3335 { 3336 struct trace_array *tr = inode->i_private; 3337 struct seq_file *m; 3338 int ret; 3339 3340 if (tracing_disabled) 3341 return -ENODEV; 3342 3343 ret = seq_open(file, &show_traces_seq_ops); 3344 if (ret) 3345 return ret; 3346 3347 m = file->private_data; 3348 m->private = tr; 3349 3350 return 0; 3351 } 3352 3353 static ssize_t 3354 tracing_write_stub(struct file *filp, const char __user *ubuf, 3355 size_t count, loff_t *ppos) 3356 { 3357 return count; 3358 } 3359 3360 loff_t tracing_lseek(struct file *file, loff_t offset, int whence) 3361 { 3362 int ret; 3363 3364 if (file->f_mode & FMODE_READ) 3365 ret = seq_lseek(file, offset, whence); 3366 else 3367 file->f_pos = ret = 0; 3368 3369 return ret; 3370 } 3371 3372 static const struct file_operations tracing_fops = { 3373 .open = tracing_open, 3374 .read = seq_read, 3375 .write = tracing_write_stub, 3376 .llseek = tracing_lseek, 3377 .release = tracing_release, 3378 }; 3379 3380 static const struct file_operations show_traces_fops = { 3381 .open = show_traces_open, 3382 .read = seq_read, 3383 .release = seq_release, 3384 .llseek = seq_lseek, 3385 }; 3386 3387 /* 3388 * The tracer itself will not take this lock, but still we want 3389 * to provide a consistent cpumask to user-space: 3390 */ 3391 static DEFINE_MUTEX(tracing_cpumask_update_lock); 3392 3393 /* 3394 * Temporary storage for the character representation of the 3395 * CPU bitmask (and one more byte for the newline): 3396 */ 3397 static char mask_str[NR_CPUS + 1]; 3398 3399 static ssize_t 3400 tracing_cpumask_read(struct file *filp, char __user *ubuf, 3401 size_t count, loff_t *ppos) 3402 { 3403 struct trace_array *tr = file_inode(filp)->i_private; 3404 int len; 3405 3406 mutex_lock(&tracing_cpumask_update_lock); 3407 3408 len = snprintf(mask_str, count, "%*pb\n", 3409 cpumask_pr_args(tr->tracing_cpumask)); 3410 if (len >= count) { 3411 count = -EINVAL; 3412 goto out_err; 3413 } 3414 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1); 3415 3416 out_err: 3417 mutex_unlock(&tracing_cpumask_update_lock); 3418 3419 return count; 3420 } 3421 3422 static ssize_t 3423 tracing_cpumask_write(struct file *filp, const char __user *ubuf, 3424 size_t count, loff_t *ppos) 3425 { 3426 struct trace_array *tr = file_inode(filp)->i_private; 3427 cpumask_var_t tracing_cpumask_new; 3428 int err, cpu; 3429 3430 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL)) 3431 return -ENOMEM; 3432 3433 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new); 3434 if (err) 3435 goto err_unlock; 3436 3437 mutex_lock(&tracing_cpumask_update_lock); 3438 3439 local_irq_disable(); 3440 arch_spin_lock(&tr->max_lock); 3441 for_each_tracing_cpu(cpu) { 3442 /* 3443 * Increase/decrease the disabled counter if we are 3444 * about to flip a bit in the cpumask: 3445 */ 3446 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && 3447 !cpumask_test_cpu(cpu, tracing_cpumask_new)) { 3448 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); 3449 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu); 3450 } 3451 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && 3452 cpumask_test_cpu(cpu, tracing_cpumask_new)) { 3453 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); 3454 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu); 3455 } 3456 } 3457 arch_spin_unlock(&tr->max_lock); 3458 local_irq_enable(); 3459 3460 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); 3461 3462 mutex_unlock(&tracing_cpumask_update_lock); 3463 free_cpumask_var(tracing_cpumask_new); 3464 3465 return count; 3466 3467 err_unlock: 3468 free_cpumask_var(tracing_cpumask_new); 3469 3470 return err; 3471 } 3472 3473 static const struct file_operations tracing_cpumask_fops = { 3474 .open = tracing_open_generic_tr, 3475 .read = tracing_cpumask_read, 3476 .write = tracing_cpumask_write, 3477 .release = tracing_release_generic_tr, 3478 .llseek = generic_file_llseek, 3479 }; 3480 3481 static int tracing_trace_options_show(struct seq_file *m, void *v) 3482 { 3483 struct tracer_opt *trace_opts; 3484 struct trace_array *tr = m->private; 3485 u32 tracer_flags; 3486 int i; 3487 3488 mutex_lock(&trace_types_lock); 3489 tracer_flags = tr->current_trace->flags->val; 3490 trace_opts = tr->current_trace->flags->opts; 3491 3492 for (i = 0; trace_options[i]; i++) { 3493 if (tr->trace_flags & (1 << i)) 3494 seq_printf(m, "%s\n", trace_options[i]); 3495 else 3496 seq_printf(m, "no%s\n", trace_options[i]); 3497 } 3498 3499 for (i = 0; trace_opts[i].name; i++) { 3500 if (tracer_flags & trace_opts[i].bit) 3501 seq_printf(m, "%s\n", trace_opts[i].name); 3502 else 3503 seq_printf(m, "no%s\n", trace_opts[i].name); 3504 } 3505 mutex_unlock(&trace_types_lock); 3506 3507 return 0; 3508 } 3509 3510 static int __set_tracer_option(struct trace_array *tr, 3511 struct tracer_flags *tracer_flags, 3512 struct tracer_opt *opts, int neg) 3513 { 3514 struct tracer *trace = tr->current_trace; 3515 int ret; 3516 3517 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); 3518 if (ret) 3519 return ret; 3520 3521 if (neg) 3522 tracer_flags->val &= ~opts->bit; 3523 else 3524 tracer_flags->val |= opts->bit; 3525 return 0; 3526 } 3527 3528 /* Try to assign a tracer specific option */ 3529 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) 3530 { 3531 struct tracer *trace = tr->current_trace; 3532 struct tracer_flags *tracer_flags = trace->flags; 3533 struct tracer_opt *opts = NULL; 3534 int i; 3535 3536 for (i = 0; tracer_flags->opts[i].name; i++) { 3537 opts = &tracer_flags->opts[i]; 3538 3539 if (strcmp(cmp, opts->name) == 0) 3540 return __set_tracer_option(tr, trace->flags, opts, neg); 3541 } 3542 3543 return -EINVAL; 3544 } 3545 3546 /* Some tracers require overwrite to stay enabled */ 3547 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) 3548 { 3549 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set) 3550 return -1; 3551 3552 return 0; 3553 } 3554 3555 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) 3556 { 3557 /* do nothing if flag is already set */ 3558 if (!!(tr->trace_flags & mask) == !!enabled) 3559 return 0; 3560 3561 /* Give the tracer a chance to approve the change */ 3562 if (tr->current_trace->flag_changed) 3563 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) 3564 return -EINVAL; 3565 3566 if (enabled) 3567 tr->trace_flags |= mask; 3568 else 3569 tr->trace_flags &= ~mask; 3570 3571 if (mask == TRACE_ITER_RECORD_CMD) 3572 trace_event_enable_cmd_record(enabled); 3573 3574 if (mask == TRACE_ITER_OVERWRITE) { 3575 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled); 3576 #ifdef CONFIG_TRACER_MAX_TRACE 3577 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); 3578 #endif 3579 } 3580 3581 if (mask == TRACE_ITER_PRINTK) { 3582 trace_printk_start_stop_comm(enabled); 3583 trace_printk_control(enabled); 3584 } 3585 3586 return 0; 3587 } 3588 3589 static int trace_set_options(struct trace_array *tr, char *option) 3590 { 3591 char *cmp; 3592 int neg = 0; 3593 int ret = -ENODEV; 3594 int i; 3595 size_t orig_len = strlen(option); 3596 3597 cmp = strstrip(option); 3598 3599 if (strncmp(cmp, "no", 2) == 0) { 3600 neg = 1; 3601 cmp += 2; 3602 } 3603 3604 mutex_lock(&trace_types_lock); 3605 3606 for (i = 0; trace_options[i]; i++) { 3607 if (strcmp(cmp, trace_options[i]) == 0) { 3608 ret = set_tracer_flag(tr, 1 << i, !neg); 3609 break; 3610 } 3611 } 3612 3613 /* If no option could be set, test the specific tracer options */ 3614 if (!trace_options[i]) 3615 ret = set_tracer_option(tr, cmp, neg); 3616 3617 mutex_unlock(&trace_types_lock); 3618 3619 /* 3620 * If the first trailing whitespace is replaced with '\0' by strstrip, 3621 * turn it back into a space. 3622 */ 3623 if (orig_len > strlen(option)) 3624 option[strlen(option)] = ' '; 3625 3626 return ret; 3627 } 3628 3629 static void __init apply_trace_boot_options(void) 3630 { 3631 char *buf = trace_boot_options_buf; 3632 char *option; 3633 3634 while (true) { 3635 option = strsep(&buf, ","); 3636 3637 if (!option) 3638 break; 3639 3640 if (*option) 3641 trace_set_options(&global_trace, option); 3642 3643 /* Put back the comma to allow this to be called again */ 3644 if (buf) 3645 *(buf - 1) = ','; 3646 } 3647 } 3648 3649 static ssize_t 3650 tracing_trace_options_write(struct file *filp, const char __user *ubuf, 3651 size_t cnt, loff_t *ppos) 3652 { 3653 struct seq_file *m = filp->private_data; 3654 struct trace_array *tr = m->private; 3655 char buf[64]; 3656 int ret; 3657 3658 if (cnt >= sizeof(buf)) 3659 return -EINVAL; 3660 3661 if (copy_from_user(&buf, ubuf, cnt)) 3662 return -EFAULT; 3663 3664 buf[cnt] = 0; 3665 3666 ret = trace_set_options(tr, buf); 3667 if (ret < 0) 3668 return ret; 3669 3670 *ppos += cnt; 3671 3672 return cnt; 3673 } 3674 3675 static int tracing_trace_options_open(struct inode *inode, struct file *file) 3676 { 3677 struct trace_array *tr = inode->i_private; 3678 int ret; 3679 3680 if (tracing_disabled) 3681 return -ENODEV; 3682 3683 if (trace_array_get(tr) < 0) 3684 return -ENODEV; 3685 3686 ret = single_open(file, tracing_trace_options_show, inode->i_private); 3687 if (ret < 0) 3688 trace_array_put(tr); 3689 3690 return ret; 3691 } 3692 3693 static const struct file_operations tracing_iter_fops = { 3694 .open = tracing_trace_options_open, 3695 .read = seq_read, 3696 .llseek = seq_lseek, 3697 .release = tracing_single_release_tr, 3698 .write = tracing_trace_options_write, 3699 }; 3700 3701 static const char readme_msg[] = 3702 "tracing mini-HOWTO:\n\n" 3703 "# echo 0 > tracing_on : quick way to disable tracing\n" 3704 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n" 3705 " Important files:\n" 3706 " trace\t\t\t- The static contents of the buffer\n" 3707 "\t\t\t To clear the buffer write into this file: echo > trace\n" 3708 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n" 3709 " current_tracer\t- function and latency tracers\n" 3710 " available_tracers\t- list of configured tracers for current_tracer\n" 3711 " buffer_size_kb\t- view and modify size of per cpu buffer\n" 3712 " buffer_total_size_kb - view total size of all cpu buffers\n\n" 3713 " trace_clock\t\t-change the clock used to order events\n" 3714 " local: Per cpu clock but may not be synced across CPUs\n" 3715 " global: Synced across CPUs but slows tracing down.\n" 3716 " counter: Not a clock, but just an increment\n" 3717 " uptime: Jiffy counter from time of boot\n" 3718 " perf: Same clock that perf events use\n" 3719 #ifdef CONFIG_X86_64 3720 " x86-tsc: TSC cycle counter\n" 3721 #endif 3722 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n" 3723 " tracing_cpumask\t- Limit which CPUs to trace\n" 3724 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n" 3725 "\t\t\t Remove sub-buffer with rmdir\n" 3726 " trace_options\t\t- Set format or modify how tracing happens\n" 3727 "\t\t\t Disable an option by adding a suffix 'no' to the\n" 3728 "\t\t\t option name\n" 3729 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n" 3730 #ifdef CONFIG_DYNAMIC_FTRACE 3731 "\n available_filter_functions - list of functions that can be filtered on\n" 3732 " set_ftrace_filter\t- echo function name in here to only trace these\n" 3733 "\t\t\t functions\n" 3734 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" 3735 "\t modules: Can select a group via module\n" 3736 "\t Format: :mod:<module-name>\n" 3737 "\t example: echo :mod:ext3 > set_ftrace_filter\n" 3738 "\t triggers: a command to perform when function is hit\n" 3739 "\t Format: <function>:<trigger>[:count]\n" 3740 "\t trigger: traceon, traceoff\n" 3741 "\t\t enable_event:<system>:<event>\n" 3742 "\t\t disable_event:<system>:<event>\n" 3743 #ifdef CONFIG_STACKTRACE 3744 "\t\t stacktrace\n" 3745 #endif 3746 #ifdef CONFIG_TRACER_SNAPSHOT 3747 "\t\t snapshot\n" 3748 #endif 3749 "\t\t dump\n" 3750 "\t\t cpudump\n" 3751 "\t example: echo do_fault:traceoff > set_ftrace_filter\n" 3752 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n" 3753 "\t The first one will disable tracing every time do_fault is hit\n" 3754 "\t The second will disable tracing at most 3 times when do_trap is hit\n" 3755 "\t The first time do trap is hit and it disables tracing, the\n" 3756 "\t counter will decrement to 2. If tracing is already disabled,\n" 3757 "\t the counter will not decrement. It only decrements when the\n" 3758 "\t trigger did work\n" 3759 "\t To remove trigger without count:\n" 3760 "\t echo '!<function>:<trigger> > set_ftrace_filter\n" 3761 "\t To remove trigger with a count:\n" 3762 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n" 3763 " set_ftrace_notrace\t- echo function name in here to never trace.\n" 3764 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" 3765 "\t modules: Can select a group via module command :mod:\n" 3766 "\t Does not accept triggers\n" 3767 #endif /* CONFIG_DYNAMIC_FTRACE */ 3768 #ifdef CONFIG_FUNCTION_TRACER 3769 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n" 3770 "\t\t (function)\n" 3771 #endif 3772 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3773 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n" 3774 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n" 3775 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n" 3776 #endif 3777 #ifdef CONFIG_TRACER_SNAPSHOT 3778 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n" 3779 "\t\t\t snapshot buffer. Read the contents for more\n" 3780 "\t\t\t information\n" 3781 #endif 3782 #ifdef CONFIG_STACK_TRACER 3783 " stack_trace\t\t- Shows the max stack trace when active\n" 3784 " stack_max_size\t- Shows current max stack size that was traced\n" 3785 "\t\t\t Write into this file to reset the max size (trigger a\n" 3786 "\t\t\t new trace)\n" 3787 #ifdef CONFIG_DYNAMIC_FTRACE 3788 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n" 3789 "\t\t\t traces\n" 3790 #endif 3791 #endif /* CONFIG_STACK_TRACER */ 3792 " events/\t\t- Directory containing all trace event subsystems:\n" 3793 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n" 3794 " events/<system>/\t- Directory containing all trace events for <system>:\n" 3795 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n" 3796 "\t\t\t events\n" 3797 " filter\t\t- If set, only events passing filter are traced\n" 3798 " events/<system>/<event>/\t- Directory containing control files for\n" 3799 "\t\t\t <event>:\n" 3800 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n" 3801 " filter\t\t- If set, only events passing filter are traced\n" 3802 " trigger\t\t- If set, a command to perform when event is hit\n" 3803 "\t Format: <trigger>[:count][if <filter>]\n" 3804 "\t trigger: traceon, traceoff\n" 3805 "\t enable_event:<system>:<event>\n" 3806 "\t disable_event:<system>:<event>\n" 3807 #ifdef CONFIG_STACKTRACE 3808 "\t\t stacktrace\n" 3809 #endif 3810 #ifdef CONFIG_TRACER_SNAPSHOT 3811 "\t\t snapshot\n" 3812 #endif 3813 "\t example: echo traceoff > events/block/block_unplug/trigger\n" 3814 "\t echo traceoff:3 > events/block/block_unplug/trigger\n" 3815 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n" 3816 "\t events/block/block_unplug/trigger\n" 3817 "\t The first disables tracing every time block_unplug is hit.\n" 3818 "\t The second disables tracing the first 3 times block_unplug is hit.\n" 3819 "\t The third enables the kmalloc event the first 3 times block_unplug\n" 3820 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n" 3821 "\t Like function triggers, the counter is only decremented if it\n" 3822 "\t enabled or disabled tracing.\n" 3823 "\t To remove a trigger without a count:\n" 3824 "\t echo '!<trigger> > <system>/<event>/trigger\n" 3825 "\t To remove a trigger with a count:\n" 3826 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n" 3827 "\t Filters can be ignored when removing a trigger.\n" 3828 ; 3829 3830 static ssize_t 3831 tracing_readme_read(struct file *filp, char __user *ubuf, 3832 size_t cnt, loff_t *ppos) 3833 { 3834 return simple_read_from_buffer(ubuf, cnt, ppos, 3835 readme_msg, strlen(readme_msg)); 3836 } 3837 3838 static const struct file_operations tracing_readme_fops = { 3839 .open = tracing_open_generic, 3840 .read = tracing_readme_read, 3841 .llseek = generic_file_llseek, 3842 }; 3843 3844 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos) 3845 { 3846 unsigned int *ptr = v; 3847 3848 if (*pos || m->count) 3849 ptr++; 3850 3851 (*pos)++; 3852 3853 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num]; 3854 ptr++) { 3855 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP) 3856 continue; 3857 3858 return ptr; 3859 } 3860 3861 return NULL; 3862 } 3863 3864 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos) 3865 { 3866 void *v; 3867 loff_t l = 0; 3868 3869 preempt_disable(); 3870 arch_spin_lock(&trace_cmdline_lock); 3871 3872 v = &savedcmd->map_cmdline_to_pid[0]; 3873 while (l <= *pos) { 3874 v = saved_cmdlines_next(m, v, &l); 3875 if (!v) 3876 return NULL; 3877 } 3878 3879 return v; 3880 } 3881 3882 static void saved_cmdlines_stop(struct seq_file *m, void *v) 3883 { 3884 arch_spin_unlock(&trace_cmdline_lock); 3885 preempt_enable(); 3886 } 3887 3888 static int saved_cmdlines_show(struct seq_file *m, void *v) 3889 { 3890 char buf[TASK_COMM_LEN]; 3891 unsigned int *pid = v; 3892 3893 __trace_find_cmdline(*pid, buf); 3894 seq_printf(m, "%d %s\n", *pid, buf); 3895 return 0; 3896 } 3897 3898 static const struct seq_operations tracing_saved_cmdlines_seq_ops = { 3899 .start = saved_cmdlines_start, 3900 .next = saved_cmdlines_next, 3901 .stop = saved_cmdlines_stop, 3902 .show = saved_cmdlines_show, 3903 }; 3904 3905 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp) 3906 { 3907 if (tracing_disabled) 3908 return -ENODEV; 3909 3910 return seq_open(filp, &tracing_saved_cmdlines_seq_ops); 3911 } 3912 3913 static const struct file_operations tracing_saved_cmdlines_fops = { 3914 .open = tracing_saved_cmdlines_open, 3915 .read = seq_read, 3916 .llseek = seq_lseek, 3917 .release = seq_release, 3918 }; 3919 3920 static ssize_t 3921 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf, 3922 size_t cnt, loff_t *ppos) 3923 { 3924 char buf[64]; 3925 int r; 3926 3927 arch_spin_lock(&trace_cmdline_lock); 3928 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num); 3929 arch_spin_unlock(&trace_cmdline_lock); 3930 3931 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 3932 } 3933 3934 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s) 3935 { 3936 kfree(s->saved_cmdlines); 3937 kfree(s->map_cmdline_to_pid); 3938 kfree(s); 3939 } 3940 3941 static int tracing_resize_saved_cmdlines(unsigned int val) 3942 { 3943 struct saved_cmdlines_buffer *s, *savedcmd_temp; 3944 3945 s = kmalloc(sizeof(*s), GFP_KERNEL); 3946 if (!s) 3947 return -ENOMEM; 3948 3949 if (allocate_cmdlines_buffer(val, s) < 0) { 3950 kfree(s); 3951 return -ENOMEM; 3952 } 3953 3954 arch_spin_lock(&trace_cmdline_lock); 3955 savedcmd_temp = savedcmd; 3956 savedcmd = s; 3957 arch_spin_unlock(&trace_cmdline_lock); 3958 free_saved_cmdlines_buffer(savedcmd_temp); 3959 3960 return 0; 3961 } 3962 3963 static ssize_t 3964 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf, 3965 size_t cnt, loff_t *ppos) 3966 { 3967 unsigned long val; 3968 int ret; 3969 3970 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 3971 if (ret) 3972 return ret; 3973 3974 /* must have at least 1 entry or less than PID_MAX_DEFAULT */ 3975 if (!val || val > PID_MAX_DEFAULT) 3976 return -EINVAL; 3977 3978 ret = tracing_resize_saved_cmdlines((unsigned int)val); 3979 if (ret < 0) 3980 return ret; 3981 3982 *ppos += cnt; 3983 3984 return cnt; 3985 } 3986 3987 static const struct file_operations tracing_saved_cmdlines_size_fops = { 3988 .open = tracing_open_generic, 3989 .read = tracing_saved_cmdlines_size_read, 3990 .write = tracing_saved_cmdlines_size_write, 3991 }; 3992 3993 #ifdef CONFIG_TRACE_ENUM_MAP_FILE 3994 static union trace_enum_map_item * 3995 update_enum_map(union trace_enum_map_item *ptr) 3996 { 3997 if (!ptr->map.enum_string) { 3998 if (ptr->tail.next) { 3999 ptr = ptr->tail.next; 4000 /* Set ptr to the next real item (skip head) */ 4001 ptr++; 4002 } else 4003 return NULL; 4004 } 4005 return ptr; 4006 } 4007 4008 static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos) 4009 { 4010 union trace_enum_map_item *ptr = v; 4011 4012 /* 4013 * Paranoid! If ptr points to end, we don't want to increment past it. 4014 * This really should never happen. 4015 */ 4016 ptr = update_enum_map(ptr); 4017 if (WARN_ON_ONCE(!ptr)) 4018 return NULL; 4019 4020 ptr++; 4021 4022 (*pos)++; 4023 4024 ptr = update_enum_map(ptr); 4025 4026 return ptr; 4027 } 4028 4029 static void *enum_map_start(struct seq_file *m, loff_t *pos) 4030 { 4031 union trace_enum_map_item *v; 4032 loff_t l = 0; 4033 4034 mutex_lock(&trace_enum_mutex); 4035 4036 v = trace_enum_maps; 4037 if (v) 4038 v++; 4039 4040 while (v && l < *pos) { 4041 v = enum_map_next(m, v, &l); 4042 } 4043 4044 return v; 4045 } 4046 4047 static void enum_map_stop(struct seq_file *m, void *v) 4048 { 4049 mutex_unlock(&trace_enum_mutex); 4050 } 4051 4052 static int enum_map_show(struct seq_file *m, void *v) 4053 { 4054 union trace_enum_map_item *ptr = v; 4055 4056 seq_printf(m, "%s %ld (%s)\n", 4057 ptr->map.enum_string, ptr->map.enum_value, 4058 ptr->map.system); 4059 4060 return 0; 4061 } 4062 4063 static const struct seq_operations tracing_enum_map_seq_ops = { 4064 .start = enum_map_start, 4065 .next = enum_map_next, 4066 .stop = enum_map_stop, 4067 .show = enum_map_show, 4068 }; 4069 4070 static int tracing_enum_map_open(struct inode *inode, struct file *filp) 4071 { 4072 if (tracing_disabled) 4073 return -ENODEV; 4074 4075 return seq_open(filp, &tracing_enum_map_seq_ops); 4076 } 4077 4078 static const struct file_operations tracing_enum_map_fops = { 4079 .open = tracing_enum_map_open, 4080 .read = seq_read, 4081 .llseek = seq_lseek, 4082 .release = seq_release, 4083 }; 4084 4085 static inline union trace_enum_map_item * 4086 trace_enum_jmp_to_tail(union trace_enum_map_item *ptr) 4087 { 4088 /* Return tail of array given the head */ 4089 return ptr + ptr->head.length + 1; 4090 } 4091 4092 static void 4093 trace_insert_enum_map_file(struct module *mod, struct trace_enum_map **start, 4094 int len) 4095 { 4096 struct trace_enum_map **stop; 4097 struct trace_enum_map **map; 4098 union trace_enum_map_item *map_array; 4099 union trace_enum_map_item *ptr; 4100 4101 stop = start + len; 4102 4103 /* 4104 * The trace_enum_maps contains the map plus a head and tail item, 4105 * where the head holds the module and length of array, and the 4106 * tail holds a pointer to the next list. 4107 */ 4108 map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL); 4109 if (!map_array) { 4110 pr_warning("Unable to allocate trace enum mapping\n"); 4111 return; 4112 } 4113 4114 mutex_lock(&trace_enum_mutex); 4115 4116 if (!trace_enum_maps) 4117 trace_enum_maps = map_array; 4118 else { 4119 ptr = trace_enum_maps; 4120 for (;;) { 4121 ptr = trace_enum_jmp_to_tail(ptr); 4122 if (!ptr->tail.next) 4123 break; 4124 ptr = ptr->tail.next; 4125 4126 } 4127 ptr->tail.next = map_array; 4128 } 4129 map_array->head.mod = mod; 4130 map_array->head.length = len; 4131 map_array++; 4132 4133 for (map = start; (unsigned long)map < (unsigned long)stop; map++) { 4134 map_array->map = **map; 4135 map_array++; 4136 } 4137 memset(map_array, 0, sizeof(*map_array)); 4138 4139 mutex_unlock(&trace_enum_mutex); 4140 } 4141 4142 static void trace_create_enum_file(struct dentry *d_tracer) 4143 { 4144 trace_create_file("enum_map", 0444, d_tracer, 4145 NULL, &tracing_enum_map_fops); 4146 } 4147 4148 #else /* CONFIG_TRACE_ENUM_MAP_FILE */ 4149 static inline void trace_create_enum_file(struct dentry *d_tracer) { } 4150 static inline void trace_insert_enum_map_file(struct module *mod, 4151 struct trace_enum_map **start, int len) { } 4152 #endif /* !CONFIG_TRACE_ENUM_MAP_FILE */ 4153 4154 static void trace_insert_enum_map(struct module *mod, 4155 struct trace_enum_map **start, int len) 4156 { 4157 struct trace_enum_map **map; 4158 4159 if (len <= 0) 4160 return; 4161 4162 map = start; 4163 4164 trace_event_enum_update(map, len); 4165 4166 trace_insert_enum_map_file(mod, start, len); 4167 } 4168 4169 static ssize_t 4170 tracing_set_trace_read(struct file *filp, char __user *ubuf, 4171 size_t cnt, loff_t *ppos) 4172 { 4173 struct trace_array *tr = filp->private_data; 4174 char buf[MAX_TRACER_SIZE+2]; 4175 int r; 4176 4177 mutex_lock(&trace_types_lock); 4178 r = sprintf(buf, "%s\n", tr->current_trace->name); 4179 mutex_unlock(&trace_types_lock); 4180 4181 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 4182 } 4183 4184 int tracer_init(struct tracer *t, struct trace_array *tr) 4185 { 4186 tracing_reset_online_cpus(&tr->trace_buffer); 4187 return t->init(tr); 4188 } 4189 4190 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val) 4191 { 4192 int cpu; 4193 4194 for_each_tracing_cpu(cpu) 4195 per_cpu_ptr(buf->data, cpu)->entries = val; 4196 } 4197 4198 #ifdef CONFIG_TRACER_MAX_TRACE 4199 /* resize @tr's buffer to the size of @size_tr's entries */ 4200 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf, 4201 struct trace_buffer *size_buf, int cpu_id) 4202 { 4203 int cpu, ret = 0; 4204 4205 if (cpu_id == RING_BUFFER_ALL_CPUS) { 4206 for_each_tracing_cpu(cpu) { 4207 ret = ring_buffer_resize(trace_buf->buffer, 4208 per_cpu_ptr(size_buf->data, cpu)->entries, cpu); 4209 if (ret < 0) 4210 break; 4211 per_cpu_ptr(trace_buf->data, cpu)->entries = 4212 per_cpu_ptr(size_buf->data, cpu)->entries; 4213 } 4214 } else { 4215 ret = ring_buffer_resize(trace_buf->buffer, 4216 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id); 4217 if (ret == 0) 4218 per_cpu_ptr(trace_buf->data, cpu_id)->entries = 4219 per_cpu_ptr(size_buf->data, cpu_id)->entries; 4220 } 4221 4222 return ret; 4223 } 4224 #endif /* CONFIG_TRACER_MAX_TRACE */ 4225 4226 static int __tracing_resize_ring_buffer(struct trace_array *tr, 4227 unsigned long size, int cpu) 4228 { 4229 int ret; 4230 4231 /* 4232 * If kernel or user changes the size of the ring buffer 4233 * we use the size that was given, and we can forget about 4234 * expanding it later. 4235 */ 4236 ring_buffer_expanded = true; 4237 4238 /* May be called before buffers are initialized */ 4239 if (!tr->trace_buffer.buffer) 4240 return 0; 4241 4242 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu); 4243 if (ret < 0) 4244 return ret; 4245 4246 #ifdef CONFIG_TRACER_MAX_TRACE 4247 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) || 4248 !tr->current_trace->use_max_tr) 4249 goto out; 4250 4251 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); 4252 if (ret < 0) { 4253 int r = resize_buffer_duplicate_size(&tr->trace_buffer, 4254 &tr->trace_buffer, cpu); 4255 if (r < 0) { 4256 /* 4257 * AARGH! We are left with different 4258 * size max buffer!!!! 4259 * The max buffer is our "snapshot" buffer. 4260 * When a tracer needs a snapshot (one of the 4261 * latency tracers), it swaps the max buffer 4262 * with the saved snap shot. We succeeded to 4263 * update the size of the main buffer, but failed to 4264 * update the size of the max buffer. But when we tried 4265 * to reset the main buffer to the original size, we 4266 * failed there too. This is very unlikely to 4267 * happen, but if it does, warn and kill all 4268 * tracing. 4269 */ 4270 WARN_ON(1); 4271 tracing_disabled = 1; 4272 } 4273 return ret; 4274 } 4275 4276 if (cpu == RING_BUFFER_ALL_CPUS) 4277 set_buffer_entries(&tr->max_buffer, size); 4278 else 4279 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size; 4280 4281 out: 4282 #endif /* CONFIG_TRACER_MAX_TRACE */ 4283 4284 if (cpu == RING_BUFFER_ALL_CPUS) 4285 set_buffer_entries(&tr->trace_buffer, size); 4286 else 4287 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size; 4288 4289 return ret; 4290 } 4291 4292 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr, 4293 unsigned long size, int cpu_id) 4294 { 4295 int ret = size; 4296 4297 mutex_lock(&trace_types_lock); 4298 4299 if (cpu_id != RING_BUFFER_ALL_CPUS) { 4300 /* make sure, this cpu is enabled in the mask */ 4301 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) { 4302 ret = -EINVAL; 4303 goto out; 4304 } 4305 } 4306 4307 ret = __tracing_resize_ring_buffer(tr, size, cpu_id); 4308 if (ret < 0) 4309 ret = -ENOMEM; 4310 4311 out: 4312 mutex_unlock(&trace_types_lock); 4313 4314 return ret; 4315 } 4316 4317 4318 /** 4319 * tracing_update_buffers - used by tracing facility to expand ring buffers 4320 * 4321 * To save on memory when the tracing is never used on a system with it 4322 * configured in. The ring buffers are set to a minimum size. But once 4323 * a user starts to use the tracing facility, then they need to grow 4324 * to their default size. 4325 * 4326 * This function is to be called when a tracer is about to be used. 4327 */ 4328 int tracing_update_buffers(void) 4329 { 4330 int ret = 0; 4331 4332 mutex_lock(&trace_types_lock); 4333 if (!ring_buffer_expanded) 4334 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size, 4335 RING_BUFFER_ALL_CPUS); 4336 mutex_unlock(&trace_types_lock); 4337 4338 return ret; 4339 } 4340 4341 struct trace_option_dentry; 4342 4343 static void 4344 create_trace_option_files(struct trace_array *tr, struct tracer *tracer); 4345 4346 /* 4347 * Used to clear out the tracer before deletion of an instance. 4348 * Must have trace_types_lock held. 4349 */ 4350 static void tracing_set_nop(struct trace_array *tr) 4351 { 4352 if (tr->current_trace == &nop_trace) 4353 return; 4354 4355 tr->current_trace->enabled--; 4356 4357 if (tr->current_trace->reset) 4358 tr->current_trace->reset(tr); 4359 4360 tr->current_trace = &nop_trace; 4361 } 4362 4363 static void add_tracer_options(struct trace_array *tr, struct tracer *t) 4364 { 4365 /* Only enable if the directory has been created already. */ 4366 if (!tr->dir) 4367 return; 4368 4369 create_trace_option_files(tr, t); 4370 } 4371 4372 static int tracing_set_tracer(struct trace_array *tr, const char *buf) 4373 { 4374 struct tracer *t; 4375 #ifdef CONFIG_TRACER_MAX_TRACE 4376 bool had_max_tr; 4377 #endif 4378 int ret = 0; 4379 4380 mutex_lock(&trace_types_lock); 4381 4382 if (!ring_buffer_expanded) { 4383 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, 4384 RING_BUFFER_ALL_CPUS); 4385 if (ret < 0) 4386 goto out; 4387 ret = 0; 4388 } 4389 4390 for (t = trace_types; t; t = t->next) { 4391 if (strcmp(t->name, buf) == 0) 4392 break; 4393 } 4394 if (!t) { 4395 ret = -EINVAL; 4396 goto out; 4397 } 4398 if (t == tr->current_trace) 4399 goto out; 4400 4401 /* Some tracers are only allowed for the top level buffer */ 4402 if (!trace_ok_for_array(t, tr)) { 4403 ret = -EINVAL; 4404 goto out; 4405 } 4406 4407 /* If trace pipe files are being read, we can't change the tracer */ 4408 if (tr->current_trace->ref) { 4409 ret = -EBUSY; 4410 goto out; 4411 } 4412 4413 trace_branch_disable(); 4414 4415 tr->current_trace->enabled--; 4416 4417 if (tr->current_trace->reset) 4418 tr->current_trace->reset(tr); 4419 4420 /* Current trace needs to be nop_trace before synchronize_sched */ 4421 tr->current_trace = &nop_trace; 4422 4423 #ifdef CONFIG_TRACER_MAX_TRACE 4424 had_max_tr = tr->allocated_snapshot; 4425 4426 if (had_max_tr && !t->use_max_tr) { 4427 /* 4428 * We need to make sure that the update_max_tr sees that 4429 * current_trace changed to nop_trace to keep it from 4430 * swapping the buffers after we resize it. 4431 * The update_max_tr is called from interrupts disabled 4432 * so a synchronized_sched() is sufficient. 4433 */ 4434 synchronize_sched(); 4435 free_snapshot(tr); 4436 } 4437 #endif 4438 4439 #ifdef CONFIG_TRACER_MAX_TRACE 4440 if (t->use_max_tr && !had_max_tr) { 4441 ret = alloc_snapshot(tr); 4442 if (ret < 0) 4443 goto out; 4444 } 4445 #endif 4446 4447 if (t->init) { 4448 ret = tracer_init(t, tr); 4449 if (ret) 4450 goto out; 4451 } 4452 4453 tr->current_trace = t; 4454 tr->current_trace->enabled++; 4455 trace_branch_enable(tr); 4456 out: 4457 mutex_unlock(&trace_types_lock); 4458 4459 return ret; 4460 } 4461 4462 static ssize_t 4463 tracing_set_trace_write(struct file *filp, const char __user *ubuf, 4464 size_t cnt, loff_t *ppos) 4465 { 4466 struct trace_array *tr = filp->private_data; 4467 char buf[MAX_TRACER_SIZE+1]; 4468 int i; 4469 size_t ret; 4470 int err; 4471 4472 ret = cnt; 4473 4474 if (cnt > MAX_TRACER_SIZE) 4475 cnt = MAX_TRACER_SIZE; 4476 4477 if (copy_from_user(&buf, ubuf, cnt)) 4478 return -EFAULT; 4479 4480 buf[cnt] = 0; 4481 4482 /* strip ending whitespace. */ 4483 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--) 4484 buf[i] = 0; 4485 4486 err = tracing_set_tracer(tr, buf); 4487 if (err) 4488 return err; 4489 4490 *ppos += ret; 4491 4492 return ret; 4493 } 4494 4495 static ssize_t 4496 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf, 4497 size_t cnt, loff_t *ppos) 4498 { 4499 char buf[64]; 4500 int r; 4501 4502 r = snprintf(buf, sizeof(buf), "%ld\n", 4503 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr)); 4504 if (r > sizeof(buf)) 4505 r = sizeof(buf); 4506 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 4507 } 4508 4509 static ssize_t 4510 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf, 4511 size_t cnt, loff_t *ppos) 4512 { 4513 unsigned long val; 4514 int ret; 4515 4516 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 4517 if (ret) 4518 return ret; 4519 4520 *ptr = val * 1000; 4521 4522 return cnt; 4523 } 4524 4525 static ssize_t 4526 tracing_thresh_read(struct file *filp, char __user *ubuf, 4527 size_t cnt, loff_t *ppos) 4528 { 4529 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos); 4530 } 4531 4532 static ssize_t 4533 tracing_thresh_write(struct file *filp, const char __user *ubuf, 4534 size_t cnt, loff_t *ppos) 4535 { 4536 struct trace_array *tr = filp->private_data; 4537 int ret; 4538 4539 mutex_lock(&trace_types_lock); 4540 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos); 4541 if (ret < 0) 4542 goto out; 4543 4544 if (tr->current_trace->update_thresh) { 4545 ret = tr->current_trace->update_thresh(tr); 4546 if (ret < 0) 4547 goto out; 4548 } 4549 4550 ret = cnt; 4551 out: 4552 mutex_unlock(&trace_types_lock); 4553 4554 return ret; 4555 } 4556 4557 static ssize_t 4558 tracing_max_lat_read(struct file *filp, char __user *ubuf, 4559 size_t cnt, loff_t *ppos) 4560 { 4561 return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos); 4562 } 4563 4564 static ssize_t 4565 tracing_max_lat_write(struct file *filp, const char __user *ubuf, 4566 size_t cnt, loff_t *ppos) 4567 { 4568 return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos); 4569 } 4570 4571 static int tracing_open_pipe(struct inode *inode, struct file *filp) 4572 { 4573 struct trace_array *tr = inode->i_private; 4574 struct trace_iterator *iter; 4575 int ret = 0; 4576 4577 if (tracing_disabled) 4578 return -ENODEV; 4579 4580 if (trace_array_get(tr) < 0) 4581 return -ENODEV; 4582 4583 mutex_lock(&trace_types_lock); 4584 4585 /* create a buffer to store the information to pass to userspace */ 4586 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 4587 if (!iter) { 4588 ret = -ENOMEM; 4589 __trace_array_put(tr); 4590 goto out; 4591 } 4592 4593 trace_seq_init(&iter->seq); 4594 iter->trace = tr->current_trace; 4595 4596 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) { 4597 ret = -ENOMEM; 4598 goto fail; 4599 } 4600 4601 /* trace pipe does not show start of buffer */ 4602 cpumask_setall(iter->started); 4603 4604 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) 4605 iter->iter_flags |= TRACE_FILE_LAT_FMT; 4606 4607 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 4608 if (trace_clocks[tr->clock_id].in_ns) 4609 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 4610 4611 iter->tr = tr; 4612 iter->trace_buffer = &tr->trace_buffer; 4613 iter->cpu_file = tracing_get_cpu(inode); 4614 mutex_init(&iter->mutex); 4615 filp->private_data = iter; 4616 4617 if (iter->trace->pipe_open) 4618 iter->trace->pipe_open(iter); 4619 4620 nonseekable_open(inode, filp); 4621 4622 tr->current_trace->ref++; 4623 out: 4624 mutex_unlock(&trace_types_lock); 4625 return ret; 4626 4627 fail: 4628 kfree(iter->trace); 4629 kfree(iter); 4630 __trace_array_put(tr); 4631 mutex_unlock(&trace_types_lock); 4632 return ret; 4633 } 4634 4635 static int tracing_release_pipe(struct inode *inode, struct file *file) 4636 { 4637 struct trace_iterator *iter = file->private_data; 4638 struct trace_array *tr = inode->i_private; 4639 4640 mutex_lock(&trace_types_lock); 4641 4642 tr->current_trace->ref--; 4643 4644 if (iter->trace->pipe_close) 4645 iter->trace->pipe_close(iter); 4646 4647 mutex_unlock(&trace_types_lock); 4648 4649 free_cpumask_var(iter->started); 4650 mutex_destroy(&iter->mutex); 4651 kfree(iter); 4652 4653 trace_array_put(tr); 4654 4655 return 0; 4656 } 4657 4658 static unsigned int 4659 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table) 4660 { 4661 struct trace_array *tr = iter->tr; 4662 4663 /* Iterators are static, they should be filled or empty */ 4664 if (trace_buffer_iter(iter, iter->cpu_file)) 4665 return POLLIN | POLLRDNORM; 4666 4667 if (tr->trace_flags & TRACE_ITER_BLOCK) 4668 /* 4669 * Always select as readable when in blocking mode 4670 */ 4671 return POLLIN | POLLRDNORM; 4672 else 4673 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file, 4674 filp, poll_table); 4675 } 4676 4677 static unsigned int 4678 tracing_poll_pipe(struct file *filp, poll_table *poll_table) 4679 { 4680 struct trace_iterator *iter = filp->private_data; 4681 4682 return trace_poll(iter, filp, poll_table); 4683 } 4684 4685 /* Must be called with iter->mutex held. */ 4686 static int tracing_wait_pipe(struct file *filp) 4687 { 4688 struct trace_iterator *iter = filp->private_data; 4689 int ret; 4690 4691 while (trace_empty(iter)) { 4692 4693 if ((filp->f_flags & O_NONBLOCK)) { 4694 return -EAGAIN; 4695 } 4696 4697 /* 4698 * We block until we read something and tracing is disabled. 4699 * We still block if tracing is disabled, but we have never 4700 * read anything. This allows a user to cat this file, and 4701 * then enable tracing. But after we have read something, 4702 * we give an EOF when tracing is again disabled. 4703 * 4704 * iter->pos will be 0 if we haven't read anything. 4705 */ 4706 if (!tracing_is_on() && iter->pos) 4707 break; 4708 4709 mutex_unlock(&iter->mutex); 4710 4711 ret = wait_on_pipe(iter, false); 4712 4713 mutex_lock(&iter->mutex); 4714 4715 if (ret) 4716 return ret; 4717 } 4718 4719 return 1; 4720 } 4721 4722 /* 4723 * Consumer reader. 4724 */ 4725 static ssize_t 4726 tracing_read_pipe(struct file *filp, char __user *ubuf, 4727 size_t cnt, loff_t *ppos) 4728 { 4729 struct trace_iterator *iter = filp->private_data; 4730 ssize_t sret; 4731 4732 /* return any leftover data */ 4733 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 4734 if (sret != -EBUSY) 4735 return sret; 4736 4737 trace_seq_init(&iter->seq); 4738 4739 /* 4740 * Avoid more than one consumer on a single file descriptor 4741 * This is just a matter of traces coherency, the ring buffer itself 4742 * is protected. 4743 */ 4744 mutex_lock(&iter->mutex); 4745 if (iter->trace->read) { 4746 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); 4747 if (sret) 4748 goto out; 4749 } 4750 4751 waitagain: 4752 sret = tracing_wait_pipe(filp); 4753 if (sret <= 0) 4754 goto out; 4755 4756 /* stop when tracing is finished */ 4757 if (trace_empty(iter)) { 4758 sret = 0; 4759 goto out; 4760 } 4761 4762 if (cnt >= PAGE_SIZE) 4763 cnt = PAGE_SIZE - 1; 4764 4765 /* reset all but tr, trace, and overruns */ 4766 memset(&iter->seq, 0, 4767 sizeof(struct trace_iterator) - 4768 offsetof(struct trace_iterator, seq)); 4769 cpumask_clear(iter->started); 4770 iter->pos = -1; 4771 4772 trace_event_read_lock(); 4773 trace_access_lock(iter->cpu_file); 4774 while (trace_find_next_entry_inc(iter) != NULL) { 4775 enum print_line_t ret; 4776 int save_len = iter->seq.seq.len; 4777 4778 ret = print_trace_line(iter); 4779 if (ret == TRACE_TYPE_PARTIAL_LINE) { 4780 /* don't print partial lines */ 4781 iter->seq.seq.len = save_len; 4782 break; 4783 } 4784 if (ret != TRACE_TYPE_NO_CONSUME) 4785 trace_consume(iter); 4786 4787 if (trace_seq_used(&iter->seq) >= cnt) 4788 break; 4789 4790 /* 4791 * Setting the full flag means we reached the trace_seq buffer 4792 * size and we should leave by partial output condition above. 4793 * One of the trace_seq_* functions is not used properly. 4794 */ 4795 WARN_ONCE(iter->seq.full, "full flag set for trace type %d", 4796 iter->ent->type); 4797 } 4798 trace_access_unlock(iter->cpu_file); 4799 trace_event_read_unlock(); 4800 4801 /* Now copy what we have to the user */ 4802 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 4803 if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq)) 4804 trace_seq_init(&iter->seq); 4805 4806 /* 4807 * If there was nothing to send to user, in spite of consuming trace 4808 * entries, go back to wait for more entries. 4809 */ 4810 if (sret == -EBUSY) 4811 goto waitagain; 4812 4813 out: 4814 mutex_unlock(&iter->mutex); 4815 4816 return sret; 4817 } 4818 4819 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd, 4820 unsigned int idx) 4821 { 4822 __free_page(spd->pages[idx]); 4823 } 4824 4825 static const struct pipe_buf_operations tracing_pipe_buf_ops = { 4826 .can_merge = 0, 4827 .confirm = generic_pipe_buf_confirm, 4828 .release = generic_pipe_buf_release, 4829 .steal = generic_pipe_buf_steal, 4830 .get = generic_pipe_buf_get, 4831 }; 4832 4833 static size_t 4834 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter) 4835 { 4836 size_t count; 4837 int save_len; 4838 int ret; 4839 4840 /* Seq buffer is page-sized, exactly what we need. */ 4841 for (;;) { 4842 save_len = iter->seq.seq.len; 4843 ret = print_trace_line(iter); 4844 4845 if (trace_seq_has_overflowed(&iter->seq)) { 4846 iter->seq.seq.len = save_len; 4847 break; 4848 } 4849 4850 /* 4851 * This should not be hit, because it should only 4852 * be set if the iter->seq overflowed. But check it 4853 * anyway to be safe. 4854 */ 4855 if (ret == TRACE_TYPE_PARTIAL_LINE) { 4856 iter->seq.seq.len = save_len; 4857 break; 4858 } 4859 4860 count = trace_seq_used(&iter->seq) - save_len; 4861 if (rem < count) { 4862 rem = 0; 4863 iter->seq.seq.len = save_len; 4864 break; 4865 } 4866 4867 if (ret != TRACE_TYPE_NO_CONSUME) 4868 trace_consume(iter); 4869 rem -= count; 4870 if (!trace_find_next_entry_inc(iter)) { 4871 rem = 0; 4872 iter->ent = NULL; 4873 break; 4874 } 4875 } 4876 4877 return rem; 4878 } 4879 4880 static ssize_t tracing_splice_read_pipe(struct file *filp, 4881 loff_t *ppos, 4882 struct pipe_inode_info *pipe, 4883 size_t len, 4884 unsigned int flags) 4885 { 4886 struct page *pages_def[PIPE_DEF_BUFFERS]; 4887 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 4888 struct trace_iterator *iter = filp->private_data; 4889 struct splice_pipe_desc spd = { 4890 .pages = pages_def, 4891 .partial = partial_def, 4892 .nr_pages = 0, /* This gets updated below. */ 4893 .nr_pages_max = PIPE_DEF_BUFFERS, 4894 .flags = flags, 4895 .ops = &tracing_pipe_buf_ops, 4896 .spd_release = tracing_spd_release_pipe, 4897 }; 4898 ssize_t ret; 4899 size_t rem; 4900 unsigned int i; 4901 4902 if (splice_grow_spd(pipe, &spd)) 4903 return -ENOMEM; 4904 4905 mutex_lock(&iter->mutex); 4906 4907 if (iter->trace->splice_read) { 4908 ret = iter->trace->splice_read(iter, filp, 4909 ppos, pipe, len, flags); 4910 if (ret) 4911 goto out_err; 4912 } 4913 4914 ret = tracing_wait_pipe(filp); 4915 if (ret <= 0) 4916 goto out_err; 4917 4918 if (!iter->ent && !trace_find_next_entry_inc(iter)) { 4919 ret = -EFAULT; 4920 goto out_err; 4921 } 4922 4923 trace_event_read_lock(); 4924 trace_access_lock(iter->cpu_file); 4925 4926 /* Fill as many pages as possible. */ 4927 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) { 4928 spd.pages[i] = alloc_page(GFP_KERNEL); 4929 if (!spd.pages[i]) 4930 break; 4931 4932 rem = tracing_fill_pipe_page(rem, iter); 4933 4934 /* Copy the data into the page, so we can start over. */ 4935 ret = trace_seq_to_buffer(&iter->seq, 4936 page_address(spd.pages[i]), 4937 trace_seq_used(&iter->seq)); 4938 if (ret < 0) { 4939 __free_page(spd.pages[i]); 4940 break; 4941 } 4942 spd.partial[i].offset = 0; 4943 spd.partial[i].len = trace_seq_used(&iter->seq); 4944 4945 trace_seq_init(&iter->seq); 4946 } 4947 4948 trace_access_unlock(iter->cpu_file); 4949 trace_event_read_unlock(); 4950 mutex_unlock(&iter->mutex); 4951 4952 spd.nr_pages = i; 4953 4954 ret = splice_to_pipe(pipe, &spd); 4955 out: 4956 splice_shrink_spd(&spd); 4957 return ret; 4958 4959 out_err: 4960 mutex_unlock(&iter->mutex); 4961 goto out; 4962 } 4963 4964 static ssize_t 4965 tracing_entries_read(struct file *filp, char __user *ubuf, 4966 size_t cnt, loff_t *ppos) 4967 { 4968 struct inode *inode = file_inode(filp); 4969 struct trace_array *tr = inode->i_private; 4970 int cpu = tracing_get_cpu(inode); 4971 char buf[64]; 4972 int r = 0; 4973 ssize_t ret; 4974 4975 mutex_lock(&trace_types_lock); 4976 4977 if (cpu == RING_BUFFER_ALL_CPUS) { 4978 int cpu, buf_size_same; 4979 unsigned long size; 4980 4981 size = 0; 4982 buf_size_same = 1; 4983 /* check if all cpu sizes are same */ 4984 for_each_tracing_cpu(cpu) { 4985 /* fill in the size from first enabled cpu */ 4986 if (size == 0) 4987 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries; 4988 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) { 4989 buf_size_same = 0; 4990 break; 4991 } 4992 } 4993 4994 if (buf_size_same) { 4995 if (!ring_buffer_expanded) 4996 r = sprintf(buf, "%lu (expanded: %lu)\n", 4997 size >> 10, 4998 trace_buf_size >> 10); 4999 else 5000 r = sprintf(buf, "%lu\n", size >> 10); 5001 } else 5002 r = sprintf(buf, "X\n"); 5003 } else 5004 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10); 5005 5006 mutex_unlock(&trace_types_lock); 5007 5008 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 5009 return ret; 5010 } 5011 5012 static ssize_t 5013 tracing_entries_write(struct file *filp, const char __user *ubuf, 5014 size_t cnt, loff_t *ppos) 5015 { 5016 struct inode *inode = file_inode(filp); 5017 struct trace_array *tr = inode->i_private; 5018 unsigned long val; 5019 int ret; 5020 5021 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 5022 if (ret) 5023 return ret; 5024 5025 /* must have at least 1 entry */ 5026 if (!val) 5027 return -EINVAL; 5028 5029 /* value is in KB */ 5030 val <<= 10; 5031 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); 5032 if (ret < 0) 5033 return ret; 5034 5035 *ppos += cnt; 5036 5037 return cnt; 5038 } 5039 5040 static ssize_t 5041 tracing_total_entries_read(struct file *filp, char __user *ubuf, 5042 size_t cnt, loff_t *ppos) 5043 { 5044 struct trace_array *tr = filp->private_data; 5045 char buf[64]; 5046 int r, cpu; 5047 unsigned long size = 0, expanded_size = 0; 5048 5049 mutex_lock(&trace_types_lock); 5050 for_each_tracing_cpu(cpu) { 5051 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10; 5052 if (!ring_buffer_expanded) 5053 expanded_size += trace_buf_size >> 10; 5054 } 5055 if (ring_buffer_expanded) 5056 r = sprintf(buf, "%lu\n", size); 5057 else 5058 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size); 5059 mutex_unlock(&trace_types_lock); 5060 5061 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 5062 } 5063 5064 static ssize_t 5065 tracing_free_buffer_write(struct file *filp, const char __user *ubuf, 5066 size_t cnt, loff_t *ppos) 5067 { 5068 /* 5069 * There is no need to read what the user has written, this function 5070 * is just to make sure that there is no error when "echo" is used 5071 */ 5072 5073 *ppos += cnt; 5074 5075 return cnt; 5076 } 5077 5078 static int 5079 tracing_free_buffer_release(struct inode *inode, struct file *filp) 5080 { 5081 struct trace_array *tr = inode->i_private; 5082 5083 /* disable tracing ? */ 5084 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE) 5085 tracer_tracing_off(tr); 5086 /* resize the ring buffer to 0 */ 5087 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); 5088 5089 trace_array_put(tr); 5090 5091 return 0; 5092 } 5093 5094 static ssize_t 5095 tracing_mark_write(struct file *filp, const char __user *ubuf, 5096 size_t cnt, loff_t *fpos) 5097 { 5098 unsigned long addr = (unsigned long)ubuf; 5099 struct trace_array *tr = filp->private_data; 5100 struct ring_buffer_event *event; 5101 struct ring_buffer *buffer; 5102 struct print_entry *entry; 5103 unsigned long irq_flags; 5104 struct page *pages[2]; 5105 void *map_page[2]; 5106 int nr_pages = 1; 5107 ssize_t written; 5108 int offset; 5109 int size; 5110 int len; 5111 int ret; 5112 int i; 5113 5114 if (tracing_disabled) 5115 return -EINVAL; 5116 5117 if (!(tr->trace_flags & TRACE_ITER_MARKERS)) 5118 return -EINVAL; 5119 5120 if (cnt > TRACE_BUF_SIZE) 5121 cnt = TRACE_BUF_SIZE; 5122 5123 /* 5124 * Userspace is injecting traces into the kernel trace buffer. 5125 * We want to be as non intrusive as possible. 5126 * To do so, we do not want to allocate any special buffers 5127 * or take any locks, but instead write the userspace data 5128 * straight into the ring buffer. 5129 * 5130 * First we need to pin the userspace buffer into memory, 5131 * which, most likely it is, because it just referenced it. 5132 * But there's no guarantee that it is. By using get_user_pages_fast() 5133 * and kmap_atomic/kunmap_atomic() we can get access to the 5134 * pages directly. We then write the data directly into the 5135 * ring buffer. 5136 */ 5137 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); 5138 5139 /* check if we cross pages */ 5140 if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK)) 5141 nr_pages = 2; 5142 5143 offset = addr & (PAGE_SIZE - 1); 5144 addr &= PAGE_MASK; 5145 5146 ret = get_user_pages_fast(addr, nr_pages, 0, pages); 5147 if (ret < nr_pages) { 5148 while (--ret >= 0) 5149 put_page(pages[ret]); 5150 written = -EFAULT; 5151 goto out; 5152 } 5153 5154 for (i = 0; i < nr_pages; i++) 5155 map_page[i] = kmap_atomic(pages[i]); 5156 5157 local_save_flags(irq_flags); 5158 size = sizeof(*entry) + cnt + 2; /* possible \n added */ 5159 buffer = tr->trace_buffer.buffer; 5160 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 5161 irq_flags, preempt_count()); 5162 if (!event) { 5163 /* Ring buffer disabled, return as if not open for write */ 5164 written = -EBADF; 5165 goto out_unlock; 5166 } 5167 5168 entry = ring_buffer_event_data(event); 5169 entry->ip = _THIS_IP_; 5170 5171 if (nr_pages == 2) { 5172 len = PAGE_SIZE - offset; 5173 memcpy(&entry->buf, map_page[0] + offset, len); 5174 memcpy(&entry->buf[len], map_page[1], cnt - len); 5175 } else 5176 memcpy(&entry->buf, map_page[0] + offset, cnt); 5177 5178 if (entry->buf[cnt - 1] != '\n') { 5179 entry->buf[cnt] = '\n'; 5180 entry->buf[cnt + 1] = '\0'; 5181 } else 5182 entry->buf[cnt] = '\0'; 5183 5184 __buffer_unlock_commit(buffer, event); 5185 5186 written = cnt; 5187 5188 *fpos += written; 5189 5190 out_unlock: 5191 for (i = nr_pages - 1; i >= 0; i--) { 5192 kunmap_atomic(map_page[i]); 5193 put_page(pages[i]); 5194 } 5195 out: 5196 return written; 5197 } 5198 5199 static int tracing_clock_show(struct seq_file *m, void *v) 5200 { 5201 struct trace_array *tr = m->private; 5202 int i; 5203 5204 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) 5205 seq_printf(m, 5206 "%s%s%s%s", i ? " " : "", 5207 i == tr->clock_id ? "[" : "", trace_clocks[i].name, 5208 i == tr->clock_id ? "]" : ""); 5209 seq_putc(m, '\n'); 5210 5211 return 0; 5212 } 5213 5214 static int tracing_set_clock(struct trace_array *tr, const char *clockstr) 5215 { 5216 int i; 5217 5218 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) { 5219 if (strcmp(trace_clocks[i].name, clockstr) == 0) 5220 break; 5221 } 5222 if (i == ARRAY_SIZE(trace_clocks)) 5223 return -EINVAL; 5224 5225 mutex_lock(&trace_types_lock); 5226 5227 tr->clock_id = i; 5228 5229 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func); 5230 5231 /* 5232 * New clock may not be consistent with the previous clock. 5233 * Reset the buffer so that it doesn't have incomparable timestamps. 5234 */ 5235 tracing_reset_online_cpus(&tr->trace_buffer); 5236 5237 #ifdef CONFIG_TRACER_MAX_TRACE 5238 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer) 5239 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); 5240 tracing_reset_online_cpus(&tr->max_buffer); 5241 #endif 5242 5243 mutex_unlock(&trace_types_lock); 5244 5245 return 0; 5246 } 5247 5248 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf, 5249 size_t cnt, loff_t *fpos) 5250 { 5251 struct seq_file *m = filp->private_data; 5252 struct trace_array *tr = m->private; 5253 char buf[64]; 5254 const char *clockstr; 5255 int ret; 5256 5257 if (cnt >= sizeof(buf)) 5258 return -EINVAL; 5259 5260 if (copy_from_user(&buf, ubuf, cnt)) 5261 return -EFAULT; 5262 5263 buf[cnt] = 0; 5264 5265 clockstr = strstrip(buf); 5266 5267 ret = tracing_set_clock(tr, clockstr); 5268 if (ret) 5269 return ret; 5270 5271 *fpos += cnt; 5272 5273 return cnt; 5274 } 5275 5276 static int tracing_clock_open(struct inode *inode, struct file *file) 5277 { 5278 struct trace_array *tr = inode->i_private; 5279 int ret; 5280 5281 if (tracing_disabled) 5282 return -ENODEV; 5283 5284 if (trace_array_get(tr)) 5285 return -ENODEV; 5286 5287 ret = single_open(file, tracing_clock_show, inode->i_private); 5288 if (ret < 0) 5289 trace_array_put(tr); 5290 5291 return ret; 5292 } 5293 5294 struct ftrace_buffer_info { 5295 struct trace_iterator iter; 5296 void *spare; 5297 unsigned int read; 5298 }; 5299 5300 #ifdef CONFIG_TRACER_SNAPSHOT 5301 static int tracing_snapshot_open(struct inode *inode, struct file *file) 5302 { 5303 struct trace_array *tr = inode->i_private; 5304 struct trace_iterator *iter; 5305 struct seq_file *m; 5306 int ret = 0; 5307 5308 if (trace_array_get(tr) < 0) 5309 return -ENODEV; 5310 5311 if (file->f_mode & FMODE_READ) { 5312 iter = __tracing_open(inode, file, true); 5313 if (IS_ERR(iter)) 5314 ret = PTR_ERR(iter); 5315 } else { 5316 /* Writes still need the seq_file to hold the private data */ 5317 ret = -ENOMEM; 5318 m = kzalloc(sizeof(*m), GFP_KERNEL); 5319 if (!m) 5320 goto out; 5321 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 5322 if (!iter) { 5323 kfree(m); 5324 goto out; 5325 } 5326 ret = 0; 5327 5328 iter->tr = tr; 5329 iter->trace_buffer = &tr->max_buffer; 5330 iter->cpu_file = tracing_get_cpu(inode); 5331 m->private = iter; 5332 file->private_data = m; 5333 } 5334 out: 5335 if (ret < 0) 5336 trace_array_put(tr); 5337 5338 return ret; 5339 } 5340 5341 static ssize_t 5342 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt, 5343 loff_t *ppos) 5344 { 5345 struct seq_file *m = filp->private_data; 5346 struct trace_iterator *iter = m->private; 5347 struct trace_array *tr = iter->tr; 5348 unsigned long val; 5349 int ret; 5350 5351 ret = tracing_update_buffers(); 5352 if (ret < 0) 5353 return ret; 5354 5355 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 5356 if (ret) 5357 return ret; 5358 5359 mutex_lock(&trace_types_lock); 5360 5361 if (tr->current_trace->use_max_tr) { 5362 ret = -EBUSY; 5363 goto out; 5364 } 5365 5366 switch (val) { 5367 case 0: 5368 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 5369 ret = -EINVAL; 5370 break; 5371 } 5372 if (tr->allocated_snapshot) 5373 free_snapshot(tr); 5374 break; 5375 case 1: 5376 /* Only allow per-cpu swap if the ring buffer supports it */ 5377 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP 5378 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 5379 ret = -EINVAL; 5380 break; 5381 } 5382 #endif 5383 if (!tr->allocated_snapshot) { 5384 ret = alloc_snapshot(tr); 5385 if (ret < 0) 5386 break; 5387 } 5388 local_irq_disable(); 5389 /* Now, we're going to swap */ 5390 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 5391 update_max_tr(tr, current, smp_processor_id()); 5392 else 5393 update_max_tr_single(tr, current, iter->cpu_file); 5394 local_irq_enable(); 5395 break; 5396 default: 5397 if (tr->allocated_snapshot) { 5398 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 5399 tracing_reset_online_cpus(&tr->max_buffer); 5400 else 5401 tracing_reset(&tr->max_buffer, iter->cpu_file); 5402 } 5403 break; 5404 } 5405 5406 if (ret >= 0) { 5407 *ppos += cnt; 5408 ret = cnt; 5409 } 5410 out: 5411 mutex_unlock(&trace_types_lock); 5412 return ret; 5413 } 5414 5415 static int tracing_snapshot_release(struct inode *inode, struct file *file) 5416 { 5417 struct seq_file *m = file->private_data; 5418 int ret; 5419 5420 ret = tracing_release(inode, file); 5421 5422 if (file->f_mode & FMODE_READ) 5423 return ret; 5424 5425 /* If write only, the seq_file is just a stub */ 5426 if (m) 5427 kfree(m->private); 5428 kfree(m); 5429 5430 return 0; 5431 } 5432 5433 static int tracing_buffers_open(struct inode *inode, struct file *filp); 5434 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf, 5435 size_t count, loff_t *ppos); 5436 static int tracing_buffers_release(struct inode *inode, struct file *file); 5437 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos, 5438 struct pipe_inode_info *pipe, size_t len, unsigned int flags); 5439 5440 static int snapshot_raw_open(struct inode *inode, struct file *filp) 5441 { 5442 struct ftrace_buffer_info *info; 5443 int ret; 5444 5445 ret = tracing_buffers_open(inode, filp); 5446 if (ret < 0) 5447 return ret; 5448 5449 info = filp->private_data; 5450 5451 if (info->iter.trace->use_max_tr) { 5452 tracing_buffers_release(inode, filp); 5453 return -EBUSY; 5454 } 5455 5456 info->iter.snapshot = true; 5457 info->iter.trace_buffer = &info->iter.tr->max_buffer; 5458 5459 return ret; 5460 } 5461 5462 #endif /* CONFIG_TRACER_SNAPSHOT */ 5463 5464 5465 static const struct file_operations tracing_thresh_fops = { 5466 .open = tracing_open_generic, 5467 .read = tracing_thresh_read, 5468 .write = tracing_thresh_write, 5469 .llseek = generic_file_llseek, 5470 }; 5471 5472 static const struct file_operations tracing_max_lat_fops = { 5473 .open = tracing_open_generic, 5474 .read = tracing_max_lat_read, 5475 .write = tracing_max_lat_write, 5476 .llseek = generic_file_llseek, 5477 }; 5478 5479 static const struct file_operations set_tracer_fops = { 5480 .open = tracing_open_generic, 5481 .read = tracing_set_trace_read, 5482 .write = tracing_set_trace_write, 5483 .llseek = generic_file_llseek, 5484 }; 5485 5486 static const struct file_operations tracing_pipe_fops = { 5487 .open = tracing_open_pipe, 5488 .poll = tracing_poll_pipe, 5489 .read = tracing_read_pipe, 5490 .splice_read = tracing_splice_read_pipe, 5491 .release = tracing_release_pipe, 5492 .llseek = no_llseek, 5493 }; 5494 5495 static const struct file_operations tracing_entries_fops = { 5496 .open = tracing_open_generic_tr, 5497 .read = tracing_entries_read, 5498 .write = tracing_entries_write, 5499 .llseek = generic_file_llseek, 5500 .release = tracing_release_generic_tr, 5501 }; 5502 5503 static const struct file_operations tracing_total_entries_fops = { 5504 .open = tracing_open_generic_tr, 5505 .read = tracing_total_entries_read, 5506 .llseek = generic_file_llseek, 5507 .release = tracing_release_generic_tr, 5508 }; 5509 5510 static const struct file_operations tracing_free_buffer_fops = { 5511 .open = tracing_open_generic_tr, 5512 .write = tracing_free_buffer_write, 5513 .release = tracing_free_buffer_release, 5514 }; 5515 5516 static const struct file_operations tracing_mark_fops = { 5517 .open = tracing_open_generic_tr, 5518 .write = tracing_mark_write, 5519 .llseek = generic_file_llseek, 5520 .release = tracing_release_generic_tr, 5521 }; 5522 5523 static const struct file_operations trace_clock_fops = { 5524 .open = tracing_clock_open, 5525 .read = seq_read, 5526 .llseek = seq_lseek, 5527 .release = tracing_single_release_tr, 5528 .write = tracing_clock_write, 5529 }; 5530 5531 #ifdef CONFIG_TRACER_SNAPSHOT 5532 static const struct file_operations snapshot_fops = { 5533 .open = tracing_snapshot_open, 5534 .read = seq_read, 5535 .write = tracing_snapshot_write, 5536 .llseek = tracing_lseek, 5537 .release = tracing_snapshot_release, 5538 }; 5539 5540 static const struct file_operations snapshot_raw_fops = { 5541 .open = snapshot_raw_open, 5542 .read = tracing_buffers_read, 5543 .release = tracing_buffers_release, 5544 .splice_read = tracing_buffers_splice_read, 5545 .llseek = no_llseek, 5546 }; 5547 5548 #endif /* CONFIG_TRACER_SNAPSHOT */ 5549 5550 static int tracing_buffers_open(struct inode *inode, struct file *filp) 5551 { 5552 struct trace_array *tr = inode->i_private; 5553 struct ftrace_buffer_info *info; 5554 int ret; 5555 5556 if (tracing_disabled) 5557 return -ENODEV; 5558 5559 if (trace_array_get(tr) < 0) 5560 return -ENODEV; 5561 5562 info = kzalloc(sizeof(*info), GFP_KERNEL); 5563 if (!info) { 5564 trace_array_put(tr); 5565 return -ENOMEM; 5566 } 5567 5568 mutex_lock(&trace_types_lock); 5569 5570 info->iter.tr = tr; 5571 info->iter.cpu_file = tracing_get_cpu(inode); 5572 info->iter.trace = tr->current_trace; 5573 info->iter.trace_buffer = &tr->trace_buffer; 5574 info->spare = NULL; 5575 /* Force reading ring buffer for first read */ 5576 info->read = (unsigned int)-1; 5577 5578 filp->private_data = info; 5579 5580 tr->current_trace->ref++; 5581 5582 mutex_unlock(&trace_types_lock); 5583 5584 ret = nonseekable_open(inode, filp); 5585 if (ret < 0) 5586 trace_array_put(tr); 5587 5588 return ret; 5589 } 5590 5591 static unsigned int 5592 tracing_buffers_poll(struct file *filp, poll_table *poll_table) 5593 { 5594 struct ftrace_buffer_info *info = filp->private_data; 5595 struct trace_iterator *iter = &info->iter; 5596 5597 return trace_poll(iter, filp, poll_table); 5598 } 5599 5600 static ssize_t 5601 tracing_buffers_read(struct file *filp, char __user *ubuf, 5602 size_t count, loff_t *ppos) 5603 { 5604 struct ftrace_buffer_info *info = filp->private_data; 5605 struct trace_iterator *iter = &info->iter; 5606 ssize_t ret; 5607 ssize_t size; 5608 5609 if (!count) 5610 return 0; 5611 5612 #ifdef CONFIG_TRACER_MAX_TRACE 5613 if (iter->snapshot && iter->tr->current_trace->use_max_tr) 5614 return -EBUSY; 5615 #endif 5616 5617 if (!info->spare) 5618 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer, 5619 iter->cpu_file); 5620 if (!info->spare) 5621 return -ENOMEM; 5622 5623 /* Do we have previous read data to read? */ 5624 if (info->read < PAGE_SIZE) 5625 goto read; 5626 5627 again: 5628 trace_access_lock(iter->cpu_file); 5629 ret = ring_buffer_read_page(iter->trace_buffer->buffer, 5630 &info->spare, 5631 count, 5632 iter->cpu_file, 0); 5633 trace_access_unlock(iter->cpu_file); 5634 5635 if (ret < 0) { 5636 if (trace_empty(iter)) { 5637 if ((filp->f_flags & O_NONBLOCK)) 5638 return -EAGAIN; 5639 5640 ret = wait_on_pipe(iter, false); 5641 if (ret) 5642 return ret; 5643 5644 goto again; 5645 } 5646 return 0; 5647 } 5648 5649 info->read = 0; 5650 read: 5651 size = PAGE_SIZE - info->read; 5652 if (size > count) 5653 size = count; 5654 5655 ret = copy_to_user(ubuf, info->spare + info->read, size); 5656 if (ret == size) 5657 return -EFAULT; 5658 5659 size -= ret; 5660 5661 *ppos += size; 5662 info->read += size; 5663 5664 return size; 5665 } 5666 5667 static int tracing_buffers_release(struct inode *inode, struct file *file) 5668 { 5669 struct ftrace_buffer_info *info = file->private_data; 5670 struct trace_iterator *iter = &info->iter; 5671 5672 mutex_lock(&trace_types_lock); 5673 5674 iter->tr->current_trace->ref--; 5675 5676 __trace_array_put(iter->tr); 5677 5678 if (info->spare) 5679 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare); 5680 kfree(info); 5681 5682 mutex_unlock(&trace_types_lock); 5683 5684 return 0; 5685 } 5686 5687 struct buffer_ref { 5688 struct ring_buffer *buffer; 5689 void *page; 5690 int ref; 5691 }; 5692 5693 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe, 5694 struct pipe_buffer *buf) 5695 { 5696 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 5697 5698 if (--ref->ref) 5699 return; 5700 5701 ring_buffer_free_read_page(ref->buffer, ref->page); 5702 kfree(ref); 5703 buf->private = 0; 5704 } 5705 5706 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe, 5707 struct pipe_buffer *buf) 5708 { 5709 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 5710 5711 ref->ref++; 5712 } 5713 5714 /* Pipe buffer operations for a buffer. */ 5715 static const struct pipe_buf_operations buffer_pipe_buf_ops = { 5716 .can_merge = 0, 5717 .confirm = generic_pipe_buf_confirm, 5718 .release = buffer_pipe_buf_release, 5719 .steal = generic_pipe_buf_steal, 5720 .get = buffer_pipe_buf_get, 5721 }; 5722 5723 /* 5724 * Callback from splice_to_pipe(), if we need to release some pages 5725 * at the end of the spd in case we error'ed out in filling the pipe. 5726 */ 5727 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i) 5728 { 5729 struct buffer_ref *ref = 5730 (struct buffer_ref *)spd->partial[i].private; 5731 5732 if (--ref->ref) 5733 return; 5734 5735 ring_buffer_free_read_page(ref->buffer, ref->page); 5736 kfree(ref); 5737 spd->partial[i].private = 0; 5738 } 5739 5740 static ssize_t 5741 tracing_buffers_splice_read(struct file *file, loff_t *ppos, 5742 struct pipe_inode_info *pipe, size_t len, 5743 unsigned int flags) 5744 { 5745 struct ftrace_buffer_info *info = file->private_data; 5746 struct trace_iterator *iter = &info->iter; 5747 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 5748 struct page *pages_def[PIPE_DEF_BUFFERS]; 5749 struct splice_pipe_desc spd = { 5750 .pages = pages_def, 5751 .partial = partial_def, 5752 .nr_pages_max = PIPE_DEF_BUFFERS, 5753 .flags = flags, 5754 .ops = &buffer_pipe_buf_ops, 5755 .spd_release = buffer_spd_release, 5756 }; 5757 struct buffer_ref *ref; 5758 int entries, size, i; 5759 ssize_t ret = 0; 5760 5761 #ifdef CONFIG_TRACER_MAX_TRACE 5762 if (iter->snapshot && iter->tr->current_trace->use_max_tr) 5763 return -EBUSY; 5764 #endif 5765 5766 if (splice_grow_spd(pipe, &spd)) 5767 return -ENOMEM; 5768 5769 if (*ppos & (PAGE_SIZE - 1)) 5770 return -EINVAL; 5771 5772 if (len & (PAGE_SIZE - 1)) { 5773 if (len < PAGE_SIZE) 5774 return -EINVAL; 5775 len &= PAGE_MASK; 5776 } 5777 5778 again: 5779 trace_access_lock(iter->cpu_file); 5780 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file); 5781 5782 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) { 5783 struct page *page; 5784 int r; 5785 5786 ref = kzalloc(sizeof(*ref), GFP_KERNEL); 5787 if (!ref) { 5788 ret = -ENOMEM; 5789 break; 5790 } 5791 5792 ref->ref = 1; 5793 ref->buffer = iter->trace_buffer->buffer; 5794 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file); 5795 if (!ref->page) { 5796 ret = -ENOMEM; 5797 kfree(ref); 5798 break; 5799 } 5800 5801 r = ring_buffer_read_page(ref->buffer, &ref->page, 5802 len, iter->cpu_file, 1); 5803 if (r < 0) { 5804 ring_buffer_free_read_page(ref->buffer, ref->page); 5805 kfree(ref); 5806 break; 5807 } 5808 5809 /* 5810 * zero out any left over data, this is going to 5811 * user land. 5812 */ 5813 size = ring_buffer_page_len(ref->page); 5814 if (size < PAGE_SIZE) 5815 memset(ref->page + size, 0, PAGE_SIZE - size); 5816 5817 page = virt_to_page(ref->page); 5818 5819 spd.pages[i] = page; 5820 spd.partial[i].len = PAGE_SIZE; 5821 spd.partial[i].offset = 0; 5822 spd.partial[i].private = (unsigned long)ref; 5823 spd.nr_pages++; 5824 *ppos += PAGE_SIZE; 5825 5826 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file); 5827 } 5828 5829 trace_access_unlock(iter->cpu_file); 5830 spd.nr_pages = i; 5831 5832 /* did we read anything? */ 5833 if (!spd.nr_pages) { 5834 if (ret) 5835 return ret; 5836 5837 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) 5838 return -EAGAIN; 5839 5840 ret = wait_on_pipe(iter, true); 5841 if (ret) 5842 return ret; 5843 5844 goto again; 5845 } 5846 5847 ret = splice_to_pipe(pipe, &spd); 5848 splice_shrink_spd(&spd); 5849 5850 return ret; 5851 } 5852 5853 static const struct file_operations tracing_buffers_fops = { 5854 .open = tracing_buffers_open, 5855 .read = tracing_buffers_read, 5856 .poll = tracing_buffers_poll, 5857 .release = tracing_buffers_release, 5858 .splice_read = tracing_buffers_splice_read, 5859 .llseek = no_llseek, 5860 }; 5861 5862 static ssize_t 5863 tracing_stats_read(struct file *filp, char __user *ubuf, 5864 size_t count, loff_t *ppos) 5865 { 5866 struct inode *inode = file_inode(filp); 5867 struct trace_array *tr = inode->i_private; 5868 struct trace_buffer *trace_buf = &tr->trace_buffer; 5869 int cpu = tracing_get_cpu(inode); 5870 struct trace_seq *s; 5871 unsigned long cnt; 5872 unsigned long long t; 5873 unsigned long usec_rem; 5874 5875 s = kmalloc(sizeof(*s), GFP_KERNEL); 5876 if (!s) 5877 return -ENOMEM; 5878 5879 trace_seq_init(s); 5880 5881 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu); 5882 trace_seq_printf(s, "entries: %ld\n", cnt); 5883 5884 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu); 5885 trace_seq_printf(s, "overrun: %ld\n", cnt); 5886 5887 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu); 5888 trace_seq_printf(s, "commit overrun: %ld\n", cnt); 5889 5890 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu); 5891 trace_seq_printf(s, "bytes: %ld\n", cnt); 5892 5893 if (trace_clocks[tr->clock_id].in_ns) { 5894 /* local or global for trace_clock */ 5895 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 5896 usec_rem = do_div(t, USEC_PER_SEC); 5897 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n", 5898 t, usec_rem); 5899 5900 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu)); 5901 usec_rem = do_div(t, USEC_PER_SEC); 5902 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem); 5903 } else { 5904 /* counter or tsc mode for trace_clock */ 5905 trace_seq_printf(s, "oldest event ts: %llu\n", 5906 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 5907 5908 trace_seq_printf(s, "now ts: %llu\n", 5909 ring_buffer_time_stamp(trace_buf->buffer, cpu)); 5910 } 5911 5912 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu); 5913 trace_seq_printf(s, "dropped events: %ld\n", cnt); 5914 5915 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu); 5916 trace_seq_printf(s, "read events: %ld\n", cnt); 5917 5918 count = simple_read_from_buffer(ubuf, count, ppos, 5919 s->buffer, trace_seq_used(s)); 5920 5921 kfree(s); 5922 5923 return count; 5924 } 5925 5926 static const struct file_operations tracing_stats_fops = { 5927 .open = tracing_open_generic_tr, 5928 .read = tracing_stats_read, 5929 .llseek = generic_file_llseek, 5930 .release = tracing_release_generic_tr, 5931 }; 5932 5933 #ifdef CONFIG_DYNAMIC_FTRACE 5934 5935 int __weak ftrace_arch_read_dyn_info(char *buf, int size) 5936 { 5937 return 0; 5938 } 5939 5940 static ssize_t 5941 tracing_read_dyn_info(struct file *filp, char __user *ubuf, 5942 size_t cnt, loff_t *ppos) 5943 { 5944 static char ftrace_dyn_info_buffer[1024]; 5945 static DEFINE_MUTEX(dyn_info_mutex); 5946 unsigned long *p = filp->private_data; 5947 char *buf = ftrace_dyn_info_buffer; 5948 int size = ARRAY_SIZE(ftrace_dyn_info_buffer); 5949 int r; 5950 5951 mutex_lock(&dyn_info_mutex); 5952 r = sprintf(buf, "%ld ", *p); 5953 5954 r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r); 5955 buf[r++] = '\n'; 5956 5957 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 5958 5959 mutex_unlock(&dyn_info_mutex); 5960 5961 return r; 5962 } 5963 5964 static const struct file_operations tracing_dyn_info_fops = { 5965 .open = tracing_open_generic, 5966 .read = tracing_read_dyn_info, 5967 .llseek = generic_file_llseek, 5968 }; 5969 #endif /* CONFIG_DYNAMIC_FTRACE */ 5970 5971 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) 5972 static void 5973 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data) 5974 { 5975 tracing_snapshot(); 5976 } 5977 5978 static void 5979 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data) 5980 { 5981 unsigned long *count = (long *)data; 5982 5983 if (!*count) 5984 return; 5985 5986 if (*count != -1) 5987 (*count)--; 5988 5989 tracing_snapshot(); 5990 } 5991 5992 static int 5993 ftrace_snapshot_print(struct seq_file *m, unsigned long ip, 5994 struct ftrace_probe_ops *ops, void *data) 5995 { 5996 long count = (long)data; 5997 5998 seq_printf(m, "%ps:", (void *)ip); 5999 6000 seq_puts(m, "snapshot"); 6001 6002 if (count == -1) 6003 seq_puts(m, ":unlimited\n"); 6004 else 6005 seq_printf(m, ":count=%ld\n", count); 6006 6007 return 0; 6008 } 6009 6010 static struct ftrace_probe_ops snapshot_probe_ops = { 6011 .func = ftrace_snapshot, 6012 .print = ftrace_snapshot_print, 6013 }; 6014 6015 static struct ftrace_probe_ops snapshot_count_probe_ops = { 6016 .func = ftrace_count_snapshot, 6017 .print = ftrace_snapshot_print, 6018 }; 6019 6020 static int 6021 ftrace_trace_snapshot_callback(struct ftrace_hash *hash, 6022 char *glob, char *cmd, char *param, int enable) 6023 { 6024 struct ftrace_probe_ops *ops; 6025 void *count = (void *)-1; 6026 char *number; 6027 int ret; 6028 6029 /* hash funcs only work with set_ftrace_filter */ 6030 if (!enable) 6031 return -EINVAL; 6032 6033 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops; 6034 6035 if (glob[0] == '!') { 6036 unregister_ftrace_function_probe_func(glob+1, ops); 6037 return 0; 6038 } 6039 6040 if (!param) 6041 goto out_reg; 6042 6043 number = strsep(¶m, ":"); 6044 6045 if (!strlen(number)) 6046 goto out_reg; 6047 6048 /* 6049 * We use the callback data field (which is a pointer) 6050 * as our counter. 6051 */ 6052 ret = kstrtoul(number, 0, (unsigned long *)&count); 6053 if (ret) 6054 return ret; 6055 6056 out_reg: 6057 ret = register_ftrace_function_probe(glob, ops, count); 6058 6059 if (ret >= 0) 6060 alloc_snapshot(&global_trace); 6061 6062 return ret < 0 ? ret : 0; 6063 } 6064 6065 static struct ftrace_func_command ftrace_snapshot_cmd = { 6066 .name = "snapshot", 6067 .func = ftrace_trace_snapshot_callback, 6068 }; 6069 6070 static __init int register_snapshot_cmd(void) 6071 { 6072 return register_ftrace_command(&ftrace_snapshot_cmd); 6073 } 6074 #else 6075 static inline __init int register_snapshot_cmd(void) { return 0; } 6076 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */ 6077 6078 static struct dentry *tracing_get_dentry(struct trace_array *tr) 6079 { 6080 if (WARN_ON(!tr->dir)) 6081 return ERR_PTR(-ENODEV); 6082 6083 /* Top directory uses NULL as the parent */ 6084 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 6085 return NULL; 6086 6087 /* All sub buffers have a descriptor */ 6088 return tr->dir; 6089 } 6090 6091 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) 6092 { 6093 struct dentry *d_tracer; 6094 6095 if (tr->percpu_dir) 6096 return tr->percpu_dir; 6097 6098 d_tracer = tracing_get_dentry(tr); 6099 if (IS_ERR(d_tracer)) 6100 return NULL; 6101 6102 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer); 6103 6104 WARN_ONCE(!tr->percpu_dir, 6105 "Could not create tracefs directory 'per_cpu/%d'\n", cpu); 6106 6107 return tr->percpu_dir; 6108 } 6109 6110 static struct dentry * 6111 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent, 6112 void *data, long cpu, const struct file_operations *fops) 6113 { 6114 struct dentry *ret = trace_create_file(name, mode, parent, data, fops); 6115 6116 if (ret) /* See tracing_get_cpu() */ 6117 d_inode(ret)->i_cdev = (void *)(cpu + 1); 6118 return ret; 6119 } 6120 6121 static void 6122 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) 6123 { 6124 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); 6125 struct dentry *d_cpu; 6126 char cpu_dir[30]; /* 30 characters should be more than enough */ 6127 6128 if (!d_percpu) 6129 return; 6130 6131 snprintf(cpu_dir, 30, "cpu%ld", cpu); 6132 d_cpu = tracefs_create_dir(cpu_dir, d_percpu); 6133 if (!d_cpu) { 6134 pr_warning("Could not create tracefs '%s' entry\n", cpu_dir); 6135 return; 6136 } 6137 6138 /* per cpu trace_pipe */ 6139 trace_create_cpu_file("trace_pipe", 0444, d_cpu, 6140 tr, cpu, &tracing_pipe_fops); 6141 6142 /* per cpu trace */ 6143 trace_create_cpu_file("trace", 0644, d_cpu, 6144 tr, cpu, &tracing_fops); 6145 6146 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu, 6147 tr, cpu, &tracing_buffers_fops); 6148 6149 trace_create_cpu_file("stats", 0444, d_cpu, 6150 tr, cpu, &tracing_stats_fops); 6151 6152 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu, 6153 tr, cpu, &tracing_entries_fops); 6154 6155 #ifdef CONFIG_TRACER_SNAPSHOT 6156 trace_create_cpu_file("snapshot", 0644, d_cpu, 6157 tr, cpu, &snapshot_fops); 6158 6159 trace_create_cpu_file("snapshot_raw", 0444, d_cpu, 6160 tr, cpu, &snapshot_raw_fops); 6161 #endif 6162 } 6163 6164 #ifdef CONFIG_FTRACE_SELFTEST 6165 /* Let selftest have access to static functions in this file */ 6166 #include "trace_selftest.c" 6167 #endif 6168 6169 static ssize_t 6170 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt, 6171 loff_t *ppos) 6172 { 6173 struct trace_option_dentry *topt = filp->private_data; 6174 char *buf; 6175 6176 if (topt->flags->val & topt->opt->bit) 6177 buf = "1\n"; 6178 else 6179 buf = "0\n"; 6180 6181 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 6182 } 6183 6184 static ssize_t 6185 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt, 6186 loff_t *ppos) 6187 { 6188 struct trace_option_dentry *topt = filp->private_data; 6189 unsigned long val; 6190 int ret; 6191 6192 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6193 if (ret) 6194 return ret; 6195 6196 if (val != 0 && val != 1) 6197 return -EINVAL; 6198 6199 if (!!(topt->flags->val & topt->opt->bit) != val) { 6200 mutex_lock(&trace_types_lock); 6201 ret = __set_tracer_option(topt->tr, topt->flags, 6202 topt->opt, !val); 6203 mutex_unlock(&trace_types_lock); 6204 if (ret) 6205 return ret; 6206 } 6207 6208 *ppos += cnt; 6209 6210 return cnt; 6211 } 6212 6213 6214 static const struct file_operations trace_options_fops = { 6215 .open = tracing_open_generic, 6216 .read = trace_options_read, 6217 .write = trace_options_write, 6218 .llseek = generic_file_llseek, 6219 }; 6220 6221 /* 6222 * In order to pass in both the trace_array descriptor as well as the index 6223 * to the flag that the trace option file represents, the trace_array 6224 * has a character array of trace_flags_index[], which holds the index 6225 * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc. 6226 * The address of this character array is passed to the flag option file 6227 * read/write callbacks. 6228 * 6229 * In order to extract both the index and the trace_array descriptor, 6230 * get_tr_index() uses the following algorithm. 6231 * 6232 * idx = *ptr; 6233 * 6234 * As the pointer itself contains the address of the index (remember 6235 * index[1] == 1). 6236 * 6237 * Then to get the trace_array descriptor, by subtracting that index 6238 * from the ptr, we get to the start of the index itself. 6239 * 6240 * ptr - idx == &index[0] 6241 * 6242 * Then a simple container_of() from that pointer gets us to the 6243 * trace_array descriptor. 6244 */ 6245 static void get_tr_index(void *data, struct trace_array **ptr, 6246 unsigned int *pindex) 6247 { 6248 *pindex = *(unsigned char *)data; 6249 6250 *ptr = container_of(data - *pindex, struct trace_array, 6251 trace_flags_index); 6252 } 6253 6254 static ssize_t 6255 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt, 6256 loff_t *ppos) 6257 { 6258 void *tr_index = filp->private_data; 6259 struct trace_array *tr; 6260 unsigned int index; 6261 char *buf; 6262 6263 get_tr_index(tr_index, &tr, &index); 6264 6265 if (tr->trace_flags & (1 << index)) 6266 buf = "1\n"; 6267 else 6268 buf = "0\n"; 6269 6270 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 6271 } 6272 6273 static ssize_t 6274 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt, 6275 loff_t *ppos) 6276 { 6277 void *tr_index = filp->private_data; 6278 struct trace_array *tr; 6279 unsigned int index; 6280 unsigned long val; 6281 int ret; 6282 6283 get_tr_index(tr_index, &tr, &index); 6284 6285 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6286 if (ret) 6287 return ret; 6288 6289 if (val != 0 && val != 1) 6290 return -EINVAL; 6291 6292 mutex_lock(&trace_types_lock); 6293 ret = set_tracer_flag(tr, 1 << index, val); 6294 mutex_unlock(&trace_types_lock); 6295 6296 if (ret < 0) 6297 return ret; 6298 6299 *ppos += cnt; 6300 6301 return cnt; 6302 } 6303 6304 static const struct file_operations trace_options_core_fops = { 6305 .open = tracing_open_generic, 6306 .read = trace_options_core_read, 6307 .write = trace_options_core_write, 6308 .llseek = generic_file_llseek, 6309 }; 6310 6311 struct dentry *trace_create_file(const char *name, 6312 umode_t mode, 6313 struct dentry *parent, 6314 void *data, 6315 const struct file_operations *fops) 6316 { 6317 struct dentry *ret; 6318 6319 ret = tracefs_create_file(name, mode, parent, data, fops); 6320 if (!ret) 6321 pr_warning("Could not create tracefs '%s' entry\n", name); 6322 6323 return ret; 6324 } 6325 6326 6327 static struct dentry *trace_options_init_dentry(struct trace_array *tr) 6328 { 6329 struct dentry *d_tracer; 6330 6331 if (tr->options) 6332 return tr->options; 6333 6334 d_tracer = tracing_get_dentry(tr); 6335 if (IS_ERR(d_tracer)) 6336 return NULL; 6337 6338 tr->options = tracefs_create_dir("options", d_tracer); 6339 if (!tr->options) { 6340 pr_warning("Could not create tracefs directory 'options'\n"); 6341 return NULL; 6342 } 6343 6344 return tr->options; 6345 } 6346 6347 static void 6348 create_trace_option_file(struct trace_array *tr, 6349 struct trace_option_dentry *topt, 6350 struct tracer_flags *flags, 6351 struct tracer_opt *opt) 6352 { 6353 struct dentry *t_options; 6354 6355 t_options = trace_options_init_dentry(tr); 6356 if (!t_options) 6357 return; 6358 6359 topt->flags = flags; 6360 topt->opt = opt; 6361 topt->tr = tr; 6362 6363 topt->entry = trace_create_file(opt->name, 0644, t_options, topt, 6364 &trace_options_fops); 6365 6366 } 6367 6368 static void 6369 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) 6370 { 6371 struct trace_option_dentry *topts; 6372 struct trace_options *tr_topts; 6373 struct tracer_flags *flags; 6374 struct tracer_opt *opts; 6375 int cnt; 6376 int i; 6377 6378 if (!tracer) 6379 return; 6380 6381 flags = tracer->flags; 6382 6383 if (!flags || !flags->opts) 6384 return; 6385 6386 /* 6387 * If this is an instance, only create flags for tracers 6388 * the instance may have. 6389 */ 6390 if (!trace_ok_for_array(tracer, tr)) 6391 return; 6392 6393 for (i = 0; i < tr->nr_topts; i++) { 6394 /* 6395 * Check if these flags have already been added. 6396 * Some tracers share flags. 6397 */ 6398 if (tr->topts[i].tracer->flags == tracer->flags) 6399 return; 6400 } 6401 6402 opts = flags->opts; 6403 6404 for (cnt = 0; opts[cnt].name; cnt++) 6405 ; 6406 6407 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL); 6408 if (!topts) 6409 return; 6410 6411 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), 6412 GFP_KERNEL); 6413 if (!tr_topts) { 6414 kfree(topts); 6415 return; 6416 } 6417 6418 tr->topts = tr_topts; 6419 tr->topts[tr->nr_topts].tracer = tracer; 6420 tr->topts[tr->nr_topts].topts = topts; 6421 tr->nr_topts++; 6422 6423 for (cnt = 0; opts[cnt].name; cnt++) { 6424 create_trace_option_file(tr, &topts[cnt], flags, 6425 &opts[cnt]); 6426 WARN_ONCE(topts[cnt].entry == NULL, 6427 "Failed to create trace option: %s", 6428 opts[cnt].name); 6429 } 6430 } 6431 6432 static struct dentry * 6433 create_trace_option_core_file(struct trace_array *tr, 6434 const char *option, long index) 6435 { 6436 struct dentry *t_options; 6437 6438 t_options = trace_options_init_dentry(tr); 6439 if (!t_options) 6440 return NULL; 6441 6442 return trace_create_file(option, 0644, t_options, 6443 (void *)&tr->trace_flags_index[index], 6444 &trace_options_core_fops); 6445 } 6446 6447 static void create_trace_options_dir(struct trace_array *tr) 6448 { 6449 struct dentry *t_options; 6450 bool top_level = tr == &global_trace; 6451 int i; 6452 6453 t_options = trace_options_init_dentry(tr); 6454 if (!t_options) 6455 return; 6456 6457 for (i = 0; trace_options[i]; i++) { 6458 if (top_level || 6459 !((1 << i) & TOP_LEVEL_TRACE_FLAGS)) 6460 create_trace_option_core_file(tr, trace_options[i], i); 6461 } 6462 } 6463 6464 static ssize_t 6465 rb_simple_read(struct file *filp, char __user *ubuf, 6466 size_t cnt, loff_t *ppos) 6467 { 6468 struct trace_array *tr = filp->private_data; 6469 char buf[64]; 6470 int r; 6471 6472 r = tracer_tracing_is_on(tr); 6473 r = sprintf(buf, "%d\n", r); 6474 6475 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 6476 } 6477 6478 static ssize_t 6479 rb_simple_write(struct file *filp, const char __user *ubuf, 6480 size_t cnt, loff_t *ppos) 6481 { 6482 struct trace_array *tr = filp->private_data; 6483 struct ring_buffer *buffer = tr->trace_buffer.buffer; 6484 unsigned long val; 6485 int ret; 6486 6487 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6488 if (ret) 6489 return ret; 6490 6491 if (buffer) { 6492 mutex_lock(&trace_types_lock); 6493 if (val) { 6494 tracer_tracing_on(tr); 6495 if (tr->current_trace->start) 6496 tr->current_trace->start(tr); 6497 } else { 6498 tracer_tracing_off(tr); 6499 if (tr->current_trace->stop) 6500 tr->current_trace->stop(tr); 6501 } 6502 mutex_unlock(&trace_types_lock); 6503 } 6504 6505 (*ppos)++; 6506 6507 return cnt; 6508 } 6509 6510 static const struct file_operations rb_simple_fops = { 6511 .open = tracing_open_generic_tr, 6512 .read = rb_simple_read, 6513 .write = rb_simple_write, 6514 .release = tracing_release_generic_tr, 6515 .llseek = default_llseek, 6516 }; 6517 6518 struct dentry *trace_instance_dir; 6519 6520 static void 6521 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer); 6522 6523 static int 6524 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size) 6525 { 6526 enum ring_buffer_flags rb_flags; 6527 6528 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; 6529 6530 buf->tr = tr; 6531 6532 buf->buffer = ring_buffer_alloc(size, rb_flags); 6533 if (!buf->buffer) 6534 return -ENOMEM; 6535 6536 buf->data = alloc_percpu(struct trace_array_cpu); 6537 if (!buf->data) { 6538 ring_buffer_free(buf->buffer); 6539 return -ENOMEM; 6540 } 6541 6542 /* Allocate the first page for all buffers */ 6543 set_buffer_entries(&tr->trace_buffer, 6544 ring_buffer_size(tr->trace_buffer.buffer, 0)); 6545 6546 return 0; 6547 } 6548 6549 static int allocate_trace_buffers(struct trace_array *tr, int size) 6550 { 6551 int ret; 6552 6553 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size); 6554 if (ret) 6555 return ret; 6556 6557 #ifdef CONFIG_TRACER_MAX_TRACE 6558 ret = allocate_trace_buffer(tr, &tr->max_buffer, 6559 allocate_snapshot ? size : 1); 6560 if (WARN_ON(ret)) { 6561 ring_buffer_free(tr->trace_buffer.buffer); 6562 free_percpu(tr->trace_buffer.data); 6563 return -ENOMEM; 6564 } 6565 tr->allocated_snapshot = allocate_snapshot; 6566 6567 /* 6568 * Only the top level trace array gets its snapshot allocated 6569 * from the kernel command line. 6570 */ 6571 allocate_snapshot = false; 6572 #endif 6573 return 0; 6574 } 6575 6576 static void free_trace_buffer(struct trace_buffer *buf) 6577 { 6578 if (buf->buffer) { 6579 ring_buffer_free(buf->buffer); 6580 buf->buffer = NULL; 6581 free_percpu(buf->data); 6582 buf->data = NULL; 6583 } 6584 } 6585 6586 static void free_trace_buffers(struct trace_array *tr) 6587 { 6588 if (!tr) 6589 return; 6590 6591 free_trace_buffer(&tr->trace_buffer); 6592 6593 #ifdef CONFIG_TRACER_MAX_TRACE 6594 free_trace_buffer(&tr->max_buffer); 6595 #endif 6596 } 6597 6598 static void init_trace_flags_index(struct trace_array *tr) 6599 { 6600 int i; 6601 6602 /* Used by the trace options files */ 6603 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) 6604 tr->trace_flags_index[i] = i; 6605 } 6606 6607 static void __update_tracer_options(struct trace_array *tr) 6608 { 6609 struct tracer *t; 6610 6611 for (t = trace_types; t; t = t->next) 6612 add_tracer_options(tr, t); 6613 } 6614 6615 static void update_tracer_options(struct trace_array *tr) 6616 { 6617 mutex_lock(&trace_types_lock); 6618 __update_tracer_options(tr); 6619 mutex_unlock(&trace_types_lock); 6620 } 6621 6622 static int instance_mkdir(const char *name) 6623 { 6624 struct trace_array *tr; 6625 int ret; 6626 6627 mutex_lock(&trace_types_lock); 6628 6629 ret = -EEXIST; 6630 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 6631 if (tr->name && strcmp(tr->name, name) == 0) 6632 goto out_unlock; 6633 } 6634 6635 ret = -ENOMEM; 6636 tr = kzalloc(sizeof(*tr), GFP_KERNEL); 6637 if (!tr) 6638 goto out_unlock; 6639 6640 tr->name = kstrdup(name, GFP_KERNEL); 6641 if (!tr->name) 6642 goto out_free_tr; 6643 6644 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) 6645 goto out_free_tr; 6646 6647 tr->trace_flags = global_trace.trace_flags; 6648 6649 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); 6650 6651 raw_spin_lock_init(&tr->start_lock); 6652 6653 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 6654 6655 tr->current_trace = &nop_trace; 6656 6657 INIT_LIST_HEAD(&tr->systems); 6658 INIT_LIST_HEAD(&tr->events); 6659 6660 if (allocate_trace_buffers(tr, trace_buf_size) < 0) 6661 goto out_free_tr; 6662 6663 tr->dir = tracefs_create_dir(name, trace_instance_dir); 6664 if (!tr->dir) 6665 goto out_free_tr; 6666 6667 ret = event_trace_add_tracer(tr->dir, tr); 6668 if (ret) { 6669 tracefs_remove_recursive(tr->dir); 6670 goto out_free_tr; 6671 } 6672 6673 init_tracer_tracefs(tr, tr->dir); 6674 init_trace_flags_index(tr); 6675 __update_tracer_options(tr); 6676 6677 list_add(&tr->list, &ftrace_trace_arrays); 6678 6679 mutex_unlock(&trace_types_lock); 6680 6681 return 0; 6682 6683 out_free_tr: 6684 free_trace_buffers(tr); 6685 free_cpumask_var(tr->tracing_cpumask); 6686 kfree(tr->name); 6687 kfree(tr); 6688 6689 out_unlock: 6690 mutex_unlock(&trace_types_lock); 6691 6692 return ret; 6693 6694 } 6695 6696 static int instance_rmdir(const char *name) 6697 { 6698 struct trace_array *tr; 6699 int found = 0; 6700 int ret; 6701 int i; 6702 6703 mutex_lock(&trace_types_lock); 6704 6705 ret = -ENODEV; 6706 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 6707 if (tr->name && strcmp(tr->name, name) == 0) { 6708 found = 1; 6709 break; 6710 } 6711 } 6712 if (!found) 6713 goto out_unlock; 6714 6715 ret = -EBUSY; 6716 if (tr->ref || (tr->current_trace && tr->current_trace->ref)) 6717 goto out_unlock; 6718 6719 list_del(&tr->list); 6720 6721 tracing_set_nop(tr); 6722 event_trace_del_tracer(tr); 6723 ftrace_destroy_function_files(tr); 6724 tracefs_remove_recursive(tr->dir); 6725 free_trace_buffers(tr); 6726 6727 for (i = 0; i < tr->nr_topts; i++) { 6728 kfree(tr->topts[i].topts); 6729 } 6730 kfree(tr->topts); 6731 6732 kfree(tr->name); 6733 kfree(tr); 6734 6735 ret = 0; 6736 6737 out_unlock: 6738 mutex_unlock(&trace_types_lock); 6739 6740 return ret; 6741 } 6742 6743 static __init void create_trace_instances(struct dentry *d_tracer) 6744 { 6745 trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer, 6746 instance_mkdir, 6747 instance_rmdir); 6748 if (WARN_ON(!trace_instance_dir)) 6749 return; 6750 } 6751 6752 static void 6753 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) 6754 { 6755 int cpu; 6756 6757 trace_create_file("available_tracers", 0444, d_tracer, 6758 tr, &show_traces_fops); 6759 6760 trace_create_file("current_tracer", 0644, d_tracer, 6761 tr, &set_tracer_fops); 6762 6763 trace_create_file("tracing_cpumask", 0644, d_tracer, 6764 tr, &tracing_cpumask_fops); 6765 6766 trace_create_file("trace_options", 0644, d_tracer, 6767 tr, &tracing_iter_fops); 6768 6769 trace_create_file("trace", 0644, d_tracer, 6770 tr, &tracing_fops); 6771 6772 trace_create_file("trace_pipe", 0444, d_tracer, 6773 tr, &tracing_pipe_fops); 6774 6775 trace_create_file("buffer_size_kb", 0644, d_tracer, 6776 tr, &tracing_entries_fops); 6777 6778 trace_create_file("buffer_total_size_kb", 0444, d_tracer, 6779 tr, &tracing_total_entries_fops); 6780 6781 trace_create_file("free_buffer", 0200, d_tracer, 6782 tr, &tracing_free_buffer_fops); 6783 6784 trace_create_file("trace_marker", 0220, d_tracer, 6785 tr, &tracing_mark_fops); 6786 6787 trace_create_file("trace_clock", 0644, d_tracer, tr, 6788 &trace_clock_fops); 6789 6790 trace_create_file("tracing_on", 0644, d_tracer, 6791 tr, &rb_simple_fops); 6792 6793 create_trace_options_dir(tr); 6794 6795 #ifdef CONFIG_TRACER_MAX_TRACE 6796 trace_create_file("tracing_max_latency", 0644, d_tracer, 6797 &tr->max_latency, &tracing_max_lat_fops); 6798 #endif 6799 6800 if (ftrace_create_function_files(tr, d_tracer)) 6801 WARN(1, "Could not allocate function filter files"); 6802 6803 #ifdef CONFIG_TRACER_SNAPSHOT 6804 trace_create_file("snapshot", 0644, d_tracer, 6805 tr, &snapshot_fops); 6806 #endif 6807 6808 for_each_tracing_cpu(cpu) 6809 tracing_init_tracefs_percpu(tr, cpu); 6810 6811 } 6812 6813 static struct vfsmount *trace_automount(void *ingore) 6814 { 6815 struct vfsmount *mnt; 6816 struct file_system_type *type; 6817 6818 /* 6819 * To maintain backward compatibility for tools that mount 6820 * debugfs to get to the tracing facility, tracefs is automatically 6821 * mounted to the debugfs/tracing directory. 6822 */ 6823 type = get_fs_type("tracefs"); 6824 if (!type) 6825 return NULL; 6826 mnt = vfs_kern_mount(type, 0, "tracefs", NULL); 6827 put_filesystem(type); 6828 if (IS_ERR(mnt)) 6829 return NULL; 6830 mntget(mnt); 6831 6832 return mnt; 6833 } 6834 6835 /** 6836 * tracing_init_dentry - initialize top level trace array 6837 * 6838 * This is called when creating files or directories in the tracing 6839 * directory. It is called via fs_initcall() by any of the boot up code 6840 * and expects to return the dentry of the top level tracing directory. 6841 */ 6842 struct dentry *tracing_init_dentry(void) 6843 { 6844 struct trace_array *tr = &global_trace; 6845 6846 /* The top level trace array uses NULL as parent */ 6847 if (tr->dir) 6848 return NULL; 6849 6850 if (WARN_ON(!debugfs_initialized())) 6851 return ERR_PTR(-ENODEV); 6852 6853 /* 6854 * As there may still be users that expect the tracing 6855 * files to exist in debugfs/tracing, we must automount 6856 * the tracefs file system there, so older tools still 6857 * work with the newer kerenl. 6858 */ 6859 tr->dir = debugfs_create_automount("tracing", NULL, 6860 trace_automount, NULL); 6861 if (!tr->dir) { 6862 pr_warn_once("Could not create debugfs directory 'tracing'\n"); 6863 return ERR_PTR(-ENOMEM); 6864 } 6865 6866 return NULL; 6867 } 6868 6869 extern struct trace_enum_map *__start_ftrace_enum_maps[]; 6870 extern struct trace_enum_map *__stop_ftrace_enum_maps[]; 6871 6872 static void __init trace_enum_init(void) 6873 { 6874 int len; 6875 6876 len = __stop_ftrace_enum_maps - __start_ftrace_enum_maps; 6877 trace_insert_enum_map(NULL, __start_ftrace_enum_maps, len); 6878 } 6879 6880 #ifdef CONFIG_MODULES 6881 static void trace_module_add_enums(struct module *mod) 6882 { 6883 if (!mod->num_trace_enums) 6884 return; 6885 6886 /* 6887 * Modules with bad taint do not have events created, do 6888 * not bother with enums either. 6889 */ 6890 if (trace_module_has_bad_taint(mod)) 6891 return; 6892 6893 trace_insert_enum_map(mod, mod->trace_enums, mod->num_trace_enums); 6894 } 6895 6896 #ifdef CONFIG_TRACE_ENUM_MAP_FILE 6897 static void trace_module_remove_enums(struct module *mod) 6898 { 6899 union trace_enum_map_item *map; 6900 union trace_enum_map_item **last = &trace_enum_maps; 6901 6902 if (!mod->num_trace_enums) 6903 return; 6904 6905 mutex_lock(&trace_enum_mutex); 6906 6907 map = trace_enum_maps; 6908 6909 while (map) { 6910 if (map->head.mod == mod) 6911 break; 6912 map = trace_enum_jmp_to_tail(map); 6913 last = &map->tail.next; 6914 map = map->tail.next; 6915 } 6916 if (!map) 6917 goto out; 6918 6919 *last = trace_enum_jmp_to_tail(map)->tail.next; 6920 kfree(map); 6921 out: 6922 mutex_unlock(&trace_enum_mutex); 6923 } 6924 #else 6925 static inline void trace_module_remove_enums(struct module *mod) { } 6926 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */ 6927 6928 static int trace_module_notify(struct notifier_block *self, 6929 unsigned long val, void *data) 6930 { 6931 struct module *mod = data; 6932 6933 switch (val) { 6934 case MODULE_STATE_COMING: 6935 trace_module_add_enums(mod); 6936 break; 6937 case MODULE_STATE_GOING: 6938 trace_module_remove_enums(mod); 6939 break; 6940 } 6941 6942 return 0; 6943 } 6944 6945 static struct notifier_block trace_module_nb = { 6946 .notifier_call = trace_module_notify, 6947 .priority = 0, 6948 }; 6949 #endif /* CONFIG_MODULES */ 6950 6951 static __init int tracer_init_tracefs(void) 6952 { 6953 struct dentry *d_tracer; 6954 6955 trace_access_lock_init(); 6956 6957 d_tracer = tracing_init_dentry(); 6958 if (IS_ERR(d_tracer)) 6959 return 0; 6960 6961 init_tracer_tracefs(&global_trace, d_tracer); 6962 6963 trace_create_file("tracing_thresh", 0644, d_tracer, 6964 &global_trace, &tracing_thresh_fops); 6965 6966 trace_create_file("README", 0444, d_tracer, 6967 NULL, &tracing_readme_fops); 6968 6969 trace_create_file("saved_cmdlines", 0444, d_tracer, 6970 NULL, &tracing_saved_cmdlines_fops); 6971 6972 trace_create_file("saved_cmdlines_size", 0644, d_tracer, 6973 NULL, &tracing_saved_cmdlines_size_fops); 6974 6975 trace_enum_init(); 6976 6977 trace_create_enum_file(d_tracer); 6978 6979 #ifdef CONFIG_MODULES 6980 register_module_notifier(&trace_module_nb); 6981 #endif 6982 6983 #ifdef CONFIG_DYNAMIC_FTRACE 6984 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer, 6985 &ftrace_update_tot_cnt, &tracing_dyn_info_fops); 6986 #endif 6987 6988 create_trace_instances(d_tracer); 6989 6990 update_tracer_options(&global_trace); 6991 6992 return 0; 6993 } 6994 6995 static int trace_panic_handler(struct notifier_block *this, 6996 unsigned long event, void *unused) 6997 { 6998 if (ftrace_dump_on_oops) 6999 ftrace_dump(ftrace_dump_on_oops); 7000 return NOTIFY_OK; 7001 } 7002 7003 static struct notifier_block trace_panic_notifier = { 7004 .notifier_call = trace_panic_handler, 7005 .next = NULL, 7006 .priority = 150 /* priority: INT_MAX >= x >= 0 */ 7007 }; 7008 7009 static int trace_die_handler(struct notifier_block *self, 7010 unsigned long val, 7011 void *data) 7012 { 7013 switch (val) { 7014 case DIE_OOPS: 7015 if (ftrace_dump_on_oops) 7016 ftrace_dump(ftrace_dump_on_oops); 7017 break; 7018 default: 7019 break; 7020 } 7021 return NOTIFY_OK; 7022 } 7023 7024 static struct notifier_block trace_die_notifier = { 7025 .notifier_call = trace_die_handler, 7026 .priority = 200 7027 }; 7028 7029 /* 7030 * printk is set to max of 1024, we really don't need it that big. 7031 * Nothing should be printing 1000 characters anyway. 7032 */ 7033 #define TRACE_MAX_PRINT 1000 7034 7035 /* 7036 * Define here KERN_TRACE so that we have one place to modify 7037 * it if we decide to change what log level the ftrace dump 7038 * should be at. 7039 */ 7040 #define KERN_TRACE KERN_EMERG 7041 7042 void 7043 trace_printk_seq(struct trace_seq *s) 7044 { 7045 /* Probably should print a warning here. */ 7046 if (s->seq.len >= TRACE_MAX_PRINT) 7047 s->seq.len = TRACE_MAX_PRINT; 7048 7049 /* 7050 * More paranoid code. Although the buffer size is set to 7051 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just 7052 * an extra layer of protection. 7053 */ 7054 if (WARN_ON_ONCE(s->seq.len >= s->seq.size)) 7055 s->seq.len = s->seq.size - 1; 7056 7057 /* should be zero ended, but we are paranoid. */ 7058 s->buffer[s->seq.len] = 0; 7059 7060 printk(KERN_TRACE "%s", s->buffer); 7061 7062 trace_seq_init(s); 7063 } 7064 7065 void trace_init_global_iter(struct trace_iterator *iter) 7066 { 7067 iter->tr = &global_trace; 7068 iter->trace = iter->tr->current_trace; 7069 iter->cpu_file = RING_BUFFER_ALL_CPUS; 7070 iter->trace_buffer = &global_trace.trace_buffer; 7071 7072 if (iter->trace && iter->trace->open) 7073 iter->trace->open(iter); 7074 7075 /* Annotate start of buffers if we had overruns */ 7076 if (ring_buffer_overruns(iter->trace_buffer->buffer)) 7077 iter->iter_flags |= TRACE_FILE_ANNOTATE; 7078 7079 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 7080 if (trace_clocks[iter->tr->clock_id].in_ns) 7081 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 7082 } 7083 7084 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) 7085 { 7086 /* use static because iter can be a bit big for the stack */ 7087 static struct trace_iterator iter; 7088 static atomic_t dump_running; 7089 struct trace_array *tr = &global_trace; 7090 unsigned int old_userobj; 7091 unsigned long flags; 7092 int cnt = 0, cpu; 7093 7094 /* Only allow one dump user at a time. */ 7095 if (atomic_inc_return(&dump_running) != 1) { 7096 atomic_dec(&dump_running); 7097 return; 7098 } 7099 7100 /* 7101 * Always turn off tracing when we dump. 7102 * We don't need to show trace output of what happens 7103 * between multiple crashes. 7104 * 7105 * If the user does a sysrq-z, then they can re-enable 7106 * tracing with echo 1 > tracing_on. 7107 */ 7108 tracing_off(); 7109 7110 local_irq_save(flags); 7111 7112 /* Simulate the iterator */ 7113 trace_init_global_iter(&iter); 7114 7115 for_each_tracing_cpu(cpu) { 7116 atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled); 7117 } 7118 7119 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ; 7120 7121 /* don't look at user memory in panic mode */ 7122 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ; 7123 7124 switch (oops_dump_mode) { 7125 case DUMP_ALL: 7126 iter.cpu_file = RING_BUFFER_ALL_CPUS; 7127 break; 7128 case DUMP_ORIG: 7129 iter.cpu_file = raw_smp_processor_id(); 7130 break; 7131 case DUMP_NONE: 7132 goto out_enable; 7133 default: 7134 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n"); 7135 iter.cpu_file = RING_BUFFER_ALL_CPUS; 7136 } 7137 7138 printk(KERN_TRACE "Dumping ftrace buffer:\n"); 7139 7140 /* Did function tracer already get disabled? */ 7141 if (ftrace_is_dead()) { 7142 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n"); 7143 printk("# MAY BE MISSING FUNCTION EVENTS\n"); 7144 } 7145 7146 /* 7147 * We need to stop all tracing on all CPUS to read the 7148 * the next buffer. This is a bit expensive, but is 7149 * not done often. We fill all what we can read, 7150 * and then release the locks again. 7151 */ 7152 7153 while (!trace_empty(&iter)) { 7154 7155 if (!cnt) 7156 printk(KERN_TRACE "---------------------------------\n"); 7157 7158 cnt++; 7159 7160 /* reset all but tr, trace, and overruns */ 7161 memset(&iter.seq, 0, 7162 sizeof(struct trace_iterator) - 7163 offsetof(struct trace_iterator, seq)); 7164 iter.iter_flags |= TRACE_FILE_LAT_FMT; 7165 iter.pos = -1; 7166 7167 if (trace_find_next_entry_inc(&iter) != NULL) { 7168 int ret; 7169 7170 ret = print_trace_line(&iter); 7171 if (ret != TRACE_TYPE_NO_CONSUME) 7172 trace_consume(&iter); 7173 } 7174 touch_nmi_watchdog(); 7175 7176 trace_printk_seq(&iter.seq); 7177 } 7178 7179 if (!cnt) 7180 printk(KERN_TRACE " (ftrace buffer empty)\n"); 7181 else 7182 printk(KERN_TRACE "---------------------------------\n"); 7183 7184 out_enable: 7185 tr->trace_flags |= old_userobj; 7186 7187 for_each_tracing_cpu(cpu) { 7188 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled); 7189 } 7190 atomic_dec(&dump_running); 7191 local_irq_restore(flags); 7192 } 7193 EXPORT_SYMBOL_GPL(ftrace_dump); 7194 7195 __init static int tracer_alloc_buffers(void) 7196 { 7197 int ring_buf_size; 7198 int ret = -ENOMEM; 7199 7200 /* 7201 * Make sure we don't accidently add more trace options 7202 * than we have bits for. 7203 */ 7204 BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE); 7205 7206 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) 7207 goto out; 7208 7209 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL)) 7210 goto out_free_buffer_mask; 7211 7212 /* Only allocate trace_printk buffers if a trace_printk exists */ 7213 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt) 7214 /* Must be called before global_trace.buffer is allocated */ 7215 trace_printk_init_buffers(); 7216 7217 /* To save memory, keep the ring buffer size to its minimum */ 7218 if (ring_buffer_expanded) 7219 ring_buf_size = trace_buf_size; 7220 else 7221 ring_buf_size = 1; 7222 7223 cpumask_copy(tracing_buffer_mask, cpu_possible_mask); 7224 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask); 7225 7226 raw_spin_lock_init(&global_trace.start_lock); 7227 7228 /* Used for event triggers */ 7229 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE); 7230 if (!temp_buffer) 7231 goto out_free_cpumask; 7232 7233 if (trace_create_savedcmd() < 0) 7234 goto out_free_temp_buffer; 7235 7236 /* TODO: make the number of buffers hot pluggable with CPUS */ 7237 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) { 7238 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n"); 7239 WARN_ON(1); 7240 goto out_free_savedcmd; 7241 } 7242 7243 if (global_trace.buffer_disabled) 7244 tracing_off(); 7245 7246 if (trace_boot_clock) { 7247 ret = tracing_set_clock(&global_trace, trace_boot_clock); 7248 if (ret < 0) 7249 pr_warning("Trace clock %s not defined, going back to default\n", 7250 trace_boot_clock); 7251 } 7252 7253 /* 7254 * register_tracer() might reference current_trace, so it 7255 * needs to be set before we register anything. This is 7256 * just a bootstrap of current_trace anyway. 7257 */ 7258 global_trace.current_trace = &nop_trace; 7259 7260 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 7261 7262 ftrace_init_global_array_ops(&global_trace); 7263 7264 init_trace_flags_index(&global_trace); 7265 7266 register_tracer(&nop_trace); 7267 7268 /* All seems OK, enable tracing */ 7269 tracing_disabled = 0; 7270 7271 atomic_notifier_chain_register(&panic_notifier_list, 7272 &trace_panic_notifier); 7273 7274 register_die_notifier(&trace_die_notifier); 7275 7276 global_trace.flags = TRACE_ARRAY_FL_GLOBAL; 7277 7278 INIT_LIST_HEAD(&global_trace.systems); 7279 INIT_LIST_HEAD(&global_trace.events); 7280 list_add(&global_trace.list, &ftrace_trace_arrays); 7281 7282 apply_trace_boot_options(); 7283 7284 register_snapshot_cmd(); 7285 7286 return 0; 7287 7288 out_free_savedcmd: 7289 free_saved_cmdlines_buffer(savedcmd); 7290 out_free_temp_buffer: 7291 ring_buffer_free(temp_buffer); 7292 out_free_cpumask: 7293 free_cpumask_var(global_trace.tracing_cpumask); 7294 out_free_buffer_mask: 7295 free_cpumask_var(tracing_buffer_mask); 7296 out: 7297 return ret; 7298 } 7299 7300 void __init trace_init(void) 7301 { 7302 if (tracepoint_printk) { 7303 tracepoint_print_iter = 7304 kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL); 7305 if (WARN_ON(!tracepoint_print_iter)) 7306 tracepoint_printk = 0; 7307 } 7308 tracer_alloc_buffers(); 7309 trace_event_init(); 7310 } 7311 7312 __init static int clear_boot_tracer(void) 7313 { 7314 /* 7315 * The default tracer at boot buffer is an init section. 7316 * This function is called in lateinit. If we did not 7317 * find the boot tracer, then clear it out, to prevent 7318 * later registration from accessing the buffer that is 7319 * about to be freed. 7320 */ 7321 if (!default_bootup_tracer) 7322 return 0; 7323 7324 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n", 7325 default_bootup_tracer); 7326 default_bootup_tracer = NULL; 7327 7328 return 0; 7329 } 7330 7331 fs_initcall(tracer_init_tracefs); 7332 late_initcall(clear_boot_tracer); 7333