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