1 /* 2 * ring buffer based function tracer 3 * 4 * Copyright (C) 2007-2008 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 William Lee Irwin III 13 */ 14 #include <linux/utsrelease.h> 15 #include <linux/kallsyms.h> 16 #include <linux/seq_file.h> 17 #include <linux/notifier.h> 18 #include <linux/debugfs.h> 19 #include <linux/pagemap.h> 20 #include <linux/hardirq.h> 21 #include <linux/linkage.h> 22 #include <linux/uaccess.h> 23 #include <linux/ftrace.h> 24 #include <linux/module.h> 25 #include <linux/percpu.h> 26 #include <linux/kdebug.h> 27 #include <linux/ctype.h> 28 #include <linux/init.h> 29 #include <linux/poll.h> 30 #include <linux/gfp.h> 31 #include <linux/fs.h> 32 #include <linux/kprobes.h> 33 #include <linux/writeback.h> 34 35 #include <linux/stacktrace.h> 36 #include <linux/ring_buffer.h> 37 #include <linux/irqflags.h> 38 39 #include "trace.h" 40 41 #define TRACE_BUFFER_FLAGS (RB_FL_OVERWRITE) 42 43 unsigned long __read_mostly tracing_max_latency = (cycle_t)ULONG_MAX; 44 unsigned long __read_mostly tracing_thresh; 45 46 static DEFINE_PER_CPU(local_t, ftrace_cpu_disabled); 47 48 static inline void ftrace_disable_cpu(void) 49 { 50 preempt_disable(); 51 local_inc(&__get_cpu_var(ftrace_cpu_disabled)); 52 } 53 54 static inline void ftrace_enable_cpu(void) 55 { 56 local_dec(&__get_cpu_var(ftrace_cpu_disabled)); 57 preempt_enable(); 58 } 59 60 static cpumask_t __read_mostly tracing_buffer_mask; 61 62 #define for_each_tracing_cpu(cpu) \ 63 for_each_cpu_mask(cpu, tracing_buffer_mask) 64 65 static int tracing_disabled = 1; 66 67 long 68 ns2usecs(cycle_t nsec) 69 { 70 nsec += 500; 71 do_div(nsec, 1000); 72 return nsec; 73 } 74 75 cycle_t ftrace_now(int cpu) 76 { 77 u64 ts = ring_buffer_time_stamp(cpu); 78 ring_buffer_normalize_time_stamp(cpu, &ts); 79 return ts; 80 } 81 82 /* 83 * The global_trace is the descriptor that holds the tracing 84 * buffers for the live tracing. For each CPU, it contains 85 * a link list of pages that will store trace entries. The 86 * page descriptor of the pages in the memory is used to hold 87 * the link list by linking the lru item in the page descriptor 88 * to each of the pages in the buffer per CPU. 89 * 90 * For each active CPU there is a data field that holds the 91 * pages for the buffer for that CPU. Each CPU has the same number 92 * of pages allocated for its buffer. 93 */ 94 static struct trace_array global_trace; 95 96 static DEFINE_PER_CPU(struct trace_array_cpu, global_trace_cpu); 97 98 /* 99 * The max_tr is used to snapshot the global_trace when a maximum 100 * latency is reached. Some tracers will use this to store a maximum 101 * trace while it continues examining live traces. 102 * 103 * The buffers for the max_tr are set up the same as the global_trace. 104 * When a snapshot is taken, the link list of the max_tr is swapped 105 * with the link list of the global_trace and the buffers are reset for 106 * the global_trace so the tracing can continue. 107 */ 108 static struct trace_array max_tr; 109 110 static DEFINE_PER_CPU(struct trace_array_cpu, max_data); 111 112 /* tracer_enabled is used to toggle activation of a tracer */ 113 static int tracer_enabled = 1; 114 115 /* function tracing enabled */ 116 int ftrace_function_enabled; 117 118 /* 119 * trace_buf_size is the size in bytes that is allocated 120 * for a buffer. Note, the number of bytes is always rounded 121 * to page size. 122 * 123 * This number is purposely set to a low number of 16384. 124 * If the dump on oops happens, it will be much appreciated 125 * to not have to wait for all that output. Anyway this can be 126 * boot time and run time configurable. 127 */ 128 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */ 129 130 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT; 131 132 /* trace_types holds a link list of available tracers. */ 133 static struct tracer *trace_types __read_mostly; 134 135 /* current_trace points to the tracer that is currently active */ 136 static struct tracer *current_trace __read_mostly; 137 138 /* 139 * max_tracer_type_len is used to simplify the allocating of 140 * buffers to read userspace tracer names. We keep track of 141 * the longest tracer name registered. 142 */ 143 static int max_tracer_type_len; 144 145 /* 146 * trace_types_lock is used to protect the trace_types list. 147 * This lock is also used to keep user access serialized. 148 * Accesses from userspace will grab this lock while userspace 149 * activities happen inside the kernel. 150 */ 151 static DEFINE_MUTEX(trace_types_lock); 152 153 /* trace_wait is a waitqueue for tasks blocked on trace_poll */ 154 static DECLARE_WAIT_QUEUE_HEAD(trace_wait); 155 156 /* trace_flags holds iter_ctrl options */ 157 unsigned long trace_flags = TRACE_ITER_PRINT_PARENT; 158 159 /** 160 * trace_wake_up - wake up tasks waiting for trace input 161 * 162 * Simply wakes up any task that is blocked on the trace_wait 163 * queue. These is used with trace_poll for tasks polling the trace. 164 */ 165 void trace_wake_up(void) 166 { 167 /* 168 * The runqueue_is_locked() can fail, but this is the best we 169 * have for now: 170 */ 171 if (!(trace_flags & TRACE_ITER_BLOCK) && !runqueue_is_locked()) 172 wake_up(&trace_wait); 173 } 174 175 static int __init set_buf_size(char *str) 176 { 177 unsigned long buf_size; 178 int ret; 179 180 if (!str) 181 return 0; 182 ret = strict_strtoul(str, 0, &buf_size); 183 /* nr_entries can not be zero */ 184 if (ret < 0 || buf_size == 0) 185 return 0; 186 trace_buf_size = buf_size; 187 return 1; 188 } 189 __setup("trace_buf_size=", set_buf_size); 190 191 unsigned long nsecs_to_usecs(unsigned long nsecs) 192 { 193 return nsecs / 1000; 194 } 195 196 /* 197 * TRACE_ITER_SYM_MASK masks the options in trace_flags that 198 * control the output of kernel symbols. 199 */ 200 #define TRACE_ITER_SYM_MASK \ 201 (TRACE_ITER_PRINT_PARENT|TRACE_ITER_SYM_OFFSET|TRACE_ITER_SYM_ADDR) 202 203 /* These must match the bit postions in trace_iterator_flags */ 204 static const char *trace_options[] = { 205 "print-parent", 206 "sym-offset", 207 "sym-addr", 208 "verbose", 209 "raw", 210 "hex", 211 "bin", 212 "block", 213 "stacktrace", 214 "sched-tree", 215 "ftrace_printk", 216 NULL 217 }; 218 219 /* 220 * ftrace_max_lock is used to protect the swapping of buffers 221 * when taking a max snapshot. The buffers themselves are 222 * protected by per_cpu spinlocks. But the action of the swap 223 * needs its own lock. 224 * 225 * This is defined as a raw_spinlock_t in order to help 226 * with performance when lockdep debugging is enabled. 227 */ 228 static raw_spinlock_t ftrace_max_lock = 229 (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; 230 231 /* 232 * Copy the new maximum trace into the separate maximum-trace 233 * structure. (this way the maximum trace is permanently saved, 234 * for later retrieval via /debugfs/tracing/latency_trace) 235 */ 236 static void 237 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 238 { 239 struct trace_array_cpu *data = tr->data[cpu]; 240 241 max_tr.cpu = cpu; 242 max_tr.time_start = data->preempt_timestamp; 243 244 data = max_tr.data[cpu]; 245 data->saved_latency = tracing_max_latency; 246 247 memcpy(data->comm, tsk->comm, TASK_COMM_LEN); 248 data->pid = tsk->pid; 249 data->uid = tsk->uid; 250 data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; 251 data->policy = tsk->policy; 252 data->rt_priority = tsk->rt_priority; 253 254 /* record this tasks comm */ 255 tracing_record_cmdline(current); 256 } 257 258 /** 259 * trace_seq_printf - sequence printing of trace information 260 * @s: trace sequence descriptor 261 * @fmt: printf format string 262 * 263 * The tracer may use either sequence operations or its own 264 * copy to user routines. To simplify formating of a trace 265 * trace_seq_printf is used to store strings into a special 266 * buffer (@s). Then the output may be either used by 267 * the sequencer or pulled into another buffer. 268 */ 269 int 270 trace_seq_printf(struct trace_seq *s, const char *fmt, ...) 271 { 272 int len = (PAGE_SIZE - 1) - s->len; 273 va_list ap; 274 int ret; 275 276 if (!len) 277 return 0; 278 279 va_start(ap, fmt); 280 ret = vsnprintf(s->buffer + s->len, len, fmt, ap); 281 va_end(ap); 282 283 /* If we can't write it all, don't bother writing anything */ 284 if (ret >= len) 285 return 0; 286 287 s->len += ret; 288 289 return len; 290 } 291 292 /** 293 * trace_seq_puts - trace sequence printing of simple string 294 * @s: trace sequence descriptor 295 * @str: simple string to record 296 * 297 * The tracer may use either the sequence operations or its own 298 * copy to user routines. This function records a simple string 299 * into a special buffer (@s) for later retrieval by a sequencer 300 * or other mechanism. 301 */ 302 static int 303 trace_seq_puts(struct trace_seq *s, const char *str) 304 { 305 int len = strlen(str); 306 307 if (len > ((PAGE_SIZE - 1) - s->len)) 308 return 0; 309 310 memcpy(s->buffer + s->len, str, len); 311 s->len += len; 312 313 return len; 314 } 315 316 static int 317 trace_seq_putc(struct trace_seq *s, unsigned char c) 318 { 319 if (s->len >= (PAGE_SIZE - 1)) 320 return 0; 321 322 s->buffer[s->len++] = c; 323 324 return 1; 325 } 326 327 static int 328 trace_seq_putmem(struct trace_seq *s, void *mem, size_t len) 329 { 330 if (len > ((PAGE_SIZE - 1) - s->len)) 331 return 0; 332 333 memcpy(s->buffer + s->len, mem, len); 334 s->len += len; 335 336 return len; 337 } 338 339 #define MAX_MEMHEX_BYTES 8 340 #define HEX_CHARS (MAX_MEMHEX_BYTES*2 + 1) 341 342 static int 343 trace_seq_putmem_hex(struct trace_seq *s, void *mem, size_t len) 344 { 345 unsigned char hex[HEX_CHARS]; 346 unsigned char *data = mem; 347 int i, j; 348 349 #ifdef __BIG_ENDIAN 350 for (i = 0, j = 0; i < len; i++) { 351 #else 352 for (i = len-1, j = 0; i >= 0; i--) { 353 #endif 354 hex[j++] = hex_asc_hi(data[i]); 355 hex[j++] = hex_asc_lo(data[i]); 356 } 357 hex[j++] = ' '; 358 359 return trace_seq_putmem(s, hex, j); 360 } 361 362 static void 363 trace_seq_reset(struct trace_seq *s) 364 { 365 s->len = 0; 366 s->readpos = 0; 367 } 368 369 ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, size_t cnt) 370 { 371 int len; 372 int ret; 373 374 if (s->len <= s->readpos) 375 return -EBUSY; 376 377 len = s->len - s->readpos; 378 if (cnt > len) 379 cnt = len; 380 ret = copy_to_user(ubuf, s->buffer + s->readpos, cnt); 381 if (ret) 382 return -EFAULT; 383 384 s->readpos += len; 385 return cnt; 386 } 387 388 static void 389 trace_print_seq(struct seq_file *m, struct trace_seq *s) 390 { 391 int len = s->len >= PAGE_SIZE ? PAGE_SIZE - 1 : s->len; 392 393 s->buffer[len] = 0; 394 seq_puts(m, s->buffer); 395 396 trace_seq_reset(s); 397 } 398 399 /** 400 * update_max_tr - snapshot all trace buffers from global_trace to max_tr 401 * @tr: tracer 402 * @tsk: the task with the latency 403 * @cpu: The cpu that initiated the trace. 404 * 405 * Flip the buffers between the @tr and the max_tr and record information 406 * about which task was the cause of this latency. 407 */ 408 void 409 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 410 { 411 struct ring_buffer *buf = tr->buffer; 412 413 WARN_ON_ONCE(!irqs_disabled()); 414 __raw_spin_lock(&ftrace_max_lock); 415 416 tr->buffer = max_tr.buffer; 417 max_tr.buffer = buf; 418 419 ftrace_disable_cpu(); 420 ring_buffer_reset(tr->buffer); 421 ftrace_enable_cpu(); 422 423 __update_max_tr(tr, tsk, cpu); 424 __raw_spin_unlock(&ftrace_max_lock); 425 } 426 427 /** 428 * update_max_tr_single - only copy one trace over, and reset the rest 429 * @tr - tracer 430 * @tsk - task with the latency 431 * @cpu - the cpu of the buffer to copy. 432 * 433 * Flip the trace of a single CPU buffer between the @tr and the max_tr. 434 */ 435 void 436 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) 437 { 438 int ret; 439 440 WARN_ON_ONCE(!irqs_disabled()); 441 __raw_spin_lock(&ftrace_max_lock); 442 443 ftrace_disable_cpu(); 444 445 ring_buffer_reset(max_tr.buffer); 446 ret = ring_buffer_swap_cpu(max_tr.buffer, tr->buffer, cpu); 447 448 ftrace_enable_cpu(); 449 450 WARN_ON_ONCE(ret); 451 452 __update_max_tr(tr, tsk, cpu); 453 __raw_spin_unlock(&ftrace_max_lock); 454 } 455 456 /** 457 * register_tracer - register a tracer with the ftrace system. 458 * @type - the plugin for the tracer 459 * 460 * Register a new plugin tracer. 461 */ 462 int register_tracer(struct tracer *type) 463 { 464 struct tracer *t; 465 int len; 466 int ret = 0; 467 468 if (!type->name) { 469 pr_info("Tracer must have a name\n"); 470 return -1; 471 } 472 473 mutex_lock(&trace_types_lock); 474 for (t = trace_types; t; t = t->next) { 475 if (strcmp(type->name, t->name) == 0) { 476 /* already found */ 477 pr_info("Trace %s already registered\n", 478 type->name); 479 ret = -1; 480 goto out; 481 } 482 } 483 484 #ifdef CONFIG_FTRACE_STARTUP_TEST 485 if (type->selftest) { 486 struct tracer *saved_tracer = current_trace; 487 struct trace_array *tr = &global_trace; 488 int saved_ctrl = tr->ctrl; 489 int i; 490 /* 491 * Run a selftest on this tracer. 492 * Here we reset the trace buffer, and set the current 493 * tracer to be this tracer. The tracer can then run some 494 * internal tracing to verify that everything is in order. 495 * If we fail, we do not register this tracer. 496 */ 497 for_each_tracing_cpu(i) { 498 tracing_reset(tr, i); 499 } 500 current_trace = type; 501 tr->ctrl = 0; 502 /* the test is responsible for initializing and enabling */ 503 pr_info("Testing tracer %s: ", type->name); 504 ret = type->selftest(type, tr); 505 /* the test is responsible for resetting too */ 506 current_trace = saved_tracer; 507 tr->ctrl = saved_ctrl; 508 if (ret) { 509 printk(KERN_CONT "FAILED!\n"); 510 goto out; 511 } 512 /* Only reset on passing, to avoid touching corrupted buffers */ 513 for_each_tracing_cpu(i) { 514 tracing_reset(tr, i); 515 } 516 printk(KERN_CONT "PASSED\n"); 517 } 518 #endif 519 520 type->next = trace_types; 521 trace_types = type; 522 len = strlen(type->name); 523 if (len > max_tracer_type_len) 524 max_tracer_type_len = len; 525 526 out: 527 mutex_unlock(&trace_types_lock); 528 529 return ret; 530 } 531 532 void unregister_tracer(struct tracer *type) 533 { 534 struct tracer **t; 535 int len; 536 537 mutex_lock(&trace_types_lock); 538 for (t = &trace_types; *t; t = &(*t)->next) { 539 if (*t == type) 540 goto found; 541 } 542 pr_info("Trace %s not registered\n", type->name); 543 goto out; 544 545 found: 546 *t = (*t)->next; 547 if (strlen(type->name) != max_tracer_type_len) 548 goto out; 549 550 max_tracer_type_len = 0; 551 for (t = &trace_types; *t; t = &(*t)->next) { 552 len = strlen((*t)->name); 553 if (len > max_tracer_type_len) 554 max_tracer_type_len = len; 555 } 556 out: 557 mutex_unlock(&trace_types_lock); 558 } 559 560 void tracing_reset(struct trace_array *tr, int cpu) 561 { 562 ftrace_disable_cpu(); 563 ring_buffer_reset_cpu(tr->buffer, cpu); 564 ftrace_enable_cpu(); 565 } 566 567 #define SAVED_CMDLINES 128 568 static unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1]; 569 static unsigned map_cmdline_to_pid[SAVED_CMDLINES]; 570 static char saved_cmdlines[SAVED_CMDLINES][TASK_COMM_LEN]; 571 static int cmdline_idx; 572 static DEFINE_SPINLOCK(trace_cmdline_lock); 573 574 /* temporary disable recording */ 575 atomic_t trace_record_cmdline_disabled __read_mostly; 576 577 static void trace_init_cmdlines(void) 578 { 579 memset(&map_pid_to_cmdline, -1, sizeof(map_pid_to_cmdline)); 580 memset(&map_cmdline_to_pid, -1, sizeof(map_cmdline_to_pid)); 581 cmdline_idx = 0; 582 } 583 584 void trace_stop_cmdline_recording(void); 585 586 static void trace_save_cmdline(struct task_struct *tsk) 587 { 588 unsigned map; 589 unsigned idx; 590 591 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) 592 return; 593 594 /* 595 * It's not the end of the world if we don't get 596 * the lock, but we also don't want to spin 597 * nor do we want to disable interrupts, 598 * so if we miss here, then better luck next time. 599 */ 600 if (!spin_trylock(&trace_cmdline_lock)) 601 return; 602 603 idx = map_pid_to_cmdline[tsk->pid]; 604 if (idx >= SAVED_CMDLINES) { 605 idx = (cmdline_idx + 1) % SAVED_CMDLINES; 606 607 map = map_cmdline_to_pid[idx]; 608 if (map <= PID_MAX_DEFAULT) 609 map_pid_to_cmdline[map] = (unsigned)-1; 610 611 map_pid_to_cmdline[tsk->pid] = idx; 612 613 cmdline_idx = idx; 614 } 615 616 memcpy(&saved_cmdlines[idx], tsk->comm, TASK_COMM_LEN); 617 618 spin_unlock(&trace_cmdline_lock); 619 } 620 621 static char *trace_find_cmdline(int pid) 622 { 623 char *cmdline = "<...>"; 624 unsigned map; 625 626 if (!pid) 627 return "<idle>"; 628 629 if (pid > PID_MAX_DEFAULT) 630 goto out; 631 632 map = map_pid_to_cmdline[pid]; 633 if (map >= SAVED_CMDLINES) 634 goto out; 635 636 cmdline = saved_cmdlines[map]; 637 638 out: 639 return cmdline; 640 } 641 642 void tracing_record_cmdline(struct task_struct *tsk) 643 { 644 if (atomic_read(&trace_record_cmdline_disabled)) 645 return; 646 647 trace_save_cmdline(tsk); 648 } 649 650 void 651 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, 652 int pc) 653 { 654 struct task_struct *tsk = current; 655 656 entry->preempt_count = pc & 0xff; 657 entry->pid = (tsk) ? tsk->pid : 0; 658 entry->flags = 659 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT 660 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | 661 #else 662 TRACE_FLAG_IRQS_NOSUPPORT | 663 #endif 664 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | 665 ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) | 666 (need_resched() ? TRACE_FLAG_NEED_RESCHED : 0); 667 } 668 669 void 670 trace_function(struct trace_array *tr, struct trace_array_cpu *data, 671 unsigned long ip, unsigned long parent_ip, unsigned long flags, 672 int pc) 673 { 674 struct ring_buffer_event *event; 675 struct ftrace_entry *entry; 676 unsigned long irq_flags; 677 678 /* If we are reading the ring buffer, don't trace */ 679 if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) 680 return; 681 682 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), 683 &irq_flags); 684 if (!event) 685 return; 686 entry = ring_buffer_event_data(event); 687 tracing_generic_entry_update(&entry->ent, flags, pc); 688 entry->ent.type = TRACE_FN; 689 entry->ip = ip; 690 entry->parent_ip = parent_ip; 691 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 692 } 693 694 void 695 ftrace(struct trace_array *tr, struct trace_array_cpu *data, 696 unsigned long ip, unsigned long parent_ip, unsigned long flags, 697 int pc) 698 { 699 if (likely(!atomic_read(&data->disabled))) 700 trace_function(tr, data, ip, parent_ip, flags, pc); 701 } 702 703 static void ftrace_trace_stack(struct trace_array *tr, 704 struct trace_array_cpu *data, 705 unsigned long flags, 706 int skip, int pc) 707 { 708 #ifdef CONFIG_STACKTRACE 709 struct ring_buffer_event *event; 710 struct stack_entry *entry; 711 struct stack_trace trace; 712 unsigned long irq_flags; 713 714 if (!(trace_flags & TRACE_ITER_STACKTRACE)) 715 return; 716 717 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), 718 &irq_flags); 719 if (!event) 720 return; 721 entry = ring_buffer_event_data(event); 722 tracing_generic_entry_update(&entry->ent, flags, pc); 723 entry->ent.type = TRACE_STACK; 724 725 memset(&entry->caller, 0, sizeof(entry->caller)); 726 727 trace.nr_entries = 0; 728 trace.max_entries = FTRACE_STACK_ENTRIES; 729 trace.skip = skip; 730 trace.entries = entry->caller; 731 732 save_stack_trace(&trace); 733 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 734 #endif 735 } 736 737 void __trace_stack(struct trace_array *tr, 738 struct trace_array_cpu *data, 739 unsigned long flags, 740 int skip) 741 { 742 ftrace_trace_stack(tr, data, flags, skip, preempt_count()); 743 } 744 745 static void 746 ftrace_trace_special(void *__tr, void *__data, 747 unsigned long arg1, unsigned long arg2, unsigned long arg3, 748 int pc) 749 { 750 struct ring_buffer_event *event; 751 struct trace_array_cpu *data = __data; 752 struct trace_array *tr = __tr; 753 struct special_entry *entry; 754 unsigned long irq_flags; 755 756 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), 757 &irq_flags); 758 if (!event) 759 return; 760 entry = ring_buffer_event_data(event); 761 tracing_generic_entry_update(&entry->ent, 0, pc); 762 entry->ent.type = TRACE_SPECIAL; 763 entry->arg1 = arg1; 764 entry->arg2 = arg2; 765 entry->arg3 = arg3; 766 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 767 ftrace_trace_stack(tr, data, irq_flags, 4, pc); 768 769 trace_wake_up(); 770 } 771 772 void 773 __trace_special(void *__tr, void *__data, 774 unsigned long arg1, unsigned long arg2, unsigned long arg3) 775 { 776 ftrace_trace_special(__tr, __data, arg1, arg2, arg3, preempt_count()); 777 } 778 779 void 780 tracing_sched_switch_trace(struct trace_array *tr, 781 struct trace_array_cpu *data, 782 struct task_struct *prev, 783 struct task_struct *next, 784 unsigned long flags, int pc) 785 { 786 struct ring_buffer_event *event; 787 struct ctx_switch_entry *entry; 788 unsigned long irq_flags; 789 790 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), 791 &irq_flags); 792 if (!event) 793 return; 794 entry = ring_buffer_event_data(event); 795 tracing_generic_entry_update(&entry->ent, flags, pc); 796 entry->ent.type = TRACE_CTX; 797 entry->prev_pid = prev->pid; 798 entry->prev_prio = prev->prio; 799 entry->prev_state = prev->state; 800 entry->next_pid = next->pid; 801 entry->next_prio = next->prio; 802 entry->next_state = next->state; 803 entry->next_cpu = task_cpu(next); 804 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 805 ftrace_trace_stack(tr, data, flags, 5, pc); 806 } 807 808 void 809 tracing_sched_wakeup_trace(struct trace_array *tr, 810 struct trace_array_cpu *data, 811 struct task_struct *wakee, 812 struct task_struct *curr, 813 unsigned long flags, int pc) 814 { 815 struct ring_buffer_event *event; 816 struct ctx_switch_entry *entry; 817 unsigned long irq_flags; 818 819 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), 820 &irq_flags); 821 if (!event) 822 return; 823 entry = ring_buffer_event_data(event); 824 tracing_generic_entry_update(&entry->ent, flags, pc); 825 entry->ent.type = TRACE_WAKE; 826 entry->prev_pid = curr->pid; 827 entry->prev_prio = curr->prio; 828 entry->prev_state = curr->state; 829 entry->next_pid = wakee->pid; 830 entry->next_prio = wakee->prio; 831 entry->next_state = wakee->state; 832 entry->next_cpu = task_cpu(wakee); 833 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 834 ftrace_trace_stack(tr, data, flags, 6, pc); 835 836 trace_wake_up(); 837 } 838 839 void 840 ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) 841 { 842 struct trace_array *tr = &global_trace; 843 struct trace_array_cpu *data; 844 int cpu; 845 int pc; 846 847 if (tracing_disabled || !tr->ctrl) 848 return; 849 850 pc = preempt_count(); 851 preempt_disable_notrace(); 852 cpu = raw_smp_processor_id(); 853 data = tr->data[cpu]; 854 855 if (likely(!atomic_read(&data->disabled))) 856 ftrace_trace_special(tr, data, arg1, arg2, arg3, pc); 857 858 preempt_enable_notrace(); 859 } 860 861 #ifdef CONFIG_FUNCTION_TRACER 862 static void 863 function_trace_call(unsigned long ip, unsigned long parent_ip) 864 { 865 struct trace_array *tr = &global_trace; 866 struct trace_array_cpu *data; 867 unsigned long flags; 868 long disabled; 869 int cpu, resched; 870 int pc; 871 872 if (unlikely(!ftrace_function_enabled)) 873 return; 874 875 pc = preempt_count(); 876 resched = need_resched(); 877 preempt_disable_notrace(); 878 local_save_flags(flags); 879 cpu = raw_smp_processor_id(); 880 data = tr->data[cpu]; 881 disabled = atomic_inc_return(&data->disabled); 882 883 if (likely(disabled == 1)) 884 trace_function(tr, data, ip, parent_ip, flags, pc); 885 886 atomic_dec(&data->disabled); 887 if (resched) 888 preempt_enable_no_resched_notrace(); 889 else 890 preempt_enable_notrace(); 891 } 892 893 static struct ftrace_ops trace_ops __read_mostly = 894 { 895 .func = function_trace_call, 896 }; 897 898 void tracing_start_function_trace(void) 899 { 900 ftrace_function_enabled = 0; 901 register_ftrace_function(&trace_ops); 902 if (tracer_enabled) 903 ftrace_function_enabled = 1; 904 } 905 906 void tracing_stop_function_trace(void) 907 { 908 ftrace_function_enabled = 0; 909 unregister_ftrace_function(&trace_ops); 910 } 911 #endif 912 913 enum trace_file_type { 914 TRACE_FILE_LAT_FMT = 1, 915 }; 916 917 static void trace_iterator_increment(struct trace_iterator *iter, int cpu) 918 { 919 /* Don't allow ftrace to trace into the ring buffers */ 920 ftrace_disable_cpu(); 921 922 iter->idx++; 923 if (iter->buffer_iter[iter->cpu]) 924 ring_buffer_read(iter->buffer_iter[iter->cpu], NULL); 925 926 ftrace_enable_cpu(); 927 } 928 929 static struct trace_entry * 930 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts) 931 { 932 struct ring_buffer_event *event; 933 struct ring_buffer_iter *buf_iter = iter->buffer_iter[cpu]; 934 935 /* Don't allow ftrace to trace into the ring buffers */ 936 ftrace_disable_cpu(); 937 938 if (buf_iter) 939 event = ring_buffer_iter_peek(buf_iter, ts); 940 else 941 event = ring_buffer_peek(iter->tr->buffer, cpu, ts); 942 943 ftrace_enable_cpu(); 944 945 return event ? ring_buffer_event_data(event) : NULL; 946 } 947 948 static struct trace_entry * 949 __find_next_entry(struct trace_iterator *iter, int *ent_cpu, u64 *ent_ts) 950 { 951 struct ring_buffer *buffer = iter->tr->buffer; 952 struct trace_entry *ent, *next = NULL; 953 u64 next_ts = 0, ts; 954 int next_cpu = -1; 955 int cpu; 956 957 for_each_tracing_cpu(cpu) { 958 959 if (ring_buffer_empty_cpu(buffer, cpu)) 960 continue; 961 962 ent = peek_next_entry(iter, cpu, &ts); 963 964 /* 965 * Pick the entry with the smallest timestamp: 966 */ 967 if (ent && (!next || ts < next_ts)) { 968 next = ent; 969 next_cpu = cpu; 970 next_ts = ts; 971 } 972 } 973 974 if (ent_cpu) 975 *ent_cpu = next_cpu; 976 977 if (ent_ts) 978 *ent_ts = next_ts; 979 980 return next; 981 } 982 983 /* Find the next real entry, without updating the iterator itself */ 984 static struct trace_entry * 985 find_next_entry(struct trace_iterator *iter, int *ent_cpu, u64 *ent_ts) 986 { 987 return __find_next_entry(iter, ent_cpu, ent_ts); 988 } 989 990 /* Find the next real entry, and increment the iterator to the next entry */ 991 static void *find_next_entry_inc(struct trace_iterator *iter) 992 { 993 iter->ent = __find_next_entry(iter, &iter->cpu, &iter->ts); 994 995 if (iter->ent) 996 trace_iterator_increment(iter, iter->cpu); 997 998 return iter->ent ? iter : NULL; 999 } 1000 1001 static void trace_consume(struct trace_iterator *iter) 1002 { 1003 /* Don't allow ftrace to trace into the ring buffers */ 1004 ftrace_disable_cpu(); 1005 ring_buffer_consume(iter->tr->buffer, iter->cpu, &iter->ts); 1006 ftrace_enable_cpu(); 1007 } 1008 1009 static void *s_next(struct seq_file *m, void *v, loff_t *pos) 1010 { 1011 struct trace_iterator *iter = m->private; 1012 int i = (int)*pos; 1013 void *ent; 1014 1015 (*pos)++; 1016 1017 /* can't go backwards */ 1018 if (iter->idx > i) 1019 return NULL; 1020 1021 if (iter->idx < 0) 1022 ent = find_next_entry_inc(iter); 1023 else 1024 ent = iter; 1025 1026 while (ent && iter->idx < i) 1027 ent = find_next_entry_inc(iter); 1028 1029 iter->pos = *pos; 1030 1031 return ent; 1032 } 1033 1034 static void *s_start(struct seq_file *m, loff_t *pos) 1035 { 1036 struct trace_iterator *iter = m->private; 1037 void *p = NULL; 1038 loff_t l = 0; 1039 int cpu; 1040 1041 mutex_lock(&trace_types_lock); 1042 1043 if (!current_trace || current_trace != iter->trace) { 1044 mutex_unlock(&trace_types_lock); 1045 return NULL; 1046 } 1047 1048 atomic_inc(&trace_record_cmdline_disabled); 1049 1050 /* let the tracer grab locks here if needed */ 1051 if (current_trace->start) 1052 current_trace->start(iter); 1053 1054 if (*pos != iter->pos) { 1055 iter->ent = NULL; 1056 iter->cpu = 0; 1057 iter->idx = -1; 1058 1059 ftrace_disable_cpu(); 1060 1061 for_each_tracing_cpu(cpu) { 1062 ring_buffer_iter_reset(iter->buffer_iter[cpu]); 1063 } 1064 1065 ftrace_enable_cpu(); 1066 1067 for (p = iter; p && l < *pos; p = s_next(m, p, &l)) 1068 ; 1069 1070 } else { 1071 l = *pos - 1; 1072 p = s_next(m, p, &l); 1073 } 1074 1075 return p; 1076 } 1077 1078 static void s_stop(struct seq_file *m, void *p) 1079 { 1080 struct trace_iterator *iter = m->private; 1081 1082 atomic_dec(&trace_record_cmdline_disabled); 1083 1084 /* let the tracer release locks here if needed */ 1085 if (current_trace && current_trace == iter->trace && iter->trace->stop) 1086 iter->trace->stop(iter); 1087 1088 mutex_unlock(&trace_types_lock); 1089 } 1090 1091 #ifdef CONFIG_KRETPROBES 1092 static inline const char *kretprobed(const char *name) 1093 { 1094 static const char tramp_name[] = "kretprobe_trampoline"; 1095 int size = sizeof(tramp_name); 1096 1097 if (strncmp(tramp_name, name, size) == 0) 1098 return "[unknown/kretprobe'd]"; 1099 return name; 1100 } 1101 #else 1102 static inline const char *kretprobed(const char *name) 1103 { 1104 return name; 1105 } 1106 #endif /* CONFIG_KRETPROBES */ 1107 1108 static int 1109 seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address) 1110 { 1111 #ifdef CONFIG_KALLSYMS 1112 char str[KSYM_SYMBOL_LEN]; 1113 const char *name; 1114 1115 kallsyms_lookup(address, NULL, NULL, NULL, str); 1116 1117 name = kretprobed(str); 1118 1119 return trace_seq_printf(s, fmt, name); 1120 #endif 1121 return 1; 1122 } 1123 1124 static int 1125 seq_print_sym_offset(struct trace_seq *s, const char *fmt, 1126 unsigned long address) 1127 { 1128 #ifdef CONFIG_KALLSYMS 1129 char str[KSYM_SYMBOL_LEN]; 1130 const char *name; 1131 1132 sprint_symbol(str, address); 1133 name = kretprobed(str); 1134 1135 return trace_seq_printf(s, fmt, name); 1136 #endif 1137 return 1; 1138 } 1139 1140 #ifndef CONFIG_64BIT 1141 # define IP_FMT "%08lx" 1142 #else 1143 # define IP_FMT "%016lx" 1144 #endif 1145 1146 static int 1147 seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags) 1148 { 1149 int ret; 1150 1151 if (!ip) 1152 return trace_seq_printf(s, "0"); 1153 1154 if (sym_flags & TRACE_ITER_SYM_OFFSET) 1155 ret = seq_print_sym_offset(s, "%s", ip); 1156 else 1157 ret = seq_print_sym_short(s, "%s", ip); 1158 1159 if (!ret) 1160 return 0; 1161 1162 if (sym_flags & TRACE_ITER_SYM_ADDR) 1163 ret = trace_seq_printf(s, " <" IP_FMT ">", ip); 1164 return ret; 1165 } 1166 1167 static void print_lat_help_header(struct seq_file *m) 1168 { 1169 seq_puts(m, "# _------=> CPU# \n"); 1170 seq_puts(m, "# / _-----=> irqs-off \n"); 1171 seq_puts(m, "# | / _----=> need-resched \n"); 1172 seq_puts(m, "# || / _---=> hardirq/softirq \n"); 1173 seq_puts(m, "# ||| / _--=> preempt-depth \n"); 1174 seq_puts(m, "# |||| / \n"); 1175 seq_puts(m, "# ||||| delay \n"); 1176 seq_puts(m, "# cmd pid ||||| time | caller \n"); 1177 seq_puts(m, "# \\ / ||||| \\ | / \n"); 1178 } 1179 1180 static void print_func_help_header(struct seq_file *m) 1181 { 1182 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n"); 1183 seq_puts(m, "# | | | | |\n"); 1184 } 1185 1186 1187 static void 1188 print_trace_header(struct seq_file *m, struct trace_iterator *iter) 1189 { 1190 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); 1191 struct trace_array *tr = iter->tr; 1192 struct trace_array_cpu *data = tr->data[tr->cpu]; 1193 struct tracer *type = current_trace; 1194 unsigned long total; 1195 unsigned long entries; 1196 const char *name = "preemption"; 1197 1198 if (type) 1199 name = type->name; 1200 1201 entries = ring_buffer_entries(iter->tr->buffer); 1202 total = entries + 1203 ring_buffer_overruns(iter->tr->buffer); 1204 1205 seq_printf(m, "%s latency trace v1.1.5 on %s\n", 1206 name, UTS_RELEASE); 1207 seq_puts(m, "-----------------------------------" 1208 "---------------------------------\n"); 1209 seq_printf(m, " latency: %lu us, #%lu/%lu, CPU#%d |" 1210 " (M:%s VP:%d, KP:%d, SP:%d HP:%d", 1211 nsecs_to_usecs(data->saved_latency), 1212 entries, 1213 total, 1214 tr->cpu, 1215 #if defined(CONFIG_PREEMPT_NONE) 1216 "server", 1217 #elif defined(CONFIG_PREEMPT_VOLUNTARY) 1218 "desktop", 1219 #elif defined(CONFIG_PREEMPT) 1220 "preempt", 1221 #else 1222 "unknown", 1223 #endif 1224 /* These are reserved for later use */ 1225 0, 0, 0, 0); 1226 #ifdef CONFIG_SMP 1227 seq_printf(m, " #P:%d)\n", num_online_cpus()); 1228 #else 1229 seq_puts(m, ")\n"); 1230 #endif 1231 seq_puts(m, " -----------------\n"); 1232 seq_printf(m, " | task: %.16s-%d " 1233 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n", 1234 data->comm, data->pid, data->uid, data->nice, 1235 data->policy, data->rt_priority); 1236 seq_puts(m, " -----------------\n"); 1237 1238 if (data->critical_start) { 1239 seq_puts(m, " => started at: "); 1240 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags); 1241 trace_print_seq(m, &iter->seq); 1242 seq_puts(m, "\n => ended at: "); 1243 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags); 1244 trace_print_seq(m, &iter->seq); 1245 seq_puts(m, "\n"); 1246 } 1247 1248 seq_puts(m, "\n"); 1249 } 1250 1251 static void 1252 lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu) 1253 { 1254 int hardirq, softirq; 1255 char *comm; 1256 1257 comm = trace_find_cmdline(entry->pid); 1258 1259 trace_seq_printf(s, "%8.8s-%-5d ", comm, entry->pid); 1260 trace_seq_printf(s, "%3d", cpu); 1261 trace_seq_printf(s, "%c%c", 1262 (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' : 1263 (entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ? 'X' : '.', 1264 ((entry->flags & TRACE_FLAG_NEED_RESCHED) ? 'N' : '.')); 1265 1266 hardirq = entry->flags & TRACE_FLAG_HARDIRQ; 1267 softirq = entry->flags & TRACE_FLAG_SOFTIRQ; 1268 if (hardirq && softirq) { 1269 trace_seq_putc(s, 'H'); 1270 } else { 1271 if (hardirq) { 1272 trace_seq_putc(s, 'h'); 1273 } else { 1274 if (softirq) 1275 trace_seq_putc(s, 's'); 1276 else 1277 trace_seq_putc(s, '.'); 1278 } 1279 } 1280 1281 if (entry->preempt_count) 1282 trace_seq_printf(s, "%x", entry->preempt_count); 1283 else 1284 trace_seq_puts(s, "."); 1285 } 1286 1287 unsigned long preempt_mark_thresh = 100; 1288 1289 static void 1290 lat_print_timestamp(struct trace_seq *s, u64 abs_usecs, 1291 unsigned long rel_usecs) 1292 { 1293 trace_seq_printf(s, " %4lldus", abs_usecs); 1294 if (rel_usecs > preempt_mark_thresh) 1295 trace_seq_puts(s, "!: "); 1296 else if (rel_usecs > 1) 1297 trace_seq_puts(s, "+: "); 1298 else 1299 trace_seq_puts(s, " : "); 1300 } 1301 1302 static const char state_to_char[] = TASK_STATE_TO_CHAR_STR; 1303 1304 /* 1305 * The message is supposed to contain an ending newline. 1306 * If the printing stops prematurely, try to add a newline of our own. 1307 */ 1308 void trace_seq_print_cont(struct trace_seq *s, struct trace_iterator *iter) 1309 { 1310 struct trace_entry *ent; 1311 struct trace_field_cont *cont; 1312 bool ok = true; 1313 1314 ent = peek_next_entry(iter, iter->cpu, NULL); 1315 if (!ent || ent->type != TRACE_CONT) { 1316 trace_seq_putc(s, '\n'); 1317 return; 1318 } 1319 1320 do { 1321 cont = (struct trace_field_cont *)ent; 1322 if (ok) 1323 ok = (trace_seq_printf(s, "%s", cont->buf) > 0); 1324 1325 ftrace_disable_cpu(); 1326 1327 if (iter->buffer_iter[iter->cpu]) 1328 ring_buffer_read(iter->buffer_iter[iter->cpu], NULL); 1329 else 1330 ring_buffer_consume(iter->tr->buffer, iter->cpu, NULL); 1331 1332 ftrace_enable_cpu(); 1333 1334 ent = peek_next_entry(iter, iter->cpu, NULL); 1335 } while (ent && ent->type == TRACE_CONT); 1336 1337 if (!ok) 1338 trace_seq_putc(s, '\n'); 1339 } 1340 1341 static enum print_line_t 1342 print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu) 1343 { 1344 struct trace_seq *s = &iter->seq; 1345 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); 1346 struct trace_entry *next_entry; 1347 unsigned long verbose = (trace_flags & TRACE_ITER_VERBOSE); 1348 struct trace_entry *entry = iter->ent; 1349 unsigned long abs_usecs; 1350 unsigned long rel_usecs; 1351 u64 next_ts; 1352 char *comm; 1353 int S, T; 1354 int i; 1355 unsigned state; 1356 1357 if (entry->type == TRACE_CONT) 1358 return TRACE_TYPE_HANDLED; 1359 1360 next_entry = find_next_entry(iter, NULL, &next_ts); 1361 if (!next_entry) 1362 next_ts = iter->ts; 1363 rel_usecs = ns2usecs(next_ts - iter->ts); 1364 abs_usecs = ns2usecs(iter->ts - iter->tr->time_start); 1365 1366 if (verbose) { 1367 comm = trace_find_cmdline(entry->pid); 1368 trace_seq_printf(s, "%16s %5d %3d %d %08x %08x [%08lx]" 1369 " %ld.%03ldms (+%ld.%03ldms): ", 1370 comm, 1371 entry->pid, cpu, entry->flags, 1372 entry->preempt_count, trace_idx, 1373 ns2usecs(iter->ts), 1374 abs_usecs/1000, 1375 abs_usecs % 1000, rel_usecs/1000, 1376 rel_usecs % 1000); 1377 } else { 1378 lat_print_generic(s, entry, cpu); 1379 lat_print_timestamp(s, abs_usecs, rel_usecs); 1380 } 1381 switch (entry->type) { 1382 case TRACE_FN: { 1383 struct ftrace_entry *field; 1384 1385 trace_assign_type(field, entry); 1386 1387 seq_print_ip_sym(s, field->ip, sym_flags); 1388 trace_seq_puts(s, " ("); 1389 seq_print_ip_sym(s, field->parent_ip, sym_flags); 1390 trace_seq_puts(s, ")\n"); 1391 break; 1392 } 1393 case TRACE_CTX: 1394 case TRACE_WAKE: { 1395 struct ctx_switch_entry *field; 1396 1397 trace_assign_type(field, entry); 1398 1399 T = field->next_state < sizeof(state_to_char) ? 1400 state_to_char[field->next_state] : 'X'; 1401 1402 state = field->prev_state ? 1403 __ffs(field->prev_state) + 1 : 0; 1404 S = state < sizeof(state_to_char) - 1 ? state_to_char[state] : 'X'; 1405 comm = trace_find_cmdline(field->next_pid); 1406 trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", 1407 field->prev_pid, 1408 field->prev_prio, 1409 S, entry->type == TRACE_CTX ? "==>" : " +", 1410 field->next_cpu, 1411 field->next_pid, 1412 field->next_prio, 1413 T, comm); 1414 break; 1415 } 1416 case TRACE_SPECIAL: { 1417 struct special_entry *field; 1418 1419 trace_assign_type(field, entry); 1420 1421 trace_seq_printf(s, "# %ld %ld %ld\n", 1422 field->arg1, 1423 field->arg2, 1424 field->arg3); 1425 break; 1426 } 1427 case TRACE_STACK: { 1428 struct stack_entry *field; 1429 1430 trace_assign_type(field, entry); 1431 1432 for (i = 0; i < FTRACE_STACK_ENTRIES; i++) { 1433 if (i) 1434 trace_seq_puts(s, " <= "); 1435 seq_print_ip_sym(s, field->caller[i], sym_flags); 1436 } 1437 trace_seq_puts(s, "\n"); 1438 break; 1439 } 1440 case TRACE_PRINT: { 1441 struct print_entry *field; 1442 1443 trace_assign_type(field, entry); 1444 1445 seq_print_ip_sym(s, field->ip, sym_flags); 1446 trace_seq_printf(s, ": %s", field->buf); 1447 if (entry->flags & TRACE_FLAG_CONT) 1448 trace_seq_print_cont(s, iter); 1449 break; 1450 } 1451 default: 1452 trace_seq_printf(s, "Unknown type %d\n", entry->type); 1453 } 1454 return TRACE_TYPE_HANDLED; 1455 } 1456 1457 static enum print_line_t print_trace_fmt(struct trace_iterator *iter) 1458 { 1459 struct trace_seq *s = &iter->seq; 1460 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); 1461 struct trace_entry *entry; 1462 unsigned long usec_rem; 1463 unsigned long long t; 1464 unsigned long secs; 1465 char *comm; 1466 int ret; 1467 int S, T; 1468 int i; 1469 1470 entry = iter->ent; 1471 1472 if (entry->type == TRACE_CONT) 1473 return TRACE_TYPE_HANDLED; 1474 1475 comm = trace_find_cmdline(iter->ent->pid); 1476 1477 t = ns2usecs(iter->ts); 1478 usec_rem = do_div(t, 1000000ULL); 1479 secs = (unsigned long)t; 1480 1481 ret = trace_seq_printf(s, "%16s-%-5d ", comm, entry->pid); 1482 if (!ret) 1483 return TRACE_TYPE_PARTIAL_LINE; 1484 ret = trace_seq_printf(s, "[%03d] ", iter->cpu); 1485 if (!ret) 1486 return TRACE_TYPE_PARTIAL_LINE; 1487 ret = trace_seq_printf(s, "%5lu.%06lu: ", secs, usec_rem); 1488 if (!ret) 1489 return TRACE_TYPE_PARTIAL_LINE; 1490 1491 switch (entry->type) { 1492 case TRACE_FN: { 1493 struct ftrace_entry *field; 1494 1495 trace_assign_type(field, entry); 1496 1497 ret = seq_print_ip_sym(s, field->ip, sym_flags); 1498 if (!ret) 1499 return TRACE_TYPE_PARTIAL_LINE; 1500 if ((sym_flags & TRACE_ITER_PRINT_PARENT) && 1501 field->parent_ip) { 1502 ret = trace_seq_printf(s, " <-"); 1503 if (!ret) 1504 return TRACE_TYPE_PARTIAL_LINE; 1505 ret = seq_print_ip_sym(s, 1506 field->parent_ip, 1507 sym_flags); 1508 if (!ret) 1509 return TRACE_TYPE_PARTIAL_LINE; 1510 } 1511 ret = trace_seq_printf(s, "\n"); 1512 if (!ret) 1513 return TRACE_TYPE_PARTIAL_LINE; 1514 break; 1515 } 1516 case TRACE_CTX: 1517 case TRACE_WAKE: { 1518 struct ctx_switch_entry *field; 1519 1520 trace_assign_type(field, entry); 1521 1522 S = field->prev_state < sizeof(state_to_char) ? 1523 state_to_char[field->prev_state] : 'X'; 1524 T = field->next_state < sizeof(state_to_char) ? 1525 state_to_char[field->next_state] : 'X'; 1526 ret = trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c\n", 1527 field->prev_pid, 1528 field->prev_prio, 1529 S, 1530 entry->type == TRACE_CTX ? "==>" : " +", 1531 field->next_cpu, 1532 field->next_pid, 1533 field->next_prio, 1534 T); 1535 if (!ret) 1536 return TRACE_TYPE_PARTIAL_LINE; 1537 break; 1538 } 1539 case TRACE_SPECIAL: { 1540 struct special_entry *field; 1541 1542 trace_assign_type(field, entry); 1543 1544 ret = trace_seq_printf(s, "# %ld %ld %ld\n", 1545 field->arg1, 1546 field->arg2, 1547 field->arg3); 1548 if (!ret) 1549 return TRACE_TYPE_PARTIAL_LINE; 1550 break; 1551 } 1552 case TRACE_STACK: { 1553 struct stack_entry *field; 1554 1555 trace_assign_type(field, entry); 1556 1557 for (i = 0; i < FTRACE_STACK_ENTRIES; i++) { 1558 if (i) { 1559 ret = trace_seq_puts(s, " <= "); 1560 if (!ret) 1561 return TRACE_TYPE_PARTIAL_LINE; 1562 } 1563 ret = seq_print_ip_sym(s, field->caller[i], 1564 sym_flags); 1565 if (!ret) 1566 return TRACE_TYPE_PARTIAL_LINE; 1567 } 1568 ret = trace_seq_puts(s, "\n"); 1569 if (!ret) 1570 return TRACE_TYPE_PARTIAL_LINE; 1571 break; 1572 } 1573 case TRACE_PRINT: { 1574 struct print_entry *field; 1575 1576 trace_assign_type(field, entry); 1577 1578 seq_print_ip_sym(s, field->ip, sym_flags); 1579 trace_seq_printf(s, ": %s", field->buf); 1580 if (entry->flags & TRACE_FLAG_CONT) 1581 trace_seq_print_cont(s, iter); 1582 break; 1583 } 1584 } 1585 return TRACE_TYPE_HANDLED; 1586 } 1587 1588 static enum print_line_t print_raw_fmt(struct trace_iterator *iter) 1589 { 1590 struct trace_seq *s = &iter->seq; 1591 struct trace_entry *entry; 1592 int ret; 1593 int S, T; 1594 1595 entry = iter->ent; 1596 1597 if (entry->type == TRACE_CONT) 1598 return TRACE_TYPE_HANDLED; 1599 1600 ret = trace_seq_printf(s, "%d %d %llu ", 1601 entry->pid, iter->cpu, iter->ts); 1602 if (!ret) 1603 return TRACE_TYPE_PARTIAL_LINE; 1604 1605 switch (entry->type) { 1606 case TRACE_FN: { 1607 struct ftrace_entry *field; 1608 1609 trace_assign_type(field, entry); 1610 1611 ret = trace_seq_printf(s, "%x %x\n", 1612 field->ip, 1613 field->parent_ip); 1614 if (!ret) 1615 return TRACE_TYPE_PARTIAL_LINE; 1616 break; 1617 } 1618 case TRACE_CTX: 1619 case TRACE_WAKE: { 1620 struct ctx_switch_entry *field; 1621 1622 trace_assign_type(field, entry); 1623 1624 S = field->prev_state < sizeof(state_to_char) ? 1625 state_to_char[field->prev_state] : 'X'; 1626 T = field->next_state < sizeof(state_to_char) ? 1627 state_to_char[field->next_state] : 'X'; 1628 if (entry->type == TRACE_WAKE) 1629 S = '+'; 1630 ret = trace_seq_printf(s, "%d %d %c %d %d %d %c\n", 1631 field->prev_pid, 1632 field->prev_prio, 1633 S, 1634 field->next_cpu, 1635 field->next_pid, 1636 field->next_prio, 1637 T); 1638 if (!ret) 1639 return TRACE_TYPE_PARTIAL_LINE; 1640 break; 1641 } 1642 case TRACE_SPECIAL: 1643 case TRACE_STACK: { 1644 struct special_entry *field; 1645 1646 trace_assign_type(field, entry); 1647 1648 ret = trace_seq_printf(s, "# %ld %ld %ld\n", 1649 field->arg1, 1650 field->arg2, 1651 field->arg3); 1652 if (!ret) 1653 return TRACE_TYPE_PARTIAL_LINE; 1654 break; 1655 } 1656 case TRACE_PRINT: { 1657 struct print_entry *field; 1658 1659 trace_assign_type(field, entry); 1660 1661 trace_seq_printf(s, "# %lx %s", field->ip, field->buf); 1662 if (entry->flags & TRACE_FLAG_CONT) 1663 trace_seq_print_cont(s, iter); 1664 break; 1665 } 1666 } 1667 return TRACE_TYPE_HANDLED; 1668 } 1669 1670 #define SEQ_PUT_FIELD_RET(s, x) \ 1671 do { \ 1672 if (!trace_seq_putmem(s, &(x), sizeof(x))) \ 1673 return 0; \ 1674 } while (0) 1675 1676 #define SEQ_PUT_HEX_FIELD_RET(s, x) \ 1677 do { \ 1678 BUILD_BUG_ON(sizeof(x) > MAX_MEMHEX_BYTES); \ 1679 if (!trace_seq_putmem_hex(s, &(x), sizeof(x))) \ 1680 return 0; \ 1681 } while (0) 1682 1683 static enum print_line_t print_hex_fmt(struct trace_iterator *iter) 1684 { 1685 struct trace_seq *s = &iter->seq; 1686 unsigned char newline = '\n'; 1687 struct trace_entry *entry; 1688 int S, T; 1689 1690 entry = iter->ent; 1691 1692 if (entry->type == TRACE_CONT) 1693 return TRACE_TYPE_HANDLED; 1694 1695 SEQ_PUT_HEX_FIELD_RET(s, entry->pid); 1696 SEQ_PUT_HEX_FIELD_RET(s, iter->cpu); 1697 SEQ_PUT_HEX_FIELD_RET(s, iter->ts); 1698 1699 switch (entry->type) { 1700 case TRACE_FN: { 1701 struct ftrace_entry *field; 1702 1703 trace_assign_type(field, entry); 1704 1705 SEQ_PUT_HEX_FIELD_RET(s, field->ip); 1706 SEQ_PUT_HEX_FIELD_RET(s, field->parent_ip); 1707 break; 1708 } 1709 case TRACE_CTX: 1710 case TRACE_WAKE: { 1711 struct ctx_switch_entry *field; 1712 1713 trace_assign_type(field, entry); 1714 1715 S = field->prev_state < sizeof(state_to_char) ? 1716 state_to_char[field->prev_state] : 'X'; 1717 T = field->next_state < sizeof(state_to_char) ? 1718 state_to_char[field->next_state] : 'X'; 1719 if (entry->type == TRACE_WAKE) 1720 S = '+'; 1721 SEQ_PUT_HEX_FIELD_RET(s, field->prev_pid); 1722 SEQ_PUT_HEX_FIELD_RET(s, field->prev_prio); 1723 SEQ_PUT_HEX_FIELD_RET(s, S); 1724 SEQ_PUT_HEX_FIELD_RET(s, field->next_cpu); 1725 SEQ_PUT_HEX_FIELD_RET(s, field->next_pid); 1726 SEQ_PUT_HEX_FIELD_RET(s, field->next_prio); 1727 SEQ_PUT_HEX_FIELD_RET(s, T); 1728 break; 1729 } 1730 case TRACE_SPECIAL: 1731 case TRACE_STACK: { 1732 struct special_entry *field; 1733 1734 trace_assign_type(field, entry); 1735 1736 SEQ_PUT_HEX_FIELD_RET(s, field->arg1); 1737 SEQ_PUT_HEX_FIELD_RET(s, field->arg2); 1738 SEQ_PUT_HEX_FIELD_RET(s, field->arg3); 1739 break; 1740 } 1741 } 1742 SEQ_PUT_FIELD_RET(s, newline); 1743 1744 return TRACE_TYPE_HANDLED; 1745 } 1746 1747 static enum print_line_t print_bin_fmt(struct trace_iterator *iter) 1748 { 1749 struct trace_seq *s = &iter->seq; 1750 struct trace_entry *entry; 1751 1752 entry = iter->ent; 1753 1754 if (entry->type == TRACE_CONT) 1755 return TRACE_TYPE_HANDLED; 1756 1757 SEQ_PUT_FIELD_RET(s, entry->pid); 1758 SEQ_PUT_FIELD_RET(s, entry->cpu); 1759 SEQ_PUT_FIELD_RET(s, iter->ts); 1760 1761 switch (entry->type) { 1762 case TRACE_FN: { 1763 struct ftrace_entry *field; 1764 1765 trace_assign_type(field, entry); 1766 1767 SEQ_PUT_FIELD_RET(s, field->ip); 1768 SEQ_PUT_FIELD_RET(s, field->parent_ip); 1769 break; 1770 } 1771 case TRACE_CTX: { 1772 struct ctx_switch_entry *field; 1773 1774 trace_assign_type(field, entry); 1775 1776 SEQ_PUT_FIELD_RET(s, field->prev_pid); 1777 SEQ_PUT_FIELD_RET(s, field->prev_prio); 1778 SEQ_PUT_FIELD_RET(s, field->prev_state); 1779 SEQ_PUT_FIELD_RET(s, field->next_pid); 1780 SEQ_PUT_FIELD_RET(s, field->next_prio); 1781 SEQ_PUT_FIELD_RET(s, field->next_state); 1782 break; 1783 } 1784 case TRACE_SPECIAL: 1785 case TRACE_STACK: { 1786 struct special_entry *field; 1787 1788 trace_assign_type(field, entry); 1789 1790 SEQ_PUT_FIELD_RET(s, field->arg1); 1791 SEQ_PUT_FIELD_RET(s, field->arg2); 1792 SEQ_PUT_FIELD_RET(s, field->arg3); 1793 break; 1794 } 1795 } 1796 return 1; 1797 } 1798 1799 static int trace_empty(struct trace_iterator *iter) 1800 { 1801 int cpu; 1802 1803 for_each_tracing_cpu(cpu) { 1804 if (iter->buffer_iter[cpu]) { 1805 if (!ring_buffer_iter_empty(iter->buffer_iter[cpu])) 1806 return 0; 1807 } else { 1808 if (!ring_buffer_empty_cpu(iter->tr->buffer, cpu)) 1809 return 0; 1810 } 1811 } 1812 1813 return 1; 1814 } 1815 1816 static enum print_line_t print_trace_line(struct trace_iterator *iter) 1817 { 1818 enum print_line_t ret; 1819 1820 if (iter->trace && iter->trace->print_line) { 1821 ret = iter->trace->print_line(iter); 1822 if (ret != TRACE_TYPE_UNHANDLED) 1823 return ret; 1824 } 1825 1826 if (trace_flags & TRACE_ITER_BIN) 1827 return print_bin_fmt(iter); 1828 1829 if (trace_flags & TRACE_ITER_HEX) 1830 return print_hex_fmt(iter); 1831 1832 if (trace_flags & TRACE_ITER_RAW) 1833 return print_raw_fmt(iter); 1834 1835 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 1836 return print_lat_fmt(iter, iter->idx, iter->cpu); 1837 1838 return print_trace_fmt(iter); 1839 } 1840 1841 static int s_show(struct seq_file *m, void *v) 1842 { 1843 struct trace_iterator *iter = v; 1844 1845 if (iter->ent == NULL) { 1846 if (iter->tr) { 1847 seq_printf(m, "# tracer: %s\n", iter->trace->name); 1848 seq_puts(m, "#\n"); 1849 } 1850 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { 1851 /* print nothing if the buffers are empty */ 1852 if (trace_empty(iter)) 1853 return 0; 1854 print_trace_header(m, iter); 1855 if (!(trace_flags & TRACE_ITER_VERBOSE)) 1856 print_lat_help_header(m); 1857 } else { 1858 if (!(trace_flags & TRACE_ITER_VERBOSE)) 1859 print_func_help_header(m); 1860 } 1861 } else { 1862 print_trace_line(iter); 1863 trace_print_seq(m, &iter->seq); 1864 } 1865 1866 return 0; 1867 } 1868 1869 static struct seq_operations tracer_seq_ops = { 1870 .start = s_start, 1871 .next = s_next, 1872 .stop = s_stop, 1873 .show = s_show, 1874 }; 1875 1876 static struct trace_iterator * 1877 __tracing_open(struct inode *inode, struct file *file, int *ret) 1878 { 1879 struct trace_iterator *iter; 1880 struct seq_file *m; 1881 int cpu; 1882 1883 if (tracing_disabled) { 1884 *ret = -ENODEV; 1885 return NULL; 1886 } 1887 1888 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 1889 if (!iter) { 1890 *ret = -ENOMEM; 1891 goto out; 1892 } 1893 1894 mutex_lock(&trace_types_lock); 1895 if (current_trace && current_trace->print_max) 1896 iter->tr = &max_tr; 1897 else 1898 iter->tr = inode->i_private; 1899 iter->trace = current_trace; 1900 iter->pos = -1; 1901 1902 for_each_tracing_cpu(cpu) { 1903 1904 iter->buffer_iter[cpu] = 1905 ring_buffer_read_start(iter->tr->buffer, cpu); 1906 1907 if (!iter->buffer_iter[cpu]) 1908 goto fail_buffer; 1909 } 1910 1911 /* TODO stop tracer */ 1912 *ret = seq_open(file, &tracer_seq_ops); 1913 if (*ret) 1914 goto fail_buffer; 1915 1916 m = file->private_data; 1917 m->private = iter; 1918 1919 /* stop the trace while dumping */ 1920 if (iter->tr->ctrl) { 1921 tracer_enabled = 0; 1922 ftrace_function_enabled = 0; 1923 } 1924 1925 if (iter->trace && iter->trace->open) 1926 iter->trace->open(iter); 1927 1928 mutex_unlock(&trace_types_lock); 1929 1930 out: 1931 return iter; 1932 1933 fail_buffer: 1934 for_each_tracing_cpu(cpu) { 1935 if (iter->buffer_iter[cpu]) 1936 ring_buffer_read_finish(iter->buffer_iter[cpu]); 1937 } 1938 mutex_unlock(&trace_types_lock); 1939 kfree(iter); 1940 1941 return ERR_PTR(-ENOMEM); 1942 } 1943 1944 int tracing_open_generic(struct inode *inode, struct file *filp) 1945 { 1946 if (tracing_disabled) 1947 return -ENODEV; 1948 1949 filp->private_data = inode->i_private; 1950 return 0; 1951 } 1952 1953 int tracing_release(struct inode *inode, struct file *file) 1954 { 1955 struct seq_file *m = (struct seq_file *)file->private_data; 1956 struct trace_iterator *iter = m->private; 1957 int cpu; 1958 1959 mutex_lock(&trace_types_lock); 1960 for_each_tracing_cpu(cpu) { 1961 if (iter->buffer_iter[cpu]) 1962 ring_buffer_read_finish(iter->buffer_iter[cpu]); 1963 } 1964 1965 if (iter->trace && iter->trace->close) 1966 iter->trace->close(iter); 1967 1968 /* reenable tracing if it was previously enabled */ 1969 if (iter->tr->ctrl) { 1970 tracer_enabled = 1; 1971 /* 1972 * It is safe to enable function tracing even if it 1973 * isn't used 1974 */ 1975 ftrace_function_enabled = 1; 1976 } 1977 mutex_unlock(&trace_types_lock); 1978 1979 seq_release(inode, file); 1980 kfree(iter); 1981 return 0; 1982 } 1983 1984 static int tracing_open(struct inode *inode, struct file *file) 1985 { 1986 int ret; 1987 1988 __tracing_open(inode, file, &ret); 1989 1990 return ret; 1991 } 1992 1993 static int tracing_lt_open(struct inode *inode, struct file *file) 1994 { 1995 struct trace_iterator *iter; 1996 int ret; 1997 1998 iter = __tracing_open(inode, file, &ret); 1999 2000 if (!ret) 2001 iter->iter_flags |= TRACE_FILE_LAT_FMT; 2002 2003 return ret; 2004 } 2005 2006 2007 static void * 2008 t_next(struct seq_file *m, void *v, loff_t *pos) 2009 { 2010 struct tracer *t = m->private; 2011 2012 (*pos)++; 2013 2014 if (t) 2015 t = t->next; 2016 2017 m->private = t; 2018 2019 return t; 2020 } 2021 2022 static void *t_start(struct seq_file *m, loff_t *pos) 2023 { 2024 struct tracer *t = m->private; 2025 loff_t l = 0; 2026 2027 mutex_lock(&trace_types_lock); 2028 for (; t && l < *pos; t = t_next(m, t, &l)) 2029 ; 2030 2031 return t; 2032 } 2033 2034 static void t_stop(struct seq_file *m, void *p) 2035 { 2036 mutex_unlock(&trace_types_lock); 2037 } 2038 2039 static int t_show(struct seq_file *m, void *v) 2040 { 2041 struct tracer *t = v; 2042 2043 if (!t) 2044 return 0; 2045 2046 seq_printf(m, "%s", t->name); 2047 if (t->next) 2048 seq_putc(m, ' '); 2049 else 2050 seq_putc(m, '\n'); 2051 2052 return 0; 2053 } 2054 2055 static struct seq_operations show_traces_seq_ops = { 2056 .start = t_start, 2057 .next = t_next, 2058 .stop = t_stop, 2059 .show = t_show, 2060 }; 2061 2062 static int show_traces_open(struct inode *inode, struct file *file) 2063 { 2064 int ret; 2065 2066 if (tracing_disabled) 2067 return -ENODEV; 2068 2069 ret = seq_open(file, &show_traces_seq_ops); 2070 if (!ret) { 2071 struct seq_file *m = file->private_data; 2072 m->private = trace_types; 2073 } 2074 2075 return ret; 2076 } 2077 2078 static struct file_operations tracing_fops = { 2079 .open = tracing_open, 2080 .read = seq_read, 2081 .llseek = seq_lseek, 2082 .release = tracing_release, 2083 }; 2084 2085 static struct file_operations tracing_lt_fops = { 2086 .open = tracing_lt_open, 2087 .read = seq_read, 2088 .llseek = seq_lseek, 2089 .release = tracing_release, 2090 }; 2091 2092 static struct file_operations show_traces_fops = { 2093 .open = show_traces_open, 2094 .read = seq_read, 2095 .release = seq_release, 2096 }; 2097 2098 /* 2099 * Only trace on a CPU if the bitmask is set: 2100 */ 2101 static cpumask_t tracing_cpumask = CPU_MASK_ALL; 2102 2103 /* 2104 * When tracing/tracing_cpu_mask is modified then this holds 2105 * the new bitmask we are about to install: 2106 */ 2107 static cpumask_t tracing_cpumask_new; 2108 2109 /* 2110 * The tracer itself will not take this lock, but still we want 2111 * to provide a consistent cpumask to user-space: 2112 */ 2113 static DEFINE_MUTEX(tracing_cpumask_update_lock); 2114 2115 /* 2116 * Temporary storage for the character representation of the 2117 * CPU bitmask (and one more byte for the newline): 2118 */ 2119 static char mask_str[NR_CPUS + 1]; 2120 2121 static ssize_t 2122 tracing_cpumask_read(struct file *filp, char __user *ubuf, 2123 size_t count, loff_t *ppos) 2124 { 2125 int len; 2126 2127 mutex_lock(&tracing_cpumask_update_lock); 2128 2129 len = cpumask_scnprintf(mask_str, count, tracing_cpumask); 2130 if (count - len < 2) { 2131 count = -EINVAL; 2132 goto out_err; 2133 } 2134 len += sprintf(mask_str + len, "\n"); 2135 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1); 2136 2137 out_err: 2138 mutex_unlock(&tracing_cpumask_update_lock); 2139 2140 return count; 2141 } 2142 2143 static ssize_t 2144 tracing_cpumask_write(struct file *filp, const char __user *ubuf, 2145 size_t count, loff_t *ppos) 2146 { 2147 int err, cpu; 2148 2149 mutex_lock(&tracing_cpumask_update_lock); 2150 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new); 2151 if (err) 2152 goto err_unlock; 2153 2154 raw_local_irq_disable(); 2155 __raw_spin_lock(&ftrace_max_lock); 2156 for_each_tracing_cpu(cpu) { 2157 /* 2158 * Increase/decrease the disabled counter if we are 2159 * about to flip a bit in the cpumask: 2160 */ 2161 if (cpu_isset(cpu, tracing_cpumask) && 2162 !cpu_isset(cpu, tracing_cpumask_new)) { 2163 atomic_inc(&global_trace.data[cpu]->disabled); 2164 } 2165 if (!cpu_isset(cpu, tracing_cpumask) && 2166 cpu_isset(cpu, tracing_cpumask_new)) { 2167 atomic_dec(&global_trace.data[cpu]->disabled); 2168 } 2169 } 2170 __raw_spin_unlock(&ftrace_max_lock); 2171 raw_local_irq_enable(); 2172 2173 tracing_cpumask = tracing_cpumask_new; 2174 2175 mutex_unlock(&tracing_cpumask_update_lock); 2176 2177 return count; 2178 2179 err_unlock: 2180 mutex_unlock(&tracing_cpumask_update_lock); 2181 2182 return err; 2183 } 2184 2185 static struct file_operations tracing_cpumask_fops = { 2186 .open = tracing_open_generic, 2187 .read = tracing_cpumask_read, 2188 .write = tracing_cpumask_write, 2189 }; 2190 2191 static ssize_t 2192 tracing_iter_ctrl_read(struct file *filp, char __user *ubuf, 2193 size_t cnt, loff_t *ppos) 2194 { 2195 char *buf; 2196 int r = 0; 2197 int len = 0; 2198 int i; 2199 2200 /* calulate max size */ 2201 for (i = 0; trace_options[i]; i++) { 2202 len += strlen(trace_options[i]); 2203 len += 3; /* "no" and space */ 2204 } 2205 2206 /* +2 for \n and \0 */ 2207 buf = kmalloc(len + 2, GFP_KERNEL); 2208 if (!buf) 2209 return -ENOMEM; 2210 2211 for (i = 0; trace_options[i]; i++) { 2212 if (trace_flags & (1 << i)) 2213 r += sprintf(buf + r, "%s ", trace_options[i]); 2214 else 2215 r += sprintf(buf + r, "no%s ", trace_options[i]); 2216 } 2217 2218 r += sprintf(buf + r, "\n"); 2219 WARN_ON(r >= len + 2); 2220 2221 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2222 2223 kfree(buf); 2224 2225 return r; 2226 } 2227 2228 static ssize_t 2229 tracing_iter_ctrl_write(struct file *filp, const char __user *ubuf, 2230 size_t cnt, loff_t *ppos) 2231 { 2232 char buf[64]; 2233 char *cmp = buf; 2234 int neg = 0; 2235 int i; 2236 2237 if (cnt >= sizeof(buf)) 2238 return -EINVAL; 2239 2240 if (copy_from_user(&buf, ubuf, cnt)) 2241 return -EFAULT; 2242 2243 buf[cnt] = 0; 2244 2245 if (strncmp(buf, "no", 2) == 0) { 2246 neg = 1; 2247 cmp += 2; 2248 } 2249 2250 for (i = 0; trace_options[i]; i++) { 2251 int len = strlen(trace_options[i]); 2252 2253 if (strncmp(cmp, trace_options[i], len) == 0) { 2254 if (neg) 2255 trace_flags &= ~(1 << i); 2256 else 2257 trace_flags |= (1 << i); 2258 break; 2259 } 2260 } 2261 /* 2262 * If no option could be set, return an error: 2263 */ 2264 if (!trace_options[i]) 2265 return -EINVAL; 2266 2267 filp->f_pos += cnt; 2268 2269 return cnt; 2270 } 2271 2272 static struct file_operations tracing_iter_fops = { 2273 .open = tracing_open_generic, 2274 .read = tracing_iter_ctrl_read, 2275 .write = tracing_iter_ctrl_write, 2276 }; 2277 2278 static const char readme_msg[] = 2279 "tracing mini-HOWTO:\n\n" 2280 "# mkdir /debug\n" 2281 "# mount -t debugfs nodev /debug\n\n" 2282 "# cat /debug/tracing/available_tracers\n" 2283 "wakeup preemptirqsoff preemptoff irqsoff ftrace sched_switch none\n\n" 2284 "# cat /debug/tracing/current_tracer\n" 2285 "none\n" 2286 "# echo sched_switch > /debug/tracing/current_tracer\n" 2287 "# cat /debug/tracing/current_tracer\n" 2288 "sched_switch\n" 2289 "# cat /debug/tracing/iter_ctrl\n" 2290 "noprint-parent nosym-offset nosym-addr noverbose\n" 2291 "# echo print-parent > /debug/tracing/iter_ctrl\n" 2292 "# echo 1 > /debug/tracing/tracing_enabled\n" 2293 "# cat /debug/tracing/trace > /tmp/trace.txt\n" 2294 "echo 0 > /debug/tracing/tracing_enabled\n" 2295 ; 2296 2297 static ssize_t 2298 tracing_readme_read(struct file *filp, char __user *ubuf, 2299 size_t cnt, loff_t *ppos) 2300 { 2301 return simple_read_from_buffer(ubuf, cnt, ppos, 2302 readme_msg, strlen(readme_msg)); 2303 } 2304 2305 static struct file_operations tracing_readme_fops = { 2306 .open = tracing_open_generic, 2307 .read = tracing_readme_read, 2308 }; 2309 2310 static ssize_t 2311 tracing_ctrl_read(struct file *filp, char __user *ubuf, 2312 size_t cnt, loff_t *ppos) 2313 { 2314 struct trace_array *tr = filp->private_data; 2315 char buf[64]; 2316 int r; 2317 2318 r = sprintf(buf, "%ld\n", tr->ctrl); 2319 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2320 } 2321 2322 static ssize_t 2323 tracing_ctrl_write(struct file *filp, const char __user *ubuf, 2324 size_t cnt, loff_t *ppos) 2325 { 2326 struct trace_array *tr = filp->private_data; 2327 char buf[64]; 2328 long val; 2329 int ret; 2330 2331 if (cnt >= sizeof(buf)) 2332 return -EINVAL; 2333 2334 if (copy_from_user(&buf, ubuf, cnt)) 2335 return -EFAULT; 2336 2337 buf[cnt] = 0; 2338 2339 ret = strict_strtoul(buf, 10, &val); 2340 if (ret < 0) 2341 return ret; 2342 2343 val = !!val; 2344 2345 mutex_lock(&trace_types_lock); 2346 if (tr->ctrl ^ val) { 2347 if (val) 2348 tracer_enabled = 1; 2349 else 2350 tracer_enabled = 0; 2351 2352 tr->ctrl = val; 2353 2354 if (current_trace && current_trace->ctrl_update) 2355 current_trace->ctrl_update(tr); 2356 } 2357 mutex_unlock(&trace_types_lock); 2358 2359 filp->f_pos += cnt; 2360 2361 return cnt; 2362 } 2363 2364 static ssize_t 2365 tracing_set_trace_read(struct file *filp, char __user *ubuf, 2366 size_t cnt, loff_t *ppos) 2367 { 2368 char buf[max_tracer_type_len+2]; 2369 int r; 2370 2371 mutex_lock(&trace_types_lock); 2372 if (current_trace) 2373 r = sprintf(buf, "%s\n", current_trace->name); 2374 else 2375 r = sprintf(buf, "\n"); 2376 mutex_unlock(&trace_types_lock); 2377 2378 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2379 } 2380 2381 static ssize_t 2382 tracing_set_trace_write(struct file *filp, const char __user *ubuf, 2383 size_t cnt, loff_t *ppos) 2384 { 2385 struct trace_array *tr = &global_trace; 2386 struct tracer *t; 2387 char buf[max_tracer_type_len+1]; 2388 int i; 2389 size_t ret; 2390 2391 ret = cnt; 2392 2393 if (cnt > max_tracer_type_len) 2394 cnt = max_tracer_type_len; 2395 2396 if (copy_from_user(&buf, ubuf, cnt)) 2397 return -EFAULT; 2398 2399 buf[cnt] = 0; 2400 2401 /* strip ending whitespace. */ 2402 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--) 2403 buf[i] = 0; 2404 2405 mutex_lock(&trace_types_lock); 2406 for (t = trace_types; t; t = t->next) { 2407 if (strcmp(t->name, buf) == 0) 2408 break; 2409 } 2410 if (!t) { 2411 ret = -EINVAL; 2412 goto out; 2413 } 2414 if (t == current_trace) 2415 goto out; 2416 2417 if (current_trace && current_trace->reset) 2418 current_trace->reset(tr); 2419 2420 current_trace = t; 2421 if (t->init) 2422 t->init(tr); 2423 2424 out: 2425 mutex_unlock(&trace_types_lock); 2426 2427 if (ret > 0) 2428 filp->f_pos += ret; 2429 2430 return ret; 2431 } 2432 2433 static ssize_t 2434 tracing_max_lat_read(struct file *filp, char __user *ubuf, 2435 size_t cnt, loff_t *ppos) 2436 { 2437 unsigned long *ptr = filp->private_data; 2438 char buf[64]; 2439 int r; 2440 2441 r = snprintf(buf, sizeof(buf), "%ld\n", 2442 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr)); 2443 if (r > sizeof(buf)) 2444 r = sizeof(buf); 2445 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2446 } 2447 2448 static ssize_t 2449 tracing_max_lat_write(struct file *filp, const char __user *ubuf, 2450 size_t cnt, loff_t *ppos) 2451 { 2452 long *ptr = filp->private_data; 2453 char buf[64]; 2454 long val; 2455 int ret; 2456 2457 if (cnt >= sizeof(buf)) 2458 return -EINVAL; 2459 2460 if (copy_from_user(&buf, ubuf, cnt)) 2461 return -EFAULT; 2462 2463 buf[cnt] = 0; 2464 2465 ret = strict_strtoul(buf, 10, &val); 2466 if (ret < 0) 2467 return ret; 2468 2469 *ptr = val * 1000; 2470 2471 return cnt; 2472 } 2473 2474 static atomic_t tracing_reader; 2475 2476 static int tracing_open_pipe(struct inode *inode, struct file *filp) 2477 { 2478 struct trace_iterator *iter; 2479 2480 if (tracing_disabled) 2481 return -ENODEV; 2482 2483 /* We only allow for reader of the pipe */ 2484 if (atomic_inc_return(&tracing_reader) != 1) { 2485 atomic_dec(&tracing_reader); 2486 return -EBUSY; 2487 } 2488 2489 /* create a buffer to store the information to pass to userspace */ 2490 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 2491 if (!iter) 2492 return -ENOMEM; 2493 2494 mutex_lock(&trace_types_lock); 2495 iter->tr = &global_trace; 2496 iter->trace = current_trace; 2497 filp->private_data = iter; 2498 2499 if (iter->trace->pipe_open) 2500 iter->trace->pipe_open(iter); 2501 mutex_unlock(&trace_types_lock); 2502 2503 return 0; 2504 } 2505 2506 static int tracing_release_pipe(struct inode *inode, struct file *file) 2507 { 2508 struct trace_iterator *iter = file->private_data; 2509 2510 kfree(iter); 2511 atomic_dec(&tracing_reader); 2512 2513 return 0; 2514 } 2515 2516 static unsigned int 2517 tracing_poll_pipe(struct file *filp, poll_table *poll_table) 2518 { 2519 struct trace_iterator *iter = filp->private_data; 2520 2521 if (trace_flags & TRACE_ITER_BLOCK) { 2522 /* 2523 * Always select as readable when in blocking mode 2524 */ 2525 return POLLIN | POLLRDNORM; 2526 } else { 2527 if (!trace_empty(iter)) 2528 return POLLIN | POLLRDNORM; 2529 poll_wait(filp, &trace_wait, poll_table); 2530 if (!trace_empty(iter)) 2531 return POLLIN | POLLRDNORM; 2532 2533 return 0; 2534 } 2535 } 2536 2537 /* 2538 * Consumer reader. 2539 */ 2540 static ssize_t 2541 tracing_read_pipe(struct file *filp, char __user *ubuf, 2542 size_t cnt, loff_t *ppos) 2543 { 2544 struct trace_iterator *iter = filp->private_data; 2545 ssize_t sret; 2546 2547 /* return any leftover data */ 2548 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 2549 if (sret != -EBUSY) 2550 return sret; 2551 2552 trace_seq_reset(&iter->seq); 2553 2554 mutex_lock(&trace_types_lock); 2555 if (iter->trace->read) { 2556 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); 2557 if (sret) 2558 goto out; 2559 } 2560 2561 waitagain: 2562 sret = 0; 2563 while (trace_empty(iter)) { 2564 2565 if ((filp->f_flags & O_NONBLOCK)) { 2566 sret = -EAGAIN; 2567 goto out; 2568 } 2569 2570 /* 2571 * This is a make-shift waitqueue. The reason we don't use 2572 * an actual wait queue is because: 2573 * 1) we only ever have one waiter 2574 * 2) the tracing, traces all functions, we don't want 2575 * the overhead of calling wake_up and friends 2576 * (and tracing them too) 2577 * Anyway, this is really very primitive wakeup. 2578 */ 2579 set_current_state(TASK_INTERRUPTIBLE); 2580 iter->tr->waiter = current; 2581 2582 mutex_unlock(&trace_types_lock); 2583 2584 /* sleep for 100 msecs, and try again. */ 2585 schedule_timeout(HZ/10); 2586 2587 mutex_lock(&trace_types_lock); 2588 2589 iter->tr->waiter = NULL; 2590 2591 if (signal_pending(current)) { 2592 sret = -EINTR; 2593 goto out; 2594 } 2595 2596 if (iter->trace != current_trace) 2597 goto out; 2598 2599 /* 2600 * We block until we read something and tracing is disabled. 2601 * We still block if tracing is disabled, but we have never 2602 * read anything. This allows a user to cat this file, and 2603 * then enable tracing. But after we have read something, 2604 * we give an EOF when tracing is again disabled. 2605 * 2606 * iter->pos will be 0 if we haven't read anything. 2607 */ 2608 if (!tracer_enabled && iter->pos) 2609 break; 2610 2611 continue; 2612 } 2613 2614 /* stop when tracing is finished */ 2615 if (trace_empty(iter)) 2616 goto out; 2617 2618 if (cnt >= PAGE_SIZE) 2619 cnt = PAGE_SIZE - 1; 2620 2621 /* reset all but tr, trace, and overruns */ 2622 memset(&iter->seq, 0, 2623 sizeof(struct trace_iterator) - 2624 offsetof(struct trace_iterator, seq)); 2625 iter->pos = -1; 2626 2627 while (find_next_entry_inc(iter) != NULL) { 2628 enum print_line_t ret; 2629 int len = iter->seq.len; 2630 2631 ret = print_trace_line(iter); 2632 if (ret == TRACE_TYPE_PARTIAL_LINE) { 2633 /* don't print partial lines */ 2634 iter->seq.len = len; 2635 break; 2636 } 2637 2638 trace_consume(iter); 2639 2640 if (iter->seq.len >= cnt) 2641 break; 2642 } 2643 2644 /* Now copy what we have to the user */ 2645 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 2646 if (iter->seq.readpos >= iter->seq.len) 2647 trace_seq_reset(&iter->seq); 2648 2649 /* 2650 * If there was nothing to send to user, inspite of consuming trace 2651 * entries, go back to wait for more entries. 2652 */ 2653 if (sret == -EBUSY) 2654 goto waitagain; 2655 2656 out: 2657 mutex_unlock(&trace_types_lock); 2658 2659 return sret; 2660 } 2661 2662 static ssize_t 2663 tracing_entries_read(struct file *filp, char __user *ubuf, 2664 size_t cnt, loff_t *ppos) 2665 { 2666 struct trace_array *tr = filp->private_data; 2667 char buf[64]; 2668 int r; 2669 2670 r = sprintf(buf, "%lu\n", tr->entries); 2671 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2672 } 2673 2674 static ssize_t 2675 tracing_entries_write(struct file *filp, const char __user *ubuf, 2676 size_t cnt, loff_t *ppos) 2677 { 2678 unsigned long val; 2679 char buf[64]; 2680 int ret, cpu; 2681 struct trace_array *tr = filp->private_data; 2682 2683 if (cnt >= sizeof(buf)) 2684 return -EINVAL; 2685 2686 if (copy_from_user(&buf, ubuf, cnt)) 2687 return -EFAULT; 2688 2689 buf[cnt] = 0; 2690 2691 ret = strict_strtoul(buf, 10, &val); 2692 if (ret < 0) 2693 return ret; 2694 2695 /* must have at least 1 entry */ 2696 if (!val) 2697 return -EINVAL; 2698 2699 mutex_lock(&trace_types_lock); 2700 2701 if (tr->ctrl) { 2702 cnt = -EBUSY; 2703 pr_info("ftrace: please disable tracing" 2704 " before modifying buffer size\n"); 2705 goto out; 2706 } 2707 2708 /* disable all cpu buffers */ 2709 for_each_tracing_cpu(cpu) { 2710 if (global_trace.data[cpu]) 2711 atomic_inc(&global_trace.data[cpu]->disabled); 2712 if (max_tr.data[cpu]) 2713 atomic_inc(&max_tr.data[cpu]->disabled); 2714 } 2715 2716 if (val != global_trace.entries) { 2717 ret = ring_buffer_resize(global_trace.buffer, val); 2718 if (ret < 0) { 2719 cnt = ret; 2720 goto out; 2721 } 2722 2723 ret = ring_buffer_resize(max_tr.buffer, val); 2724 if (ret < 0) { 2725 int r; 2726 cnt = ret; 2727 r = ring_buffer_resize(global_trace.buffer, 2728 global_trace.entries); 2729 if (r < 0) { 2730 /* AARGH! We are left with different 2731 * size max buffer!!!! */ 2732 WARN_ON(1); 2733 tracing_disabled = 1; 2734 } 2735 goto out; 2736 } 2737 2738 global_trace.entries = val; 2739 } 2740 2741 filp->f_pos += cnt; 2742 2743 /* If check pages failed, return ENOMEM */ 2744 if (tracing_disabled) 2745 cnt = -ENOMEM; 2746 out: 2747 for_each_tracing_cpu(cpu) { 2748 if (global_trace.data[cpu]) 2749 atomic_dec(&global_trace.data[cpu]->disabled); 2750 if (max_tr.data[cpu]) 2751 atomic_dec(&max_tr.data[cpu]->disabled); 2752 } 2753 2754 max_tr.entries = global_trace.entries; 2755 mutex_unlock(&trace_types_lock); 2756 2757 return cnt; 2758 } 2759 2760 static int mark_printk(const char *fmt, ...) 2761 { 2762 int ret; 2763 va_list args; 2764 va_start(args, fmt); 2765 ret = trace_vprintk(0, fmt, args); 2766 va_end(args); 2767 return ret; 2768 } 2769 2770 static ssize_t 2771 tracing_mark_write(struct file *filp, const char __user *ubuf, 2772 size_t cnt, loff_t *fpos) 2773 { 2774 char *buf; 2775 char *end; 2776 struct trace_array *tr = &global_trace; 2777 2778 if (!tr->ctrl || tracing_disabled) 2779 return -EINVAL; 2780 2781 if (cnt > TRACE_BUF_SIZE) 2782 cnt = TRACE_BUF_SIZE; 2783 2784 buf = kmalloc(cnt + 1, GFP_KERNEL); 2785 if (buf == NULL) 2786 return -ENOMEM; 2787 2788 if (copy_from_user(buf, ubuf, cnt)) { 2789 kfree(buf); 2790 return -EFAULT; 2791 } 2792 2793 /* Cut from the first nil or newline. */ 2794 buf[cnt] = '\0'; 2795 end = strchr(buf, '\n'); 2796 if (end) 2797 *end = '\0'; 2798 2799 cnt = mark_printk("%s\n", buf); 2800 kfree(buf); 2801 *fpos += cnt; 2802 2803 return cnt; 2804 } 2805 2806 static struct file_operations tracing_max_lat_fops = { 2807 .open = tracing_open_generic, 2808 .read = tracing_max_lat_read, 2809 .write = tracing_max_lat_write, 2810 }; 2811 2812 static struct file_operations tracing_ctrl_fops = { 2813 .open = tracing_open_generic, 2814 .read = tracing_ctrl_read, 2815 .write = tracing_ctrl_write, 2816 }; 2817 2818 static struct file_operations set_tracer_fops = { 2819 .open = tracing_open_generic, 2820 .read = tracing_set_trace_read, 2821 .write = tracing_set_trace_write, 2822 }; 2823 2824 static struct file_operations tracing_pipe_fops = { 2825 .open = tracing_open_pipe, 2826 .poll = tracing_poll_pipe, 2827 .read = tracing_read_pipe, 2828 .release = tracing_release_pipe, 2829 }; 2830 2831 static struct file_operations tracing_entries_fops = { 2832 .open = tracing_open_generic, 2833 .read = tracing_entries_read, 2834 .write = tracing_entries_write, 2835 }; 2836 2837 static struct file_operations tracing_mark_fops = { 2838 .open = tracing_open_generic, 2839 .write = tracing_mark_write, 2840 }; 2841 2842 #ifdef CONFIG_DYNAMIC_FTRACE 2843 2844 static ssize_t 2845 tracing_read_long(struct file *filp, char __user *ubuf, 2846 size_t cnt, loff_t *ppos) 2847 { 2848 unsigned long *p = filp->private_data; 2849 char buf[64]; 2850 int r; 2851 2852 r = sprintf(buf, "%ld\n", *p); 2853 2854 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2855 } 2856 2857 static struct file_operations tracing_read_long_fops = { 2858 .open = tracing_open_generic, 2859 .read = tracing_read_long, 2860 }; 2861 #endif 2862 2863 static struct dentry *d_tracer; 2864 2865 struct dentry *tracing_init_dentry(void) 2866 { 2867 static int once; 2868 2869 if (d_tracer) 2870 return d_tracer; 2871 2872 d_tracer = debugfs_create_dir("tracing", NULL); 2873 2874 if (!d_tracer && !once) { 2875 once = 1; 2876 pr_warning("Could not create debugfs directory 'tracing'\n"); 2877 return NULL; 2878 } 2879 2880 return d_tracer; 2881 } 2882 2883 #ifdef CONFIG_FTRACE_SELFTEST 2884 /* Let selftest have access to static functions in this file */ 2885 #include "trace_selftest.c" 2886 #endif 2887 2888 static __init int tracer_init_debugfs(void) 2889 { 2890 struct dentry *d_tracer; 2891 struct dentry *entry; 2892 2893 d_tracer = tracing_init_dentry(); 2894 2895 entry = debugfs_create_file("tracing_enabled", 0644, d_tracer, 2896 &global_trace, &tracing_ctrl_fops); 2897 if (!entry) 2898 pr_warning("Could not create debugfs 'tracing_enabled' entry\n"); 2899 2900 entry = debugfs_create_file("iter_ctrl", 0644, d_tracer, 2901 NULL, &tracing_iter_fops); 2902 if (!entry) 2903 pr_warning("Could not create debugfs 'iter_ctrl' entry\n"); 2904 2905 entry = debugfs_create_file("tracing_cpumask", 0644, d_tracer, 2906 NULL, &tracing_cpumask_fops); 2907 if (!entry) 2908 pr_warning("Could not create debugfs 'tracing_cpumask' entry\n"); 2909 2910 entry = debugfs_create_file("latency_trace", 0444, d_tracer, 2911 &global_trace, &tracing_lt_fops); 2912 if (!entry) 2913 pr_warning("Could not create debugfs 'latency_trace' entry\n"); 2914 2915 entry = debugfs_create_file("trace", 0444, d_tracer, 2916 &global_trace, &tracing_fops); 2917 if (!entry) 2918 pr_warning("Could not create debugfs 'trace' entry\n"); 2919 2920 entry = debugfs_create_file("available_tracers", 0444, d_tracer, 2921 &global_trace, &show_traces_fops); 2922 if (!entry) 2923 pr_warning("Could not create debugfs 'available_tracers' entry\n"); 2924 2925 entry = debugfs_create_file("current_tracer", 0444, d_tracer, 2926 &global_trace, &set_tracer_fops); 2927 if (!entry) 2928 pr_warning("Could not create debugfs 'current_tracer' entry\n"); 2929 2930 entry = debugfs_create_file("tracing_max_latency", 0644, d_tracer, 2931 &tracing_max_latency, 2932 &tracing_max_lat_fops); 2933 if (!entry) 2934 pr_warning("Could not create debugfs " 2935 "'tracing_max_latency' entry\n"); 2936 2937 entry = debugfs_create_file("tracing_thresh", 0644, d_tracer, 2938 &tracing_thresh, &tracing_max_lat_fops); 2939 if (!entry) 2940 pr_warning("Could not create debugfs " 2941 "'tracing_thresh' entry\n"); 2942 entry = debugfs_create_file("README", 0644, d_tracer, 2943 NULL, &tracing_readme_fops); 2944 if (!entry) 2945 pr_warning("Could not create debugfs 'README' entry\n"); 2946 2947 entry = debugfs_create_file("trace_pipe", 0644, d_tracer, 2948 NULL, &tracing_pipe_fops); 2949 if (!entry) 2950 pr_warning("Could not create debugfs " 2951 "'trace_pipe' entry\n"); 2952 2953 entry = debugfs_create_file("trace_entries", 0644, d_tracer, 2954 &global_trace, &tracing_entries_fops); 2955 if (!entry) 2956 pr_warning("Could not create debugfs " 2957 "'trace_entries' entry\n"); 2958 2959 entry = debugfs_create_file("trace_marker", 0220, d_tracer, 2960 NULL, &tracing_mark_fops); 2961 if (!entry) 2962 pr_warning("Could not create debugfs " 2963 "'trace_marker' entry\n"); 2964 2965 #ifdef CONFIG_DYNAMIC_FTRACE 2966 entry = debugfs_create_file("dyn_ftrace_total_info", 0444, d_tracer, 2967 &ftrace_update_tot_cnt, 2968 &tracing_read_long_fops); 2969 if (!entry) 2970 pr_warning("Could not create debugfs " 2971 "'dyn_ftrace_total_info' entry\n"); 2972 #endif 2973 #ifdef CONFIG_SYSPROF_TRACER 2974 init_tracer_sysprof_debugfs(d_tracer); 2975 #endif 2976 return 0; 2977 } 2978 2979 int trace_vprintk(unsigned long ip, const char *fmt, va_list args) 2980 { 2981 static DEFINE_SPINLOCK(trace_buf_lock); 2982 static char trace_buf[TRACE_BUF_SIZE]; 2983 2984 struct ring_buffer_event *event; 2985 struct trace_array *tr = &global_trace; 2986 struct trace_array_cpu *data; 2987 struct print_entry *entry; 2988 unsigned long flags, irq_flags; 2989 int cpu, len = 0, size, pc; 2990 2991 if (!tr->ctrl || tracing_disabled) 2992 return 0; 2993 2994 pc = preempt_count(); 2995 preempt_disable_notrace(); 2996 cpu = raw_smp_processor_id(); 2997 data = tr->data[cpu]; 2998 2999 if (unlikely(atomic_read(&data->disabled))) 3000 goto out; 3001 3002 spin_lock_irqsave(&trace_buf_lock, flags); 3003 len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args); 3004 3005 len = min(len, TRACE_BUF_SIZE-1); 3006 trace_buf[len] = 0; 3007 3008 size = sizeof(*entry) + len + 1; 3009 event = ring_buffer_lock_reserve(tr->buffer, size, &irq_flags); 3010 if (!event) 3011 goto out_unlock; 3012 entry = ring_buffer_event_data(event); 3013 tracing_generic_entry_update(&entry->ent, flags, pc); 3014 entry->ent.type = TRACE_PRINT; 3015 entry->ip = ip; 3016 3017 memcpy(&entry->buf, trace_buf, len); 3018 entry->buf[len] = 0; 3019 ring_buffer_unlock_commit(tr->buffer, event, irq_flags); 3020 3021 out_unlock: 3022 spin_unlock_irqrestore(&trace_buf_lock, flags); 3023 3024 out: 3025 preempt_enable_notrace(); 3026 3027 return len; 3028 } 3029 EXPORT_SYMBOL_GPL(trace_vprintk); 3030 3031 int __ftrace_printk(unsigned long ip, const char *fmt, ...) 3032 { 3033 int ret; 3034 va_list ap; 3035 3036 if (!(trace_flags & TRACE_ITER_PRINTK)) 3037 return 0; 3038 3039 va_start(ap, fmt); 3040 ret = trace_vprintk(ip, fmt, ap); 3041 va_end(ap); 3042 return ret; 3043 } 3044 EXPORT_SYMBOL_GPL(__ftrace_printk); 3045 3046 static int trace_panic_handler(struct notifier_block *this, 3047 unsigned long event, void *unused) 3048 { 3049 ftrace_dump(); 3050 return NOTIFY_OK; 3051 } 3052 3053 static struct notifier_block trace_panic_notifier = { 3054 .notifier_call = trace_panic_handler, 3055 .next = NULL, 3056 .priority = 150 /* priority: INT_MAX >= x >= 0 */ 3057 }; 3058 3059 static int trace_die_handler(struct notifier_block *self, 3060 unsigned long val, 3061 void *data) 3062 { 3063 switch (val) { 3064 case DIE_OOPS: 3065 ftrace_dump(); 3066 break; 3067 default: 3068 break; 3069 } 3070 return NOTIFY_OK; 3071 } 3072 3073 static struct notifier_block trace_die_notifier = { 3074 .notifier_call = trace_die_handler, 3075 .priority = 200 3076 }; 3077 3078 /* 3079 * printk is set to max of 1024, we really don't need it that big. 3080 * Nothing should be printing 1000 characters anyway. 3081 */ 3082 #define TRACE_MAX_PRINT 1000 3083 3084 /* 3085 * Define here KERN_TRACE so that we have one place to modify 3086 * it if we decide to change what log level the ftrace dump 3087 * should be at. 3088 */ 3089 #define KERN_TRACE KERN_INFO 3090 3091 static void 3092 trace_printk_seq(struct trace_seq *s) 3093 { 3094 /* Probably should print a warning here. */ 3095 if (s->len >= 1000) 3096 s->len = 1000; 3097 3098 /* should be zero ended, but we are paranoid. */ 3099 s->buffer[s->len] = 0; 3100 3101 printk(KERN_TRACE "%s", s->buffer); 3102 3103 trace_seq_reset(s); 3104 } 3105 3106 3107 void ftrace_dump(void) 3108 { 3109 static DEFINE_SPINLOCK(ftrace_dump_lock); 3110 /* use static because iter can be a bit big for the stack */ 3111 static struct trace_iterator iter; 3112 static cpumask_t mask; 3113 static int dump_ran; 3114 unsigned long flags; 3115 int cnt = 0, cpu; 3116 3117 /* only one dump */ 3118 spin_lock_irqsave(&ftrace_dump_lock, flags); 3119 if (dump_ran) 3120 goto out; 3121 3122 dump_ran = 1; 3123 3124 /* No turning back! */ 3125 ftrace_kill(); 3126 3127 for_each_tracing_cpu(cpu) { 3128 atomic_inc(&global_trace.data[cpu]->disabled); 3129 } 3130 3131 printk(KERN_TRACE "Dumping ftrace buffer:\n"); 3132 3133 iter.tr = &global_trace; 3134 iter.trace = current_trace; 3135 3136 /* 3137 * We need to stop all tracing on all CPUS to read the 3138 * the next buffer. This is a bit expensive, but is 3139 * not done often. We fill all what we can read, 3140 * and then release the locks again. 3141 */ 3142 3143 cpus_clear(mask); 3144 3145 while (!trace_empty(&iter)) { 3146 3147 if (!cnt) 3148 printk(KERN_TRACE "---------------------------------\n"); 3149 3150 cnt++; 3151 3152 /* reset all but tr, trace, and overruns */ 3153 memset(&iter.seq, 0, 3154 sizeof(struct trace_iterator) - 3155 offsetof(struct trace_iterator, seq)); 3156 iter.iter_flags |= TRACE_FILE_LAT_FMT; 3157 iter.pos = -1; 3158 3159 if (find_next_entry_inc(&iter) != NULL) { 3160 print_trace_line(&iter); 3161 trace_consume(&iter); 3162 } 3163 3164 trace_printk_seq(&iter.seq); 3165 } 3166 3167 if (!cnt) 3168 printk(KERN_TRACE " (ftrace buffer empty)\n"); 3169 else 3170 printk(KERN_TRACE "---------------------------------\n"); 3171 3172 out: 3173 spin_unlock_irqrestore(&ftrace_dump_lock, flags); 3174 } 3175 3176 __init static int tracer_alloc_buffers(void) 3177 { 3178 struct trace_array_cpu *data; 3179 int i; 3180 3181 /* TODO: make the number of buffers hot pluggable with CPUS */ 3182 tracing_buffer_mask = cpu_possible_map; 3183 3184 global_trace.buffer = ring_buffer_alloc(trace_buf_size, 3185 TRACE_BUFFER_FLAGS); 3186 if (!global_trace.buffer) { 3187 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n"); 3188 WARN_ON(1); 3189 return 0; 3190 } 3191 global_trace.entries = ring_buffer_size(global_trace.buffer); 3192 3193 #ifdef CONFIG_TRACER_MAX_TRACE 3194 max_tr.buffer = ring_buffer_alloc(trace_buf_size, 3195 TRACE_BUFFER_FLAGS); 3196 if (!max_tr.buffer) { 3197 printk(KERN_ERR "tracer: failed to allocate max ring buffer!\n"); 3198 WARN_ON(1); 3199 ring_buffer_free(global_trace.buffer); 3200 return 0; 3201 } 3202 max_tr.entries = ring_buffer_size(max_tr.buffer); 3203 WARN_ON(max_tr.entries != global_trace.entries); 3204 #endif 3205 3206 /* Allocate the first page for all buffers */ 3207 for_each_tracing_cpu(i) { 3208 data = global_trace.data[i] = &per_cpu(global_trace_cpu, i); 3209 max_tr.data[i] = &per_cpu(max_data, i); 3210 } 3211 3212 trace_init_cmdlines(); 3213 3214 register_tracer(&nop_trace); 3215 #ifdef CONFIG_BOOT_TRACER 3216 register_tracer(&boot_tracer); 3217 current_trace = &boot_tracer; 3218 current_trace->init(&global_trace); 3219 #else 3220 current_trace = &nop_trace; 3221 #endif 3222 3223 /* All seems OK, enable tracing */ 3224 global_trace.ctrl = tracer_enabled; 3225 tracing_disabled = 0; 3226 3227 atomic_notifier_chain_register(&panic_notifier_list, 3228 &trace_panic_notifier); 3229 3230 register_die_notifier(&trace_die_notifier); 3231 3232 return 0; 3233 } 3234 early_initcall(tracer_alloc_buffers); 3235 fs_initcall(tracer_init_debugfs); 3236