1 /* 2 * Infrastructure for profiling code inserted by 'gcc -pg'. 3 * 4 * Copyright (C) 2007-2008 Steven Rostedt <[email protected]> 5 * Copyright (C) 2004-2008 Ingo Molnar <[email protected]> 6 * 7 * Originally ported from the -rt patch by: 8 * Copyright (C) 2007 Arnaldo Carvalho de Melo <[email protected]> 9 * 10 * Based on code in the latency_tracer, that is: 11 * 12 * Copyright (C) 2004-2006 Ingo Molnar 13 * Copyright (C) 2004 William Lee Irwin III 14 */ 15 16 #include <linux/stop_machine.h> 17 #include <linux/clocksource.h> 18 #include <linux/kallsyms.h> 19 #include <linux/seq_file.h> 20 #include <linux/suspend.h> 21 #include <linux/debugfs.h> 22 #include <linux/hardirq.h> 23 #include <linux/kthread.h> 24 #include <linux/uaccess.h> 25 #include <linux/kprobes.h> 26 #include <linux/ftrace.h> 27 #include <linux/sysctl.h> 28 #include <linux/ctype.h> 29 #include <linux/list.h> 30 #include <linux/hash.h> 31 32 #include <trace/events/sched.h> 33 34 #include <asm/ftrace.h> 35 #include <asm/setup.h> 36 37 #include "trace_output.h" 38 #include "trace_stat.h" 39 40 #define FTRACE_WARN_ON(cond) \ 41 do { \ 42 if (WARN_ON(cond)) \ 43 ftrace_kill(); \ 44 } while (0) 45 46 #define FTRACE_WARN_ON_ONCE(cond) \ 47 do { \ 48 if (WARN_ON_ONCE(cond)) \ 49 ftrace_kill(); \ 50 } while (0) 51 52 /* hash bits for specific function selection */ 53 #define FTRACE_HASH_BITS 7 54 #define FTRACE_FUNC_HASHSIZE (1 << FTRACE_HASH_BITS) 55 56 /* ftrace_enabled is a method to turn ftrace on or off */ 57 int ftrace_enabled __read_mostly; 58 static int last_ftrace_enabled; 59 60 /* Quick disabling of function tracer. */ 61 int function_trace_stop; 62 63 /* 64 * ftrace_disabled is set when an anomaly is discovered. 65 * ftrace_disabled is much stronger than ftrace_enabled. 66 */ 67 static int ftrace_disabled __read_mostly; 68 69 static DEFINE_MUTEX(ftrace_lock); 70 71 static struct ftrace_ops ftrace_list_end __read_mostly = 72 { 73 .func = ftrace_stub, 74 }; 75 76 static struct ftrace_ops *ftrace_list __read_mostly = &ftrace_list_end; 77 ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; 78 ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub; 79 ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub; 80 81 static void ftrace_list_func(unsigned long ip, unsigned long parent_ip) 82 { 83 struct ftrace_ops *op = ftrace_list; 84 85 /* in case someone actually ports this to alpha! */ 86 read_barrier_depends(); 87 88 while (op != &ftrace_list_end) { 89 /* silly alpha */ 90 read_barrier_depends(); 91 op->func(ip, parent_ip); 92 op = op->next; 93 }; 94 } 95 96 static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip) 97 { 98 if (!test_tsk_trace_trace(current)) 99 return; 100 101 ftrace_pid_function(ip, parent_ip); 102 } 103 104 static void set_ftrace_pid_function(ftrace_func_t func) 105 { 106 /* do not set ftrace_pid_function to itself! */ 107 if (func != ftrace_pid_func) 108 ftrace_pid_function = func; 109 } 110 111 /** 112 * clear_ftrace_function - reset the ftrace function 113 * 114 * This NULLs the ftrace function and in essence stops 115 * tracing. There may be lag 116 */ 117 void clear_ftrace_function(void) 118 { 119 ftrace_trace_function = ftrace_stub; 120 __ftrace_trace_function = ftrace_stub; 121 ftrace_pid_function = ftrace_stub; 122 } 123 124 #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 125 /* 126 * For those archs that do not test ftrace_trace_stop in their 127 * mcount call site, we need to do it from C. 128 */ 129 static void ftrace_test_stop_func(unsigned long ip, unsigned long parent_ip) 130 { 131 if (function_trace_stop) 132 return; 133 134 __ftrace_trace_function(ip, parent_ip); 135 } 136 #endif 137 138 static int __register_ftrace_function(struct ftrace_ops *ops) 139 { 140 ops->next = ftrace_list; 141 /* 142 * We are entering ops into the ftrace_list but another 143 * CPU might be walking that list. We need to make sure 144 * the ops->next pointer is valid before another CPU sees 145 * the ops pointer included into the ftrace_list. 146 */ 147 smp_wmb(); 148 ftrace_list = ops; 149 150 if (ftrace_enabled) { 151 ftrace_func_t func; 152 153 if (ops->next == &ftrace_list_end) 154 func = ops->func; 155 else 156 func = ftrace_list_func; 157 158 if (ftrace_pid_trace) { 159 set_ftrace_pid_function(func); 160 func = ftrace_pid_func; 161 } 162 163 /* 164 * For one func, simply call it directly. 165 * For more than one func, call the chain. 166 */ 167 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 168 ftrace_trace_function = func; 169 #else 170 __ftrace_trace_function = func; 171 ftrace_trace_function = ftrace_test_stop_func; 172 #endif 173 } 174 175 return 0; 176 } 177 178 static int __unregister_ftrace_function(struct ftrace_ops *ops) 179 { 180 struct ftrace_ops **p; 181 182 /* 183 * If we are removing the last function, then simply point 184 * to the ftrace_stub. 185 */ 186 if (ftrace_list == ops && ops->next == &ftrace_list_end) { 187 ftrace_trace_function = ftrace_stub; 188 ftrace_list = &ftrace_list_end; 189 return 0; 190 } 191 192 for (p = &ftrace_list; *p != &ftrace_list_end; p = &(*p)->next) 193 if (*p == ops) 194 break; 195 196 if (*p != ops) 197 return -1; 198 199 *p = (*p)->next; 200 201 if (ftrace_enabled) { 202 /* If we only have one func left, then call that directly */ 203 if (ftrace_list->next == &ftrace_list_end) { 204 ftrace_func_t func = ftrace_list->func; 205 206 if (ftrace_pid_trace) { 207 set_ftrace_pid_function(func); 208 func = ftrace_pid_func; 209 } 210 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 211 ftrace_trace_function = func; 212 #else 213 __ftrace_trace_function = func; 214 #endif 215 } 216 } 217 218 return 0; 219 } 220 221 static void ftrace_update_pid_func(void) 222 { 223 ftrace_func_t func; 224 225 if (ftrace_trace_function == ftrace_stub) 226 return; 227 228 func = ftrace_trace_function; 229 230 if (ftrace_pid_trace) { 231 set_ftrace_pid_function(func); 232 func = ftrace_pid_func; 233 } else { 234 if (func == ftrace_pid_func) 235 func = ftrace_pid_function; 236 } 237 238 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 239 ftrace_trace_function = func; 240 #else 241 __ftrace_trace_function = func; 242 #endif 243 } 244 245 #ifdef CONFIG_FUNCTION_PROFILER 246 struct ftrace_profile { 247 struct hlist_node node; 248 unsigned long ip; 249 unsigned long counter; 250 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 251 unsigned long long time; 252 #endif 253 }; 254 255 struct ftrace_profile_page { 256 struct ftrace_profile_page *next; 257 unsigned long index; 258 struct ftrace_profile records[]; 259 }; 260 261 struct ftrace_profile_stat { 262 atomic_t disabled; 263 struct hlist_head *hash; 264 struct ftrace_profile_page *pages; 265 struct ftrace_profile_page *start; 266 struct tracer_stat stat; 267 }; 268 269 #define PROFILE_RECORDS_SIZE \ 270 (PAGE_SIZE - offsetof(struct ftrace_profile_page, records)) 271 272 #define PROFILES_PER_PAGE \ 273 (PROFILE_RECORDS_SIZE / sizeof(struct ftrace_profile)) 274 275 static int ftrace_profile_bits __read_mostly; 276 static int ftrace_profile_enabled __read_mostly; 277 278 /* ftrace_profile_lock - synchronize the enable and disable of the profiler */ 279 static DEFINE_MUTEX(ftrace_profile_lock); 280 281 static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats); 282 283 #define FTRACE_PROFILE_HASH_SIZE 1024 /* must be power of 2 */ 284 285 static void * 286 function_stat_next(void *v, int idx) 287 { 288 struct ftrace_profile *rec = v; 289 struct ftrace_profile_page *pg; 290 291 pg = (struct ftrace_profile_page *)((unsigned long)rec & PAGE_MASK); 292 293 again: 294 if (idx != 0) 295 rec++; 296 297 if ((void *)rec >= (void *)&pg->records[pg->index]) { 298 pg = pg->next; 299 if (!pg) 300 return NULL; 301 rec = &pg->records[0]; 302 if (!rec->counter) 303 goto again; 304 } 305 306 return rec; 307 } 308 309 static void *function_stat_start(struct tracer_stat *trace) 310 { 311 struct ftrace_profile_stat *stat = 312 container_of(trace, struct ftrace_profile_stat, stat); 313 314 if (!stat || !stat->start) 315 return NULL; 316 317 return function_stat_next(&stat->start->records[0], 0); 318 } 319 320 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 321 /* function graph compares on total time */ 322 static int function_stat_cmp(void *p1, void *p2) 323 { 324 struct ftrace_profile *a = p1; 325 struct ftrace_profile *b = p2; 326 327 if (a->time < b->time) 328 return -1; 329 if (a->time > b->time) 330 return 1; 331 else 332 return 0; 333 } 334 #else 335 /* not function graph compares against hits */ 336 static int function_stat_cmp(void *p1, void *p2) 337 { 338 struct ftrace_profile *a = p1; 339 struct ftrace_profile *b = p2; 340 341 if (a->counter < b->counter) 342 return -1; 343 if (a->counter > b->counter) 344 return 1; 345 else 346 return 0; 347 } 348 #endif 349 350 static int function_stat_headers(struct seq_file *m) 351 { 352 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 353 seq_printf(m, " Function " 354 "Hit Time Avg\n" 355 " -------- " 356 "--- ---- ---\n"); 357 #else 358 seq_printf(m, " Function Hit\n" 359 " -------- ---\n"); 360 #endif 361 return 0; 362 } 363 364 static int function_stat_show(struct seq_file *m, void *v) 365 { 366 struct ftrace_profile *rec = v; 367 char str[KSYM_SYMBOL_LEN]; 368 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 369 static DEFINE_MUTEX(mutex); 370 static struct trace_seq s; 371 unsigned long long avg; 372 #endif 373 374 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 375 seq_printf(m, " %-30.30s %10lu", str, rec->counter); 376 377 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 378 seq_printf(m, " "); 379 avg = rec->time; 380 do_div(avg, rec->counter); 381 382 mutex_lock(&mutex); 383 trace_seq_init(&s); 384 trace_print_graph_duration(rec->time, &s); 385 trace_seq_puts(&s, " "); 386 trace_print_graph_duration(avg, &s); 387 trace_print_seq(m, &s); 388 mutex_unlock(&mutex); 389 #endif 390 seq_putc(m, '\n'); 391 392 return 0; 393 } 394 395 static void ftrace_profile_reset(struct ftrace_profile_stat *stat) 396 { 397 struct ftrace_profile_page *pg; 398 399 pg = stat->pages = stat->start; 400 401 while (pg) { 402 memset(pg->records, 0, PROFILE_RECORDS_SIZE); 403 pg->index = 0; 404 pg = pg->next; 405 } 406 407 memset(stat->hash, 0, 408 FTRACE_PROFILE_HASH_SIZE * sizeof(struct hlist_head)); 409 } 410 411 int ftrace_profile_pages_init(struct ftrace_profile_stat *stat) 412 { 413 struct ftrace_profile_page *pg; 414 int functions; 415 int pages; 416 int i; 417 418 /* If we already allocated, do nothing */ 419 if (stat->pages) 420 return 0; 421 422 stat->pages = (void *)get_zeroed_page(GFP_KERNEL); 423 if (!stat->pages) 424 return -ENOMEM; 425 426 #ifdef CONFIG_DYNAMIC_FTRACE 427 functions = ftrace_update_tot_cnt; 428 #else 429 /* 430 * We do not know the number of functions that exist because 431 * dynamic tracing is what counts them. With past experience 432 * we have around 20K functions. That should be more than enough. 433 * It is highly unlikely we will execute every function in 434 * the kernel. 435 */ 436 functions = 20000; 437 #endif 438 439 pg = stat->start = stat->pages; 440 441 pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE); 442 443 for (i = 0; i < pages; i++) { 444 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 445 if (!pg->next) 446 goto out_free; 447 pg = pg->next; 448 } 449 450 return 0; 451 452 out_free: 453 pg = stat->start; 454 while (pg) { 455 unsigned long tmp = (unsigned long)pg; 456 457 pg = pg->next; 458 free_page(tmp); 459 } 460 461 free_page((unsigned long)stat->pages); 462 stat->pages = NULL; 463 stat->start = NULL; 464 465 return -ENOMEM; 466 } 467 468 static int ftrace_profile_init_cpu(int cpu) 469 { 470 struct ftrace_profile_stat *stat; 471 int size; 472 473 stat = &per_cpu(ftrace_profile_stats, cpu); 474 475 if (stat->hash) { 476 /* If the profile is already created, simply reset it */ 477 ftrace_profile_reset(stat); 478 return 0; 479 } 480 481 /* 482 * We are profiling all functions, but usually only a few thousand 483 * functions are hit. We'll make a hash of 1024 items. 484 */ 485 size = FTRACE_PROFILE_HASH_SIZE; 486 487 stat->hash = kzalloc(sizeof(struct hlist_head) * size, GFP_KERNEL); 488 489 if (!stat->hash) 490 return -ENOMEM; 491 492 if (!ftrace_profile_bits) { 493 size--; 494 495 for (; size; size >>= 1) 496 ftrace_profile_bits++; 497 } 498 499 /* Preallocate the function profiling pages */ 500 if (ftrace_profile_pages_init(stat) < 0) { 501 kfree(stat->hash); 502 stat->hash = NULL; 503 return -ENOMEM; 504 } 505 506 return 0; 507 } 508 509 static int ftrace_profile_init(void) 510 { 511 int cpu; 512 int ret = 0; 513 514 for_each_online_cpu(cpu) { 515 ret = ftrace_profile_init_cpu(cpu); 516 if (ret) 517 break; 518 } 519 520 return ret; 521 } 522 523 /* interrupts must be disabled */ 524 static struct ftrace_profile * 525 ftrace_find_profiled_func(struct ftrace_profile_stat *stat, unsigned long ip) 526 { 527 struct ftrace_profile *rec; 528 struct hlist_head *hhd; 529 struct hlist_node *n; 530 unsigned long key; 531 532 key = hash_long(ip, ftrace_profile_bits); 533 hhd = &stat->hash[key]; 534 535 if (hlist_empty(hhd)) 536 return NULL; 537 538 hlist_for_each_entry_rcu(rec, n, hhd, node) { 539 if (rec->ip == ip) 540 return rec; 541 } 542 543 return NULL; 544 } 545 546 static void ftrace_add_profile(struct ftrace_profile_stat *stat, 547 struct ftrace_profile *rec) 548 { 549 unsigned long key; 550 551 key = hash_long(rec->ip, ftrace_profile_bits); 552 hlist_add_head_rcu(&rec->node, &stat->hash[key]); 553 } 554 555 /* 556 * The memory is already allocated, this simply finds a new record to use. 557 */ 558 static struct ftrace_profile * 559 ftrace_profile_alloc(struct ftrace_profile_stat *stat, unsigned long ip) 560 { 561 struct ftrace_profile *rec = NULL; 562 563 /* prevent recursion (from NMIs) */ 564 if (atomic_inc_return(&stat->disabled) != 1) 565 goto out; 566 567 /* 568 * Try to find the function again since an NMI 569 * could have added it 570 */ 571 rec = ftrace_find_profiled_func(stat, ip); 572 if (rec) 573 goto out; 574 575 if (stat->pages->index == PROFILES_PER_PAGE) { 576 if (!stat->pages->next) 577 goto out; 578 stat->pages = stat->pages->next; 579 } 580 581 rec = &stat->pages->records[stat->pages->index++]; 582 rec->ip = ip; 583 ftrace_add_profile(stat, rec); 584 585 out: 586 atomic_dec(&stat->disabled); 587 588 return rec; 589 } 590 591 static void 592 function_profile_call(unsigned long ip, unsigned long parent_ip) 593 { 594 struct ftrace_profile_stat *stat; 595 struct ftrace_profile *rec; 596 unsigned long flags; 597 598 if (!ftrace_profile_enabled) 599 return; 600 601 local_irq_save(flags); 602 603 stat = &__get_cpu_var(ftrace_profile_stats); 604 if (!stat->hash || !ftrace_profile_enabled) 605 goto out; 606 607 rec = ftrace_find_profiled_func(stat, ip); 608 if (!rec) { 609 rec = ftrace_profile_alloc(stat, ip); 610 if (!rec) 611 goto out; 612 } 613 614 rec->counter++; 615 out: 616 local_irq_restore(flags); 617 } 618 619 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 620 static int profile_graph_entry(struct ftrace_graph_ent *trace) 621 { 622 function_profile_call(trace->func, 0); 623 return 1; 624 } 625 626 static void profile_graph_return(struct ftrace_graph_ret *trace) 627 { 628 struct ftrace_profile_stat *stat; 629 unsigned long long calltime; 630 struct ftrace_profile *rec; 631 unsigned long flags; 632 633 local_irq_save(flags); 634 stat = &__get_cpu_var(ftrace_profile_stats); 635 if (!stat->hash || !ftrace_profile_enabled) 636 goto out; 637 638 calltime = trace->rettime - trace->calltime; 639 640 if (!(trace_flags & TRACE_ITER_GRAPH_TIME)) { 641 int index; 642 643 index = trace->depth; 644 645 /* Append this call time to the parent time to subtract */ 646 if (index) 647 current->ret_stack[index - 1].subtime += calltime; 648 649 if (current->ret_stack[index].subtime < calltime) 650 calltime -= current->ret_stack[index].subtime; 651 else 652 calltime = 0; 653 } 654 655 rec = ftrace_find_profiled_func(stat, trace->func); 656 if (rec) 657 rec->time += calltime; 658 659 out: 660 local_irq_restore(flags); 661 } 662 663 static int register_ftrace_profiler(void) 664 { 665 return register_ftrace_graph(&profile_graph_return, 666 &profile_graph_entry); 667 } 668 669 static void unregister_ftrace_profiler(void) 670 { 671 unregister_ftrace_graph(); 672 } 673 #else 674 static struct ftrace_ops ftrace_profile_ops __read_mostly = 675 { 676 .func = function_profile_call, 677 }; 678 679 static int register_ftrace_profiler(void) 680 { 681 return register_ftrace_function(&ftrace_profile_ops); 682 } 683 684 static void unregister_ftrace_profiler(void) 685 { 686 unregister_ftrace_function(&ftrace_profile_ops); 687 } 688 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 689 690 static ssize_t 691 ftrace_profile_write(struct file *filp, const char __user *ubuf, 692 size_t cnt, loff_t *ppos) 693 { 694 unsigned long val; 695 char buf[64]; /* big enough to hold a number */ 696 int ret; 697 698 if (cnt >= sizeof(buf)) 699 return -EINVAL; 700 701 if (copy_from_user(&buf, ubuf, cnt)) 702 return -EFAULT; 703 704 buf[cnt] = 0; 705 706 ret = strict_strtoul(buf, 10, &val); 707 if (ret < 0) 708 return ret; 709 710 val = !!val; 711 712 mutex_lock(&ftrace_profile_lock); 713 if (ftrace_profile_enabled ^ val) { 714 if (val) { 715 ret = ftrace_profile_init(); 716 if (ret < 0) { 717 cnt = ret; 718 goto out; 719 } 720 721 ret = register_ftrace_profiler(); 722 if (ret < 0) { 723 cnt = ret; 724 goto out; 725 } 726 ftrace_profile_enabled = 1; 727 } else { 728 ftrace_profile_enabled = 0; 729 /* 730 * unregister_ftrace_profiler calls stop_machine 731 * so this acts like an synchronize_sched. 732 */ 733 unregister_ftrace_profiler(); 734 } 735 } 736 out: 737 mutex_unlock(&ftrace_profile_lock); 738 739 filp->f_pos += cnt; 740 741 return cnt; 742 } 743 744 static ssize_t 745 ftrace_profile_read(struct file *filp, char __user *ubuf, 746 size_t cnt, loff_t *ppos) 747 { 748 char buf[64]; /* big enough to hold a number */ 749 int r; 750 751 r = sprintf(buf, "%u\n", ftrace_profile_enabled); 752 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 753 } 754 755 static const struct file_operations ftrace_profile_fops = { 756 .open = tracing_open_generic, 757 .read = ftrace_profile_read, 758 .write = ftrace_profile_write, 759 }; 760 761 /* used to initialize the real stat files */ 762 static struct tracer_stat function_stats __initdata = { 763 .name = "functions", 764 .stat_start = function_stat_start, 765 .stat_next = function_stat_next, 766 .stat_cmp = function_stat_cmp, 767 .stat_headers = function_stat_headers, 768 .stat_show = function_stat_show 769 }; 770 771 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 772 { 773 struct ftrace_profile_stat *stat; 774 struct dentry *entry; 775 char *name; 776 int ret; 777 int cpu; 778 779 for_each_possible_cpu(cpu) { 780 stat = &per_cpu(ftrace_profile_stats, cpu); 781 782 /* allocate enough for function name + cpu number */ 783 name = kmalloc(32, GFP_KERNEL); 784 if (!name) { 785 /* 786 * The files created are permanent, if something happens 787 * we still do not free memory. 788 */ 789 WARN(1, 790 "Could not allocate stat file for cpu %d\n", 791 cpu); 792 return; 793 } 794 stat->stat = function_stats; 795 snprintf(name, 32, "function%d", cpu); 796 stat->stat.name = name; 797 ret = register_stat_tracer(&stat->stat); 798 if (ret) { 799 WARN(1, 800 "Could not register function stat for cpu %d\n", 801 cpu); 802 kfree(name); 803 return; 804 } 805 } 806 807 entry = debugfs_create_file("function_profile_enabled", 0644, 808 d_tracer, NULL, &ftrace_profile_fops); 809 if (!entry) 810 pr_warning("Could not create debugfs " 811 "'function_profile_enabled' entry\n"); 812 } 813 814 #else /* CONFIG_FUNCTION_PROFILER */ 815 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 816 { 817 } 818 #endif /* CONFIG_FUNCTION_PROFILER */ 819 820 /* set when tracing only a pid */ 821 struct pid *ftrace_pid_trace; 822 static struct pid * const ftrace_swapper_pid = &init_struct_pid; 823 824 #ifdef CONFIG_DYNAMIC_FTRACE 825 826 #ifndef CONFIG_FTRACE_MCOUNT_RECORD 827 # error Dynamic ftrace depends on MCOUNT_RECORD 828 #endif 829 830 static struct hlist_head ftrace_func_hash[FTRACE_FUNC_HASHSIZE] __read_mostly; 831 832 struct ftrace_func_probe { 833 struct hlist_node node; 834 struct ftrace_probe_ops *ops; 835 unsigned long flags; 836 unsigned long ip; 837 void *data; 838 struct rcu_head rcu; 839 }; 840 841 enum { 842 FTRACE_ENABLE_CALLS = (1 << 0), 843 FTRACE_DISABLE_CALLS = (1 << 1), 844 FTRACE_UPDATE_TRACE_FUNC = (1 << 2), 845 FTRACE_ENABLE_MCOUNT = (1 << 3), 846 FTRACE_DISABLE_MCOUNT = (1 << 4), 847 FTRACE_START_FUNC_RET = (1 << 5), 848 FTRACE_STOP_FUNC_RET = (1 << 6), 849 }; 850 851 static int ftrace_filtered; 852 853 static struct dyn_ftrace *ftrace_new_addrs; 854 855 static DEFINE_MUTEX(ftrace_regex_lock); 856 857 struct ftrace_page { 858 struct ftrace_page *next; 859 int index; 860 struct dyn_ftrace records[]; 861 }; 862 863 #define ENTRIES_PER_PAGE \ 864 ((PAGE_SIZE - sizeof(struct ftrace_page)) / sizeof(struct dyn_ftrace)) 865 866 /* estimate from running different kernels */ 867 #define NR_TO_INIT 10000 868 869 static struct ftrace_page *ftrace_pages_start; 870 static struct ftrace_page *ftrace_pages; 871 872 static struct dyn_ftrace *ftrace_free_records; 873 874 /* 875 * This is a double for. Do not use 'break' to break out of the loop, 876 * you must use a goto. 877 */ 878 #define do_for_each_ftrace_rec(pg, rec) \ 879 for (pg = ftrace_pages_start; pg; pg = pg->next) { \ 880 int _____i; \ 881 for (_____i = 0; _____i < pg->index; _____i++) { \ 882 rec = &pg->records[_____i]; 883 884 #define while_for_each_ftrace_rec() \ 885 } \ 886 } 887 888 #ifdef CONFIG_KPROBES 889 890 static int frozen_record_count; 891 892 static inline void freeze_record(struct dyn_ftrace *rec) 893 { 894 if (!(rec->flags & FTRACE_FL_FROZEN)) { 895 rec->flags |= FTRACE_FL_FROZEN; 896 frozen_record_count++; 897 } 898 } 899 900 static inline void unfreeze_record(struct dyn_ftrace *rec) 901 { 902 if (rec->flags & FTRACE_FL_FROZEN) { 903 rec->flags &= ~FTRACE_FL_FROZEN; 904 frozen_record_count--; 905 } 906 } 907 908 static inline int record_frozen(struct dyn_ftrace *rec) 909 { 910 return rec->flags & FTRACE_FL_FROZEN; 911 } 912 #else 913 # define freeze_record(rec) ({ 0; }) 914 # define unfreeze_record(rec) ({ 0; }) 915 # define record_frozen(rec) ({ 0; }) 916 #endif /* CONFIG_KPROBES */ 917 918 static void ftrace_free_rec(struct dyn_ftrace *rec) 919 { 920 rec->freelist = ftrace_free_records; 921 ftrace_free_records = rec; 922 rec->flags |= FTRACE_FL_FREE; 923 } 924 925 static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip) 926 { 927 struct dyn_ftrace *rec; 928 929 /* First check for freed records */ 930 if (ftrace_free_records) { 931 rec = ftrace_free_records; 932 933 if (unlikely(!(rec->flags & FTRACE_FL_FREE))) { 934 FTRACE_WARN_ON_ONCE(1); 935 ftrace_free_records = NULL; 936 return NULL; 937 } 938 939 ftrace_free_records = rec->freelist; 940 memset(rec, 0, sizeof(*rec)); 941 return rec; 942 } 943 944 if (ftrace_pages->index == ENTRIES_PER_PAGE) { 945 if (!ftrace_pages->next) { 946 /* allocate another page */ 947 ftrace_pages->next = 948 (void *)get_zeroed_page(GFP_KERNEL); 949 if (!ftrace_pages->next) 950 return NULL; 951 } 952 ftrace_pages = ftrace_pages->next; 953 } 954 955 return &ftrace_pages->records[ftrace_pages->index++]; 956 } 957 958 static struct dyn_ftrace * 959 ftrace_record_ip(unsigned long ip) 960 { 961 struct dyn_ftrace *rec; 962 963 if (ftrace_disabled) 964 return NULL; 965 966 rec = ftrace_alloc_dyn_node(ip); 967 if (!rec) 968 return NULL; 969 970 rec->ip = ip; 971 rec->newlist = ftrace_new_addrs; 972 ftrace_new_addrs = rec; 973 974 return rec; 975 } 976 977 static void print_ip_ins(const char *fmt, unsigned char *p) 978 { 979 int i; 980 981 printk(KERN_CONT "%s", fmt); 982 983 for (i = 0; i < MCOUNT_INSN_SIZE; i++) 984 printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); 985 } 986 987 static void ftrace_bug(int failed, unsigned long ip) 988 { 989 switch (failed) { 990 case -EFAULT: 991 FTRACE_WARN_ON_ONCE(1); 992 pr_info("ftrace faulted on modifying "); 993 print_ip_sym(ip); 994 break; 995 case -EINVAL: 996 FTRACE_WARN_ON_ONCE(1); 997 pr_info("ftrace failed to modify "); 998 print_ip_sym(ip); 999 print_ip_ins(" actual: ", (unsigned char *)ip); 1000 printk(KERN_CONT "\n"); 1001 break; 1002 case -EPERM: 1003 FTRACE_WARN_ON_ONCE(1); 1004 pr_info("ftrace faulted on writing "); 1005 print_ip_sym(ip); 1006 break; 1007 default: 1008 FTRACE_WARN_ON_ONCE(1); 1009 pr_info("ftrace faulted on unknown error "); 1010 print_ip_sym(ip); 1011 } 1012 } 1013 1014 1015 static int 1016 __ftrace_replace_code(struct dyn_ftrace *rec, int enable) 1017 { 1018 unsigned long ftrace_addr; 1019 unsigned long flag = 0UL; 1020 1021 ftrace_addr = (unsigned long)FTRACE_ADDR; 1022 1023 /* 1024 * If this record is not to be traced or we want to disable it, 1025 * then disable it. 1026 * 1027 * If we want to enable it and filtering is off, then enable it. 1028 * 1029 * If we want to enable it and filtering is on, enable it only if 1030 * it's filtered 1031 */ 1032 if (enable && !(rec->flags & FTRACE_FL_NOTRACE)) { 1033 if (!ftrace_filtered || (rec->flags & FTRACE_FL_FILTER)) 1034 flag = FTRACE_FL_ENABLED; 1035 } 1036 1037 /* If the state of this record hasn't changed, then do nothing */ 1038 if ((rec->flags & FTRACE_FL_ENABLED) == flag) 1039 return 0; 1040 1041 if (flag) { 1042 rec->flags |= FTRACE_FL_ENABLED; 1043 return ftrace_make_call(rec, ftrace_addr); 1044 } 1045 1046 rec->flags &= ~FTRACE_FL_ENABLED; 1047 return ftrace_make_nop(NULL, rec, ftrace_addr); 1048 } 1049 1050 static void ftrace_replace_code(int enable) 1051 { 1052 struct dyn_ftrace *rec; 1053 struct ftrace_page *pg; 1054 int failed; 1055 1056 do_for_each_ftrace_rec(pg, rec) { 1057 /* 1058 * Skip over free records, records that have 1059 * failed and not converted. 1060 */ 1061 if (rec->flags & FTRACE_FL_FREE || 1062 rec->flags & FTRACE_FL_FAILED || 1063 !(rec->flags & FTRACE_FL_CONVERTED)) 1064 continue; 1065 1066 /* ignore updates to this record's mcount site */ 1067 if (get_kprobe((void *)rec->ip)) { 1068 freeze_record(rec); 1069 continue; 1070 } else { 1071 unfreeze_record(rec); 1072 } 1073 1074 failed = __ftrace_replace_code(rec, enable); 1075 if (failed) { 1076 rec->flags |= FTRACE_FL_FAILED; 1077 if ((system_state == SYSTEM_BOOTING) || 1078 !core_kernel_text(rec->ip)) { 1079 ftrace_free_rec(rec); 1080 } else { 1081 ftrace_bug(failed, rec->ip); 1082 /* Stop processing */ 1083 return; 1084 } 1085 } 1086 } while_for_each_ftrace_rec(); 1087 } 1088 1089 static int 1090 ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) 1091 { 1092 unsigned long ip; 1093 int ret; 1094 1095 ip = rec->ip; 1096 1097 ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); 1098 if (ret) { 1099 ftrace_bug(ret, ip); 1100 rec->flags |= FTRACE_FL_FAILED; 1101 return 0; 1102 } 1103 return 1; 1104 } 1105 1106 /* 1107 * archs can override this function if they must do something 1108 * before the modifying code is performed. 1109 */ 1110 int __weak ftrace_arch_code_modify_prepare(void) 1111 { 1112 return 0; 1113 } 1114 1115 /* 1116 * archs can override this function if they must do something 1117 * after the modifying code is performed. 1118 */ 1119 int __weak ftrace_arch_code_modify_post_process(void) 1120 { 1121 return 0; 1122 } 1123 1124 static int __ftrace_modify_code(void *data) 1125 { 1126 int *command = data; 1127 1128 if (*command & FTRACE_ENABLE_CALLS) 1129 ftrace_replace_code(1); 1130 else if (*command & FTRACE_DISABLE_CALLS) 1131 ftrace_replace_code(0); 1132 1133 if (*command & FTRACE_UPDATE_TRACE_FUNC) 1134 ftrace_update_ftrace_func(ftrace_trace_function); 1135 1136 if (*command & FTRACE_START_FUNC_RET) 1137 ftrace_enable_ftrace_graph_caller(); 1138 else if (*command & FTRACE_STOP_FUNC_RET) 1139 ftrace_disable_ftrace_graph_caller(); 1140 1141 return 0; 1142 } 1143 1144 static void ftrace_run_update_code(int command) 1145 { 1146 int ret; 1147 1148 ret = ftrace_arch_code_modify_prepare(); 1149 FTRACE_WARN_ON(ret); 1150 if (ret) 1151 return; 1152 1153 stop_machine(__ftrace_modify_code, &command, NULL); 1154 1155 ret = ftrace_arch_code_modify_post_process(); 1156 FTRACE_WARN_ON(ret); 1157 } 1158 1159 static ftrace_func_t saved_ftrace_func; 1160 static int ftrace_start_up; 1161 1162 static void ftrace_startup_enable(int command) 1163 { 1164 if (saved_ftrace_func != ftrace_trace_function) { 1165 saved_ftrace_func = ftrace_trace_function; 1166 command |= FTRACE_UPDATE_TRACE_FUNC; 1167 } 1168 1169 if (!command || !ftrace_enabled) 1170 return; 1171 1172 ftrace_run_update_code(command); 1173 } 1174 1175 static void ftrace_startup(int command) 1176 { 1177 if (unlikely(ftrace_disabled)) 1178 return; 1179 1180 ftrace_start_up++; 1181 command |= FTRACE_ENABLE_CALLS; 1182 1183 ftrace_startup_enable(command); 1184 } 1185 1186 static void ftrace_shutdown(int command) 1187 { 1188 if (unlikely(ftrace_disabled)) 1189 return; 1190 1191 ftrace_start_up--; 1192 /* 1193 * Just warn in case of unbalance, no need to kill ftrace, it's not 1194 * critical but the ftrace_call callers may be never nopped again after 1195 * further ftrace uses. 1196 */ 1197 WARN_ON_ONCE(ftrace_start_up < 0); 1198 1199 if (!ftrace_start_up) 1200 command |= FTRACE_DISABLE_CALLS; 1201 1202 if (saved_ftrace_func != ftrace_trace_function) { 1203 saved_ftrace_func = ftrace_trace_function; 1204 command |= FTRACE_UPDATE_TRACE_FUNC; 1205 } 1206 1207 if (!command || !ftrace_enabled) 1208 return; 1209 1210 ftrace_run_update_code(command); 1211 } 1212 1213 static void ftrace_startup_sysctl(void) 1214 { 1215 int command = FTRACE_ENABLE_MCOUNT; 1216 1217 if (unlikely(ftrace_disabled)) 1218 return; 1219 1220 /* Force update next time */ 1221 saved_ftrace_func = NULL; 1222 /* ftrace_start_up is true if we want ftrace running */ 1223 if (ftrace_start_up) 1224 command |= FTRACE_ENABLE_CALLS; 1225 1226 ftrace_run_update_code(command); 1227 } 1228 1229 static void ftrace_shutdown_sysctl(void) 1230 { 1231 int command = FTRACE_DISABLE_MCOUNT; 1232 1233 if (unlikely(ftrace_disabled)) 1234 return; 1235 1236 /* ftrace_start_up is true if ftrace is running */ 1237 if (ftrace_start_up) 1238 command |= FTRACE_DISABLE_CALLS; 1239 1240 ftrace_run_update_code(command); 1241 } 1242 1243 static cycle_t ftrace_update_time; 1244 static unsigned long ftrace_update_cnt; 1245 unsigned long ftrace_update_tot_cnt; 1246 1247 static int ftrace_update_code(struct module *mod) 1248 { 1249 struct dyn_ftrace *p; 1250 cycle_t start, stop; 1251 1252 start = ftrace_now(raw_smp_processor_id()); 1253 ftrace_update_cnt = 0; 1254 1255 while (ftrace_new_addrs) { 1256 1257 /* If something went wrong, bail without enabling anything */ 1258 if (unlikely(ftrace_disabled)) 1259 return -1; 1260 1261 p = ftrace_new_addrs; 1262 ftrace_new_addrs = p->newlist; 1263 p->flags = 0L; 1264 1265 /* convert record (i.e, patch mcount-call with NOP) */ 1266 if (ftrace_code_disable(mod, p)) { 1267 p->flags |= FTRACE_FL_CONVERTED; 1268 ftrace_update_cnt++; 1269 } else 1270 ftrace_free_rec(p); 1271 } 1272 1273 stop = ftrace_now(raw_smp_processor_id()); 1274 ftrace_update_time = stop - start; 1275 ftrace_update_tot_cnt += ftrace_update_cnt; 1276 1277 return 0; 1278 } 1279 1280 static int __init ftrace_dyn_table_alloc(unsigned long num_to_init) 1281 { 1282 struct ftrace_page *pg; 1283 int cnt; 1284 int i; 1285 1286 /* allocate a few pages */ 1287 ftrace_pages_start = (void *)get_zeroed_page(GFP_KERNEL); 1288 if (!ftrace_pages_start) 1289 return -1; 1290 1291 /* 1292 * Allocate a few more pages. 1293 * 1294 * TODO: have some parser search vmlinux before 1295 * final linking to find all calls to ftrace. 1296 * Then we can: 1297 * a) know how many pages to allocate. 1298 * and/or 1299 * b) set up the table then. 1300 * 1301 * The dynamic code is still necessary for 1302 * modules. 1303 */ 1304 1305 pg = ftrace_pages = ftrace_pages_start; 1306 1307 cnt = num_to_init / ENTRIES_PER_PAGE; 1308 pr_info("ftrace: allocating %ld entries in %d pages\n", 1309 num_to_init, cnt + 1); 1310 1311 for (i = 0; i < cnt; i++) { 1312 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 1313 1314 /* If we fail, we'll try later anyway */ 1315 if (!pg->next) 1316 break; 1317 1318 pg = pg->next; 1319 } 1320 1321 return 0; 1322 } 1323 1324 enum { 1325 FTRACE_ITER_FILTER = (1 << 0), 1326 FTRACE_ITER_NOTRACE = (1 << 1), 1327 FTRACE_ITER_FAILURES = (1 << 2), 1328 FTRACE_ITER_PRINTALL = (1 << 3), 1329 FTRACE_ITER_HASH = (1 << 4), 1330 }; 1331 1332 #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ 1333 1334 struct ftrace_iterator { 1335 struct ftrace_page *pg; 1336 int hidx; 1337 int idx; 1338 unsigned flags; 1339 struct trace_parser parser; 1340 }; 1341 1342 static void * 1343 t_hash_next(struct seq_file *m, void *v, loff_t *pos) 1344 { 1345 struct ftrace_iterator *iter = m->private; 1346 struct hlist_node *hnd = v; 1347 struct hlist_head *hhd; 1348 1349 WARN_ON(!(iter->flags & FTRACE_ITER_HASH)); 1350 1351 (*pos)++; 1352 1353 retry: 1354 if (iter->hidx >= FTRACE_FUNC_HASHSIZE) 1355 return NULL; 1356 1357 hhd = &ftrace_func_hash[iter->hidx]; 1358 1359 if (hlist_empty(hhd)) { 1360 iter->hidx++; 1361 hnd = NULL; 1362 goto retry; 1363 } 1364 1365 if (!hnd) 1366 hnd = hhd->first; 1367 else { 1368 hnd = hnd->next; 1369 if (!hnd) { 1370 iter->hidx++; 1371 goto retry; 1372 } 1373 } 1374 1375 return hnd; 1376 } 1377 1378 static void *t_hash_start(struct seq_file *m, loff_t *pos) 1379 { 1380 struct ftrace_iterator *iter = m->private; 1381 void *p = NULL; 1382 loff_t l; 1383 1384 if (!(iter->flags & FTRACE_ITER_HASH)) 1385 *pos = 0; 1386 1387 iter->flags |= FTRACE_ITER_HASH; 1388 1389 iter->hidx = 0; 1390 for (l = 0; l <= *pos; ) { 1391 p = t_hash_next(m, p, &l); 1392 if (!p) 1393 break; 1394 } 1395 return p; 1396 } 1397 1398 static int t_hash_show(struct seq_file *m, void *v) 1399 { 1400 struct ftrace_func_probe *rec; 1401 struct hlist_node *hnd = v; 1402 1403 rec = hlist_entry(hnd, struct ftrace_func_probe, node); 1404 1405 if (rec->ops->print) 1406 return rec->ops->print(m, rec->ip, rec->ops, rec->data); 1407 1408 seq_printf(m, "%ps:%ps", (void *)rec->ip, (void *)rec->ops->func); 1409 1410 if (rec->data) 1411 seq_printf(m, ":%p", rec->data); 1412 seq_putc(m, '\n'); 1413 1414 return 0; 1415 } 1416 1417 static void * 1418 t_next(struct seq_file *m, void *v, loff_t *pos) 1419 { 1420 struct ftrace_iterator *iter = m->private; 1421 struct dyn_ftrace *rec = NULL; 1422 1423 if (iter->flags & FTRACE_ITER_HASH) 1424 return t_hash_next(m, v, pos); 1425 1426 (*pos)++; 1427 1428 if (iter->flags & FTRACE_ITER_PRINTALL) 1429 return NULL; 1430 1431 retry: 1432 if (iter->idx >= iter->pg->index) { 1433 if (iter->pg->next) { 1434 iter->pg = iter->pg->next; 1435 iter->idx = 0; 1436 goto retry; 1437 } 1438 } else { 1439 rec = &iter->pg->records[iter->idx++]; 1440 if ((rec->flags & FTRACE_FL_FREE) || 1441 1442 (!(iter->flags & FTRACE_ITER_FAILURES) && 1443 (rec->flags & FTRACE_FL_FAILED)) || 1444 1445 ((iter->flags & FTRACE_ITER_FAILURES) && 1446 !(rec->flags & FTRACE_FL_FAILED)) || 1447 1448 ((iter->flags & FTRACE_ITER_FILTER) && 1449 !(rec->flags & FTRACE_FL_FILTER)) || 1450 1451 ((iter->flags & FTRACE_ITER_NOTRACE) && 1452 !(rec->flags & FTRACE_FL_NOTRACE))) { 1453 rec = NULL; 1454 goto retry; 1455 } 1456 } 1457 1458 return rec; 1459 } 1460 1461 static void *t_start(struct seq_file *m, loff_t *pos) 1462 { 1463 struct ftrace_iterator *iter = m->private; 1464 void *p = NULL; 1465 loff_t l; 1466 1467 mutex_lock(&ftrace_lock); 1468 /* 1469 * For set_ftrace_filter reading, if we have the filter 1470 * off, we can short cut and just print out that all 1471 * functions are enabled. 1472 */ 1473 if (iter->flags & FTRACE_ITER_FILTER && !ftrace_filtered) { 1474 if (*pos > 0) 1475 return t_hash_start(m, pos); 1476 iter->flags |= FTRACE_ITER_PRINTALL; 1477 return iter; 1478 } 1479 1480 if (iter->flags & FTRACE_ITER_HASH) 1481 return t_hash_start(m, pos); 1482 1483 iter->pg = ftrace_pages_start; 1484 iter->idx = 0; 1485 for (l = 0; l <= *pos; ) { 1486 p = t_next(m, p, &l); 1487 if (!p) 1488 break; 1489 } 1490 1491 if (!p && iter->flags & FTRACE_ITER_FILTER) 1492 return t_hash_start(m, pos); 1493 1494 return p; 1495 } 1496 1497 static void t_stop(struct seq_file *m, void *p) 1498 { 1499 mutex_unlock(&ftrace_lock); 1500 } 1501 1502 static int t_show(struct seq_file *m, void *v) 1503 { 1504 struct ftrace_iterator *iter = m->private; 1505 struct dyn_ftrace *rec = v; 1506 1507 if (iter->flags & FTRACE_ITER_HASH) 1508 return t_hash_show(m, v); 1509 1510 if (iter->flags & FTRACE_ITER_PRINTALL) { 1511 seq_printf(m, "#### all functions enabled ####\n"); 1512 return 0; 1513 } 1514 1515 if (!rec) 1516 return 0; 1517 1518 seq_printf(m, "%ps\n", (void *)rec->ip); 1519 1520 return 0; 1521 } 1522 1523 static const struct seq_operations show_ftrace_seq_ops = { 1524 .start = t_start, 1525 .next = t_next, 1526 .stop = t_stop, 1527 .show = t_show, 1528 }; 1529 1530 static int 1531 ftrace_avail_open(struct inode *inode, struct file *file) 1532 { 1533 struct ftrace_iterator *iter; 1534 int ret; 1535 1536 if (unlikely(ftrace_disabled)) 1537 return -ENODEV; 1538 1539 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 1540 if (!iter) 1541 return -ENOMEM; 1542 1543 iter->pg = ftrace_pages_start; 1544 1545 ret = seq_open(file, &show_ftrace_seq_ops); 1546 if (!ret) { 1547 struct seq_file *m = file->private_data; 1548 1549 m->private = iter; 1550 } else { 1551 kfree(iter); 1552 } 1553 1554 return ret; 1555 } 1556 1557 static int 1558 ftrace_failures_open(struct inode *inode, struct file *file) 1559 { 1560 int ret; 1561 struct seq_file *m; 1562 struct ftrace_iterator *iter; 1563 1564 ret = ftrace_avail_open(inode, file); 1565 if (!ret) { 1566 m = (struct seq_file *)file->private_data; 1567 iter = (struct ftrace_iterator *)m->private; 1568 iter->flags = FTRACE_ITER_FAILURES; 1569 } 1570 1571 return ret; 1572 } 1573 1574 1575 static void ftrace_filter_reset(int enable) 1576 { 1577 struct ftrace_page *pg; 1578 struct dyn_ftrace *rec; 1579 unsigned long type = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1580 1581 mutex_lock(&ftrace_lock); 1582 if (enable) 1583 ftrace_filtered = 0; 1584 do_for_each_ftrace_rec(pg, rec) { 1585 if (rec->flags & FTRACE_FL_FAILED) 1586 continue; 1587 rec->flags &= ~type; 1588 } while_for_each_ftrace_rec(); 1589 mutex_unlock(&ftrace_lock); 1590 } 1591 1592 static int 1593 ftrace_regex_open(struct inode *inode, struct file *file, int enable) 1594 { 1595 struct ftrace_iterator *iter; 1596 int ret = 0; 1597 1598 if (unlikely(ftrace_disabled)) 1599 return -ENODEV; 1600 1601 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 1602 if (!iter) 1603 return -ENOMEM; 1604 1605 if (trace_parser_get_init(&iter->parser, FTRACE_BUFF_MAX)) { 1606 kfree(iter); 1607 return -ENOMEM; 1608 } 1609 1610 mutex_lock(&ftrace_regex_lock); 1611 if ((file->f_mode & FMODE_WRITE) && 1612 (file->f_flags & O_TRUNC)) 1613 ftrace_filter_reset(enable); 1614 1615 if (file->f_mode & FMODE_READ) { 1616 iter->pg = ftrace_pages_start; 1617 iter->flags = enable ? FTRACE_ITER_FILTER : 1618 FTRACE_ITER_NOTRACE; 1619 1620 ret = seq_open(file, &show_ftrace_seq_ops); 1621 if (!ret) { 1622 struct seq_file *m = file->private_data; 1623 m->private = iter; 1624 } else { 1625 trace_parser_put(&iter->parser); 1626 kfree(iter); 1627 } 1628 } else 1629 file->private_data = iter; 1630 mutex_unlock(&ftrace_regex_lock); 1631 1632 return ret; 1633 } 1634 1635 static int 1636 ftrace_filter_open(struct inode *inode, struct file *file) 1637 { 1638 return ftrace_regex_open(inode, file, 1); 1639 } 1640 1641 static int 1642 ftrace_notrace_open(struct inode *inode, struct file *file) 1643 { 1644 return ftrace_regex_open(inode, file, 0); 1645 } 1646 1647 static loff_t 1648 ftrace_regex_lseek(struct file *file, loff_t offset, int origin) 1649 { 1650 loff_t ret; 1651 1652 if (file->f_mode & FMODE_READ) 1653 ret = seq_lseek(file, offset, origin); 1654 else 1655 file->f_pos = ret = 1; 1656 1657 return ret; 1658 } 1659 1660 enum { 1661 MATCH_FULL, 1662 MATCH_FRONT_ONLY, 1663 MATCH_MIDDLE_ONLY, 1664 MATCH_END_ONLY, 1665 }; 1666 1667 /* 1668 * (static function - no need for kernel doc) 1669 * 1670 * Pass in a buffer containing a glob and this function will 1671 * set search to point to the search part of the buffer and 1672 * return the type of search it is (see enum above). 1673 * This does modify buff. 1674 * 1675 * Returns enum type. 1676 * search returns the pointer to use for comparison. 1677 * not returns 1 if buff started with a '!' 1678 * 0 otherwise. 1679 */ 1680 static int 1681 ftrace_setup_glob(char *buff, int len, char **search, int *not) 1682 { 1683 int type = MATCH_FULL; 1684 int i; 1685 1686 if (buff[0] == '!') { 1687 *not = 1; 1688 buff++; 1689 len--; 1690 } else 1691 *not = 0; 1692 1693 *search = buff; 1694 1695 for (i = 0; i < len; i++) { 1696 if (buff[i] == '*') { 1697 if (!i) { 1698 *search = buff + 1; 1699 type = MATCH_END_ONLY; 1700 } else { 1701 if (type == MATCH_END_ONLY) 1702 type = MATCH_MIDDLE_ONLY; 1703 else 1704 type = MATCH_FRONT_ONLY; 1705 buff[i] = 0; 1706 break; 1707 } 1708 } 1709 } 1710 1711 return type; 1712 } 1713 1714 static int ftrace_match(char *str, char *regex, int len, int type) 1715 { 1716 int matched = 0; 1717 char *ptr; 1718 1719 switch (type) { 1720 case MATCH_FULL: 1721 if (strcmp(str, regex) == 0) 1722 matched = 1; 1723 break; 1724 case MATCH_FRONT_ONLY: 1725 if (strncmp(str, regex, len) == 0) 1726 matched = 1; 1727 break; 1728 case MATCH_MIDDLE_ONLY: 1729 if (strstr(str, regex)) 1730 matched = 1; 1731 break; 1732 case MATCH_END_ONLY: 1733 ptr = strstr(str, regex); 1734 if (ptr && (ptr[len] == 0)) 1735 matched = 1; 1736 break; 1737 } 1738 1739 return matched; 1740 } 1741 1742 static int 1743 ftrace_match_record(struct dyn_ftrace *rec, char *regex, int len, int type) 1744 { 1745 char str[KSYM_SYMBOL_LEN]; 1746 1747 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 1748 return ftrace_match(str, regex, len, type); 1749 } 1750 1751 static void ftrace_match_records(char *buff, int len, int enable) 1752 { 1753 unsigned int search_len; 1754 struct ftrace_page *pg; 1755 struct dyn_ftrace *rec; 1756 unsigned long flag; 1757 char *search; 1758 int type; 1759 int not; 1760 1761 flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1762 type = ftrace_setup_glob(buff, len, &search, ¬); 1763 1764 search_len = strlen(search); 1765 1766 mutex_lock(&ftrace_lock); 1767 do_for_each_ftrace_rec(pg, rec) { 1768 1769 if (rec->flags & FTRACE_FL_FAILED) 1770 continue; 1771 1772 if (ftrace_match_record(rec, search, search_len, type)) { 1773 if (not) 1774 rec->flags &= ~flag; 1775 else 1776 rec->flags |= flag; 1777 } 1778 /* 1779 * Only enable filtering if we have a function that 1780 * is filtered on. 1781 */ 1782 if (enable && (rec->flags & FTRACE_FL_FILTER)) 1783 ftrace_filtered = 1; 1784 } while_for_each_ftrace_rec(); 1785 mutex_unlock(&ftrace_lock); 1786 } 1787 1788 static int 1789 ftrace_match_module_record(struct dyn_ftrace *rec, char *mod, 1790 char *regex, int len, int type) 1791 { 1792 char str[KSYM_SYMBOL_LEN]; 1793 char *modname; 1794 1795 kallsyms_lookup(rec->ip, NULL, NULL, &modname, str); 1796 1797 if (!modname || strcmp(modname, mod)) 1798 return 0; 1799 1800 /* blank search means to match all funcs in the mod */ 1801 if (len) 1802 return ftrace_match(str, regex, len, type); 1803 else 1804 return 1; 1805 } 1806 1807 static void ftrace_match_module_records(char *buff, char *mod, int enable) 1808 { 1809 unsigned search_len = 0; 1810 struct ftrace_page *pg; 1811 struct dyn_ftrace *rec; 1812 int type = MATCH_FULL; 1813 char *search = buff; 1814 unsigned long flag; 1815 int not = 0; 1816 1817 flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1818 1819 /* blank or '*' mean the same */ 1820 if (strcmp(buff, "*") == 0) 1821 buff[0] = 0; 1822 1823 /* handle the case of 'dont filter this module' */ 1824 if (strcmp(buff, "!") == 0 || strcmp(buff, "!*") == 0) { 1825 buff[0] = 0; 1826 not = 1; 1827 } 1828 1829 if (strlen(buff)) { 1830 type = ftrace_setup_glob(buff, strlen(buff), &search, ¬); 1831 search_len = strlen(search); 1832 } 1833 1834 mutex_lock(&ftrace_lock); 1835 do_for_each_ftrace_rec(pg, rec) { 1836 1837 if (rec->flags & FTRACE_FL_FAILED) 1838 continue; 1839 1840 if (ftrace_match_module_record(rec, mod, 1841 search, search_len, type)) { 1842 if (not) 1843 rec->flags &= ~flag; 1844 else 1845 rec->flags |= flag; 1846 } 1847 if (enable && (rec->flags & FTRACE_FL_FILTER)) 1848 ftrace_filtered = 1; 1849 1850 } while_for_each_ftrace_rec(); 1851 mutex_unlock(&ftrace_lock); 1852 } 1853 1854 /* 1855 * We register the module command as a template to show others how 1856 * to register the a command as well. 1857 */ 1858 1859 static int 1860 ftrace_mod_callback(char *func, char *cmd, char *param, int enable) 1861 { 1862 char *mod; 1863 1864 /* 1865 * cmd == 'mod' because we only registered this func 1866 * for the 'mod' ftrace_func_command. 1867 * But if you register one func with multiple commands, 1868 * you can tell which command was used by the cmd 1869 * parameter. 1870 */ 1871 1872 /* we must have a module name */ 1873 if (!param) 1874 return -EINVAL; 1875 1876 mod = strsep(¶m, ":"); 1877 if (!strlen(mod)) 1878 return -EINVAL; 1879 1880 ftrace_match_module_records(func, mod, enable); 1881 return 0; 1882 } 1883 1884 static struct ftrace_func_command ftrace_mod_cmd = { 1885 .name = "mod", 1886 .func = ftrace_mod_callback, 1887 }; 1888 1889 static int __init ftrace_mod_cmd_init(void) 1890 { 1891 return register_ftrace_command(&ftrace_mod_cmd); 1892 } 1893 device_initcall(ftrace_mod_cmd_init); 1894 1895 static void 1896 function_trace_probe_call(unsigned long ip, unsigned long parent_ip) 1897 { 1898 struct ftrace_func_probe *entry; 1899 struct hlist_head *hhd; 1900 struct hlist_node *n; 1901 unsigned long key; 1902 int resched; 1903 1904 key = hash_long(ip, FTRACE_HASH_BITS); 1905 1906 hhd = &ftrace_func_hash[key]; 1907 1908 if (hlist_empty(hhd)) 1909 return; 1910 1911 /* 1912 * Disable preemption for these calls to prevent a RCU grace 1913 * period. This syncs the hash iteration and freeing of items 1914 * on the hash. rcu_read_lock is too dangerous here. 1915 */ 1916 resched = ftrace_preempt_disable(); 1917 hlist_for_each_entry_rcu(entry, n, hhd, node) { 1918 if (entry->ip == ip) 1919 entry->ops->func(ip, parent_ip, &entry->data); 1920 } 1921 ftrace_preempt_enable(resched); 1922 } 1923 1924 static struct ftrace_ops trace_probe_ops __read_mostly = 1925 { 1926 .func = function_trace_probe_call, 1927 }; 1928 1929 static int ftrace_probe_registered; 1930 1931 static void __enable_ftrace_function_probe(void) 1932 { 1933 int i; 1934 1935 if (ftrace_probe_registered) 1936 return; 1937 1938 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1939 struct hlist_head *hhd = &ftrace_func_hash[i]; 1940 if (hhd->first) 1941 break; 1942 } 1943 /* Nothing registered? */ 1944 if (i == FTRACE_FUNC_HASHSIZE) 1945 return; 1946 1947 __register_ftrace_function(&trace_probe_ops); 1948 ftrace_startup(0); 1949 ftrace_probe_registered = 1; 1950 } 1951 1952 static void __disable_ftrace_function_probe(void) 1953 { 1954 int i; 1955 1956 if (!ftrace_probe_registered) 1957 return; 1958 1959 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1960 struct hlist_head *hhd = &ftrace_func_hash[i]; 1961 if (hhd->first) 1962 return; 1963 } 1964 1965 /* no more funcs left */ 1966 __unregister_ftrace_function(&trace_probe_ops); 1967 ftrace_shutdown(0); 1968 ftrace_probe_registered = 0; 1969 } 1970 1971 1972 static void ftrace_free_entry_rcu(struct rcu_head *rhp) 1973 { 1974 struct ftrace_func_probe *entry = 1975 container_of(rhp, struct ftrace_func_probe, rcu); 1976 1977 if (entry->ops->free) 1978 entry->ops->free(&entry->data); 1979 kfree(entry); 1980 } 1981 1982 1983 int 1984 register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 1985 void *data) 1986 { 1987 struct ftrace_func_probe *entry; 1988 struct ftrace_page *pg; 1989 struct dyn_ftrace *rec; 1990 int type, len, not; 1991 unsigned long key; 1992 int count = 0; 1993 char *search; 1994 1995 type = ftrace_setup_glob(glob, strlen(glob), &search, ¬); 1996 len = strlen(search); 1997 1998 /* we do not support '!' for function probes */ 1999 if (WARN_ON(not)) 2000 return -EINVAL; 2001 2002 mutex_lock(&ftrace_lock); 2003 do_for_each_ftrace_rec(pg, rec) { 2004 2005 if (rec->flags & FTRACE_FL_FAILED) 2006 continue; 2007 2008 if (!ftrace_match_record(rec, search, len, type)) 2009 continue; 2010 2011 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 2012 if (!entry) { 2013 /* If we did not process any, then return error */ 2014 if (!count) 2015 count = -ENOMEM; 2016 goto out_unlock; 2017 } 2018 2019 count++; 2020 2021 entry->data = data; 2022 2023 /* 2024 * The caller might want to do something special 2025 * for each function we find. We call the callback 2026 * to give the caller an opportunity to do so. 2027 */ 2028 if (ops->callback) { 2029 if (ops->callback(rec->ip, &entry->data) < 0) { 2030 /* caller does not like this func */ 2031 kfree(entry); 2032 continue; 2033 } 2034 } 2035 2036 entry->ops = ops; 2037 entry->ip = rec->ip; 2038 2039 key = hash_long(entry->ip, FTRACE_HASH_BITS); 2040 hlist_add_head_rcu(&entry->node, &ftrace_func_hash[key]); 2041 2042 } while_for_each_ftrace_rec(); 2043 __enable_ftrace_function_probe(); 2044 2045 out_unlock: 2046 mutex_unlock(&ftrace_lock); 2047 2048 return count; 2049 } 2050 2051 enum { 2052 PROBE_TEST_FUNC = 1, 2053 PROBE_TEST_DATA = 2 2054 }; 2055 2056 static void 2057 __unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2058 void *data, int flags) 2059 { 2060 struct ftrace_func_probe *entry; 2061 struct hlist_node *n, *tmp; 2062 char str[KSYM_SYMBOL_LEN]; 2063 int type = MATCH_FULL; 2064 int i, len = 0; 2065 char *search; 2066 2067 if (glob && (strcmp(glob, "*") == 0 || !strlen(glob))) 2068 glob = NULL; 2069 else if (glob) { 2070 int not; 2071 2072 type = ftrace_setup_glob(glob, strlen(glob), &search, ¬); 2073 len = strlen(search); 2074 2075 /* we do not support '!' for function probes */ 2076 if (WARN_ON(not)) 2077 return; 2078 } 2079 2080 mutex_lock(&ftrace_lock); 2081 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2082 struct hlist_head *hhd = &ftrace_func_hash[i]; 2083 2084 hlist_for_each_entry_safe(entry, n, tmp, hhd, node) { 2085 2086 /* break up if statements for readability */ 2087 if ((flags & PROBE_TEST_FUNC) && entry->ops != ops) 2088 continue; 2089 2090 if ((flags & PROBE_TEST_DATA) && entry->data != data) 2091 continue; 2092 2093 /* do this last, since it is the most expensive */ 2094 if (glob) { 2095 kallsyms_lookup(entry->ip, NULL, NULL, 2096 NULL, str); 2097 if (!ftrace_match(str, glob, len, type)) 2098 continue; 2099 } 2100 2101 hlist_del(&entry->node); 2102 call_rcu(&entry->rcu, ftrace_free_entry_rcu); 2103 } 2104 } 2105 __disable_ftrace_function_probe(); 2106 mutex_unlock(&ftrace_lock); 2107 } 2108 2109 void 2110 unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2111 void *data) 2112 { 2113 __unregister_ftrace_function_probe(glob, ops, data, 2114 PROBE_TEST_FUNC | PROBE_TEST_DATA); 2115 } 2116 2117 void 2118 unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops) 2119 { 2120 __unregister_ftrace_function_probe(glob, ops, NULL, PROBE_TEST_FUNC); 2121 } 2122 2123 void unregister_ftrace_function_probe_all(char *glob) 2124 { 2125 __unregister_ftrace_function_probe(glob, NULL, NULL, 0); 2126 } 2127 2128 static LIST_HEAD(ftrace_commands); 2129 static DEFINE_MUTEX(ftrace_cmd_mutex); 2130 2131 int register_ftrace_command(struct ftrace_func_command *cmd) 2132 { 2133 struct ftrace_func_command *p; 2134 int ret = 0; 2135 2136 mutex_lock(&ftrace_cmd_mutex); 2137 list_for_each_entry(p, &ftrace_commands, list) { 2138 if (strcmp(cmd->name, p->name) == 0) { 2139 ret = -EBUSY; 2140 goto out_unlock; 2141 } 2142 } 2143 list_add(&cmd->list, &ftrace_commands); 2144 out_unlock: 2145 mutex_unlock(&ftrace_cmd_mutex); 2146 2147 return ret; 2148 } 2149 2150 int unregister_ftrace_command(struct ftrace_func_command *cmd) 2151 { 2152 struct ftrace_func_command *p, *n; 2153 int ret = -ENODEV; 2154 2155 mutex_lock(&ftrace_cmd_mutex); 2156 list_for_each_entry_safe(p, n, &ftrace_commands, list) { 2157 if (strcmp(cmd->name, p->name) == 0) { 2158 ret = 0; 2159 list_del_init(&p->list); 2160 goto out_unlock; 2161 } 2162 } 2163 out_unlock: 2164 mutex_unlock(&ftrace_cmd_mutex); 2165 2166 return ret; 2167 } 2168 2169 static int ftrace_process_regex(char *buff, int len, int enable) 2170 { 2171 char *func, *command, *next = buff; 2172 struct ftrace_func_command *p; 2173 int ret = -EINVAL; 2174 2175 func = strsep(&next, ":"); 2176 2177 if (!next) { 2178 ftrace_match_records(func, len, enable); 2179 return 0; 2180 } 2181 2182 /* command found */ 2183 2184 command = strsep(&next, ":"); 2185 2186 mutex_lock(&ftrace_cmd_mutex); 2187 list_for_each_entry(p, &ftrace_commands, list) { 2188 if (strcmp(p->name, command) == 0) { 2189 ret = p->func(func, command, next, enable); 2190 goto out_unlock; 2191 } 2192 } 2193 out_unlock: 2194 mutex_unlock(&ftrace_cmd_mutex); 2195 2196 return ret; 2197 } 2198 2199 static ssize_t 2200 ftrace_regex_write(struct file *file, const char __user *ubuf, 2201 size_t cnt, loff_t *ppos, int enable) 2202 { 2203 struct ftrace_iterator *iter; 2204 struct trace_parser *parser; 2205 ssize_t ret, read; 2206 2207 if (!cnt) 2208 return 0; 2209 2210 mutex_lock(&ftrace_regex_lock); 2211 2212 if (file->f_mode & FMODE_READ) { 2213 struct seq_file *m = file->private_data; 2214 iter = m->private; 2215 } else 2216 iter = file->private_data; 2217 2218 parser = &iter->parser; 2219 read = trace_get_user(parser, ubuf, cnt, ppos); 2220 2221 if (read >= 0 && trace_parser_loaded(parser) && 2222 !trace_parser_cont(parser)) { 2223 ret = ftrace_process_regex(parser->buffer, 2224 parser->idx, enable); 2225 if (ret) 2226 goto out; 2227 2228 trace_parser_clear(parser); 2229 } 2230 2231 ret = read; 2232 2233 mutex_unlock(&ftrace_regex_lock); 2234 out: 2235 return ret; 2236 } 2237 2238 static ssize_t 2239 ftrace_filter_write(struct file *file, const char __user *ubuf, 2240 size_t cnt, loff_t *ppos) 2241 { 2242 return ftrace_regex_write(file, ubuf, cnt, ppos, 1); 2243 } 2244 2245 static ssize_t 2246 ftrace_notrace_write(struct file *file, const char __user *ubuf, 2247 size_t cnt, loff_t *ppos) 2248 { 2249 return ftrace_regex_write(file, ubuf, cnt, ppos, 0); 2250 } 2251 2252 static void 2253 ftrace_set_regex(unsigned char *buf, int len, int reset, int enable) 2254 { 2255 if (unlikely(ftrace_disabled)) 2256 return; 2257 2258 mutex_lock(&ftrace_regex_lock); 2259 if (reset) 2260 ftrace_filter_reset(enable); 2261 if (buf) 2262 ftrace_match_records(buf, len, enable); 2263 mutex_unlock(&ftrace_regex_lock); 2264 } 2265 2266 /** 2267 * ftrace_set_filter - set a function to filter on in ftrace 2268 * @buf - the string that holds the function filter text. 2269 * @len - the length of the string. 2270 * @reset - non zero to reset all filters before applying this filter. 2271 * 2272 * Filters denote which functions should be enabled when tracing is enabled. 2273 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 2274 */ 2275 void ftrace_set_filter(unsigned char *buf, int len, int reset) 2276 { 2277 ftrace_set_regex(buf, len, reset, 1); 2278 } 2279 2280 /** 2281 * ftrace_set_notrace - set a function to not trace in ftrace 2282 * @buf - the string that holds the function notrace text. 2283 * @len - the length of the string. 2284 * @reset - non zero to reset all filters before applying this filter. 2285 * 2286 * Notrace Filters denote which functions should not be enabled when tracing 2287 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 2288 * for tracing. 2289 */ 2290 void ftrace_set_notrace(unsigned char *buf, int len, int reset) 2291 { 2292 ftrace_set_regex(buf, len, reset, 0); 2293 } 2294 2295 /* 2296 * command line interface to allow users to set filters on boot up. 2297 */ 2298 #define FTRACE_FILTER_SIZE COMMAND_LINE_SIZE 2299 static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 2300 static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata; 2301 2302 static int __init set_ftrace_notrace(char *str) 2303 { 2304 strncpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE); 2305 return 1; 2306 } 2307 __setup("ftrace_notrace=", set_ftrace_notrace); 2308 2309 static int __init set_ftrace_filter(char *str) 2310 { 2311 strncpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE); 2312 return 1; 2313 } 2314 __setup("ftrace_filter=", set_ftrace_filter); 2315 2316 static void __init set_ftrace_early_filter(char *buf, int enable) 2317 { 2318 char *func; 2319 2320 while (buf) { 2321 func = strsep(&buf, ","); 2322 ftrace_set_regex(func, strlen(func), 0, enable); 2323 } 2324 } 2325 2326 static void __init set_ftrace_early_filters(void) 2327 { 2328 if (ftrace_filter_buf[0]) 2329 set_ftrace_early_filter(ftrace_filter_buf, 1); 2330 if (ftrace_notrace_buf[0]) 2331 set_ftrace_early_filter(ftrace_notrace_buf, 0); 2332 } 2333 2334 static int 2335 ftrace_regex_release(struct inode *inode, struct file *file, int enable) 2336 { 2337 struct seq_file *m = (struct seq_file *)file->private_data; 2338 struct ftrace_iterator *iter; 2339 struct trace_parser *parser; 2340 2341 mutex_lock(&ftrace_regex_lock); 2342 if (file->f_mode & FMODE_READ) { 2343 iter = m->private; 2344 2345 seq_release(inode, file); 2346 } else 2347 iter = file->private_data; 2348 2349 parser = &iter->parser; 2350 if (trace_parser_loaded(parser)) { 2351 parser->buffer[parser->idx] = 0; 2352 ftrace_match_records(parser->buffer, parser->idx, enable); 2353 } 2354 2355 mutex_lock(&ftrace_lock); 2356 if (ftrace_start_up && ftrace_enabled) 2357 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 2358 mutex_unlock(&ftrace_lock); 2359 2360 trace_parser_put(parser); 2361 kfree(iter); 2362 2363 mutex_unlock(&ftrace_regex_lock); 2364 return 0; 2365 } 2366 2367 static int 2368 ftrace_filter_release(struct inode *inode, struct file *file) 2369 { 2370 return ftrace_regex_release(inode, file, 1); 2371 } 2372 2373 static int 2374 ftrace_notrace_release(struct inode *inode, struct file *file) 2375 { 2376 return ftrace_regex_release(inode, file, 0); 2377 } 2378 2379 static const struct file_operations ftrace_avail_fops = { 2380 .open = ftrace_avail_open, 2381 .read = seq_read, 2382 .llseek = seq_lseek, 2383 .release = seq_release_private, 2384 }; 2385 2386 static const struct file_operations ftrace_failures_fops = { 2387 .open = ftrace_failures_open, 2388 .read = seq_read, 2389 .llseek = seq_lseek, 2390 .release = seq_release_private, 2391 }; 2392 2393 static const struct file_operations ftrace_filter_fops = { 2394 .open = ftrace_filter_open, 2395 .read = seq_read, 2396 .write = ftrace_filter_write, 2397 .llseek = ftrace_regex_lseek, 2398 .release = ftrace_filter_release, 2399 }; 2400 2401 static const struct file_operations ftrace_notrace_fops = { 2402 .open = ftrace_notrace_open, 2403 .read = seq_read, 2404 .write = ftrace_notrace_write, 2405 .llseek = ftrace_regex_lseek, 2406 .release = ftrace_notrace_release, 2407 }; 2408 2409 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2410 2411 static DEFINE_MUTEX(graph_lock); 2412 2413 int ftrace_graph_count; 2414 unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly; 2415 2416 static void * 2417 __g_next(struct seq_file *m, loff_t *pos) 2418 { 2419 if (*pos >= ftrace_graph_count) 2420 return NULL; 2421 return &ftrace_graph_funcs[*pos]; 2422 } 2423 2424 static void * 2425 g_next(struct seq_file *m, void *v, loff_t *pos) 2426 { 2427 (*pos)++; 2428 return __g_next(m, pos); 2429 } 2430 2431 static void *g_start(struct seq_file *m, loff_t *pos) 2432 { 2433 mutex_lock(&graph_lock); 2434 2435 /* Nothing, tell g_show to print all functions are enabled */ 2436 if (!ftrace_graph_count && !*pos) 2437 return (void *)1; 2438 2439 return __g_next(m, pos); 2440 } 2441 2442 static void g_stop(struct seq_file *m, void *p) 2443 { 2444 mutex_unlock(&graph_lock); 2445 } 2446 2447 static int g_show(struct seq_file *m, void *v) 2448 { 2449 unsigned long *ptr = v; 2450 2451 if (!ptr) 2452 return 0; 2453 2454 if (ptr == (unsigned long *)1) { 2455 seq_printf(m, "#### all functions enabled ####\n"); 2456 return 0; 2457 } 2458 2459 seq_printf(m, "%ps\n", (void *)*ptr); 2460 2461 return 0; 2462 } 2463 2464 static const struct seq_operations ftrace_graph_seq_ops = { 2465 .start = g_start, 2466 .next = g_next, 2467 .stop = g_stop, 2468 .show = g_show, 2469 }; 2470 2471 static int 2472 ftrace_graph_open(struct inode *inode, struct file *file) 2473 { 2474 int ret = 0; 2475 2476 if (unlikely(ftrace_disabled)) 2477 return -ENODEV; 2478 2479 mutex_lock(&graph_lock); 2480 if ((file->f_mode & FMODE_WRITE) && 2481 (file->f_flags & O_TRUNC)) { 2482 ftrace_graph_count = 0; 2483 memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); 2484 } 2485 mutex_unlock(&graph_lock); 2486 2487 if (file->f_mode & FMODE_READ) 2488 ret = seq_open(file, &ftrace_graph_seq_ops); 2489 2490 return ret; 2491 } 2492 2493 static int 2494 ftrace_graph_release(struct inode *inode, struct file *file) 2495 { 2496 if (file->f_mode & FMODE_READ) 2497 seq_release(inode, file); 2498 return 0; 2499 } 2500 2501 static int 2502 ftrace_set_func(unsigned long *array, int *idx, char *buffer) 2503 { 2504 struct dyn_ftrace *rec; 2505 struct ftrace_page *pg; 2506 int search_len; 2507 int found = 0; 2508 int type, not; 2509 char *search; 2510 bool exists; 2511 int i; 2512 2513 if (ftrace_disabled) 2514 return -ENODEV; 2515 2516 /* decode regex */ 2517 type = ftrace_setup_glob(buffer, strlen(buffer), &search, ¬); 2518 if (not) 2519 return -EINVAL; 2520 2521 search_len = strlen(search); 2522 2523 mutex_lock(&ftrace_lock); 2524 do_for_each_ftrace_rec(pg, rec) { 2525 2526 if (*idx >= FTRACE_GRAPH_MAX_FUNCS) 2527 break; 2528 2529 if (rec->flags & (FTRACE_FL_FAILED | FTRACE_FL_FREE)) 2530 continue; 2531 2532 if (ftrace_match_record(rec, search, search_len, type)) { 2533 /* ensure it is not already in the array */ 2534 exists = false; 2535 for (i = 0; i < *idx; i++) 2536 if (array[i] == rec->ip) { 2537 exists = true; 2538 break; 2539 } 2540 if (!exists) { 2541 array[(*idx)++] = rec->ip; 2542 found = 1; 2543 } 2544 } 2545 } while_for_each_ftrace_rec(); 2546 2547 mutex_unlock(&ftrace_lock); 2548 2549 return found ? 0 : -EINVAL; 2550 } 2551 2552 static ssize_t 2553 ftrace_graph_write(struct file *file, const char __user *ubuf, 2554 size_t cnt, loff_t *ppos) 2555 { 2556 struct trace_parser parser; 2557 ssize_t read, ret; 2558 2559 if (!cnt || cnt < 0) 2560 return 0; 2561 2562 mutex_lock(&graph_lock); 2563 2564 if (ftrace_graph_count >= FTRACE_GRAPH_MAX_FUNCS) { 2565 ret = -EBUSY; 2566 goto out_unlock; 2567 } 2568 2569 if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) { 2570 ret = -ENOMEM; 2571 goto out_unlock; 2572 } 2573 2574 read = trace_get_user(&parser, ubuf, cnt, ppos); 2575 2576 if (read >= 0 && trace_parser_loaded((&parser))) { 2577 parser.buffer[parser.idx] = 0; 2578 2579 /* we allow only one expression at a time */ 2580 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 2581 parser.buffer); 2582 if (ret) 2583 goto out_free; 2584 } 2585 2586 ret = read; 2587 2588 out_free: 2589 trace_parser_put(&parser); 2590 out_unlock: 2591 mutex_unlock(&graph_lock); 2592 2593 return ret; 2594 } 2595 2596 static const struct file_operations ftrace_graph_fops = { 2597 .open = ftrace_graph_open, 2598 .read = seq_read, 2599 .write = ftrace_graph_write, 2600 .release = ftrace_graph_release, 2601 }; 2602 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2603 2604 static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer) 2605 { 2606 2607 trace_create_file("available_filter_functions", 0444, 2608 d_tracer, NULL, &ftrace_avail_fops); 2609 2610 trace_create_file("failures", 0444, 2611 d_tracer, NULL, &ftrace_failures_fops); 2612 2613 trace_create_file("set_ftrace_filter", 0644, d_tracer, 2614 NULL, &ftrace_filter_fops); 2615 2616 trace_create_file("set_ftrace_notrace", 0644, d_tracer, 2617 NULL, &ftrace_notrace_fops); 2618 2619 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2620 trace_create_file("set_graph_function", 0444, d_tracer, 2621 NULL, 2622 &ftrace_graph_fops); 2623 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2624 2625 return 0; 2626 } 2627 2628 static int ftrace_convert_nops(struct module *mod, 2629 unsigned long *start, 2630 unsigned long *end) 2631 { 2632 unsigned long *p; 2633 unsigned long addr; 2634 unsigned long flags; 2635 2636 mutex_lock(&ftrace_lock); 2637 p = start; 2638 while (p < end) { 2639 addr = ftrace_call_adjust(*p++); 2640 /* 2641 * Some architecture linkers will pad between 2642 * the different mcount_loc sections of different 2643 * object files to satisfy alignments. 2644 * Skip any NULL pointers. 2645 */ 2646 if (!addr) 2647 continue; 2648 ftrace_record_ip(addr); 2649 } 2650 2651 /* disable interrupts to prevent kstop machine */ 2652 local_irq_save(flags); 2653 ftrace_update_code(mod); 2654 local_irq_restore(flags); 2655 mutex_unlock(&ftrace_lock); 2656 2657 return 0; 2658 } 2659 2660 #ifdef CONFIG_MODULES 2661 void ftrace_release(void *start, void *end) 2662 { 2663 struct dyn_ftrace *rec; 2664 struct ftrace_page *pg; 2665 unsigned long s = (unsigned long)start; 2666 unsigned long e = (unsigned long)end; 2667 2668 if (ftrace_disabled || !start || start == end) 2669 return; 2670 2671 mutex_lock(&ftrace_lock); 2672 do_for_each_ftrace_rec(pg, rec) { 2673 if ((rec->ip >= s) && (rec->ip < e)) { 2674 /* 2675 * rec->ip is changed in ftrace_free_rec() 2676 * It should not between s and e if record was freed. 2677 */ 2678 FTRACE_WARN_ON(rec->flags & FTRACE_FL_FREE); 2679 ftrace_free_rec(rec); 2680 } 2681 } while_for_each_ftrace_rec(); 2682 mutex_unlock(&ftrace_lock); 2683 } 2684 2685 static void ftrace_init_module(struct module *mod, 2686 unsigned long *start, unsigned long *end) 2687 { 2688 if (ftrace_disabled || start == end) 2689 return; 2690 ftrace_convert_nops(mod, start, end); 2691 } 2692 2693 static int ftrace_module_notify(struct notifier_block *self, 2694 unsigned long val, void *data) 2695 { 2696 struct module *mod = data; 2697 2698 switch (val) { 2699 case MODULE_STATE_COMING: 2700 ftrace_init_module(mod, mod->ftrace_callsites, 2701 mod->ftrace_callsites + 2702 mod->num_ftrace_callsites); 2703 break; 2704 case MODULE_STATE_GOING: 2705 ftrace_release(mod->ftrace_callsites, 2706 mod->ftrace_callsites + 2707 mod->num_ftrace_callsites); 2708 break; 2709 } 2710 2711 return 0; 2712 } 2713 #else 2714 static int ftrace_module_notify(struct notifier_block *self, 2715 unsigned long val, void *data) 2716 { 2717 return 0; 2718 } 2719 #endif /* CONFIG_MODULES */ 2720 2721 struct notifier_block ftrace_module_nb = { 2722 .notifier_call = ftrace_module_notify, 2723 .priority = 0, 2724 }; 2725 2726 extern unsigned long __start_mcount_loc[]; 2727 extern unsigned long __stop_mcount_loc[]; 2728 2729 void __init ftrace_init(void) 2730 { 2731 unsigned long count, addr, flags; 2732 int ret; 2733 2734 /* Keep the ftrace pointer to the stub */ 2735 addr = (unsigned long)ftrace_stub; 2736 2737 local_irq_save(flags); 2738 ftrace_dyn_arch_init(&addr); 2739 local_irq_restore(flags); 2740 2741 /* ftrace_dyn_arch_init places the return code in addr */ 2742 if (addr) 2743 goto failed; 2744 2745 count = __stop_mcount_loc - __start_mcount_loc; 2746 2747 ret = ftrace_dyn_table_alloc(count); 2748 if (ret) 2749 goto failed; 2750 2751 last_ftrace_enabled = ftrace_enabled = 1; 2752 2753 ret = ftrace_convert_nops(NULL, 2754 __start_mcount_loc, 2755 __stop_mcount_loc); 2756 2757 ret = register_module_notifier(&ftrace_module_nb); 2758 if (ret) 2759 pr_warning("Failed to register trace ftrace module notifier\n"); 2760 2761 set_ftrace_early_filters(); 2762 2763 return; 2764 failed: 2765 ftrace_disabled = 1; 2766 } 2767 2768 #else 2769 2770 static int __init ftrace_nodyn_init(void) 2771 { 2772 ftrace_enabled = 1; 2773 return 0; 2774 } 2775 device_initcall(ftrace_nodyn_init); 2776 2777 static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; } 2778 static inline void ftrace_startup_enable(int command) { } 2779 /* Keep as macros so we do not need to define the commands */ 2780 # define ftrace_startup(command) do { } while (0) 2781 # define ftrace_shutdown(command) do { } while (0) 2782 # define ftrace_startup_sysctl() do { } while (0) 2783 # define ftrace_shutdown_sysctl() do { } while (0) 2784 #endif /* CONFIG_DYNAMIC_FTRACE */ 2785 2786 static ssize_t 2787 ftrace_pid_read(struct file *file, char __user *ubuf, 2788 size_t cnt, loff_t *ppos) 2789 { 2790 char buf[64]; 2791 int r; 2792 2793 if (ftrace_pid_trace == ftrace_swapper_pid) 2794 r = sprintf(buf, "swapper tasks\n"); 2795 else if (ftrace_pid_trace) 2796 r = sprintf(buf, "%u\n", pid_vnr(ftrace_pid_trace)); 2797 else 2798 r = sprintf(buf, "no pid\n"); 2799 2800 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 2801 } 2802 2803 static void clear_ftrace_swapper(void) 2804 { 2805 struct task_struct *p; 2806 int cpu; 2807 2808 get_online_cpus(); 2809 for_each_online_cpu(cpu) { 2810 p = idle_task(cpu); 2811 clear_tsk_trace_trace(p); 2812 } 2813 put_online_cpus(); 2814 } 2815 2816 static void set_ftrace_swapper(void) 2817 { 2818 struct task_struct *p; 2819 int cpu; 2820 2821 get_online_cpus(); 2822 for_each_online_cpu(cpu) { 2823 p = idle_task(cpu); 2824 set_tsk_trace_trace(p); 2825 } 2826 put_online_cpus(); 2827 } 2828 2829 static void clear_ftrace_pid(struct pid *pid) 2830 { 2831 struct task_struct *p; 2832 2833 rcu_read_lock(); 2834 do_each_pid_task(pid, PIDTYPE_PID, p) { 2835 clear_tsk_trace_trace(p); 2836 } while_each_pid_task(pid, PIDTYPE_PID, p); 2837 rcu_read_unlock(); 2838 2839 put_pid(pid); 2840 } 2841 2842 static void set_ftrace_pid(struct pid *pid) 2843 { 2844 struct task_struct *p; 2845 2846 rcu_read_lock(); 2847 do_each_pid_task(pid, PIDTYPE_PID, p) { 2848 set_tsk_trace_trace(p); 2849 } while_each_pid_task(pid, PIDTYPE_PID, p); 2850 rcu_read_unlock(); 2851 } 2852 2853 static void clear_ftrace_pid_task(struct pid **pid) 2854 { 2855 if (*pid == ftrace_swapper_pid) 2856 clear_ftrace_swapper(); 2857 else 2858 clear_ftrace_pid(*pid); 2859 2860 *pid = NULL; 2861 } 2862 2863 static void set_ftrace_pid_task(struct pid *pid) 2864 { 2865 if (pid == ftrace_swapper_pid) 2866 set_ftrace_swapper(); 2867 else 2868 set_ftrace_pid(pid); 2869 } 2870 2871 static ssize_t 2872 ftrace_pid_write(struct file *filp, const char __user *ubuf, 2873 size_t cnt, loff_t *ppos) 2874 { 2875 struct pid *pid; 2876 char buf[64]; 2877 long val; 2878 int ret; 2879 2880 if (cnt >= sizeof(buf)) 2881 return -EINVAL; 2882 2883 if (copy_from_user(&buf, ubuf, cnt)) 2884 return -EFAULT; 2885 2886 buf[cnt] = 0; 2887 2888 ret = strict_strtol(buf, 10, &val); 2889 if (ret < 0) 2890 return ret; 2891 2892 mutex_lock(&ftrace_lock); 2893 if (val < 0) { 2894 /* disable pid tracing */ 2895 if (!ftrace_pid_trace) 2896 goto out; 2897 2898 clear_ftrace_pid_task(&ftrace_pid_trace); 2899 2900 } else { 2901 /* swapper task is special */ 2902 if (!val) { 2903 pid = ftrace_swapper_pid; 2904 if (pid == ftrace_pid_trace) 2905 goto out; 2906 } else { 2907 pid = find_get_pid(val); 2908 2909 if (pid == ftrace_pid_trace) { 2910 put_pid(pid); 2911 goto out; 2912 } 2913 } 2914 2915 if (ftrace_pid_trace) 2916 clear_ftrace_pid_task(&ftrace_pid_trace); 2917 2918 if (!pid) 2919 goto out; 2920 2921 ftrace_pid_trace = pid; 2922 2923 set_ftrace_pid_task(ftrace_pid_trace); 2924 } 2925 2926 /* update the function call */ 2927 ftrace_update_pid_func(); 2928 ftrace_startup_enable(0); 2929 2930 out: 2931 mutex_unlock(&ftrace_lock); 2932 2933 return cnt; 2934 } 2935 2936 static const struct file_operations ftrace_pid_fops = { 2937 .read = ftrace_pid_read, 2938 .write = ftrace_pid_write, 2939 }; 2940 2941 static __init int ftrace_init_debugfs(void) 2942 { 2943 struct dentry *d_tracer; 2944 2945 d_tracer = tracing_init_dentry(); 2946 if (!d_tracer) 2947 return 0; 2948 2949 ftrace_init_dyn_debugfs(d_tracer); 2950 2951 trace_create_file("set_ftrace_pid", 0644, d_tracer, 2952 NULL, &ftrace_pid_fops); 2953 2954 ftrace_profile_debugfs(d_tracer); 2955 2956 return 0; 2957 } 2958 fs_initcall(ftrace_init_debugfs); 2959 2960 /** 2961 * ftrace_kill - kill ftrace 2962 * 2963 * This function should be used by panic code. It stops ftrace 2964 * but in a not so nice way. If you need to simply kill ftrace 2965 * from a non-atomic section, use ftrace_kill. 2966 */ 2967 void ftrace_kill(void) 2968 { 2969 ftrace_disabled = 1; 2970 ftrace_enabled = 0; 2971 clear_ftrace_function(); 2972 } 2973 2974 /** 2975 * register_ftrace_function - register a function for profiling 2976 * @ops - ops structure that holds the function for profiling. 2977 * 2978 * Register a function to be called by all functions in the 2979 * kernel. 2980 * 2981 * Note: @ops->func and all the functions it calls must be labeled 2982 * with "notrace", otherwise it will go into a 2983 * recursive loop. 2984 */ 2985 int register_ftrace_function(struct ftrace_ops *ops) 2986 { 2987 int ret; 2988 2989 if (unlikely(ftrace_disabled)) 2990 return -1; 2991 2992 mutex_lock(&ftrace_lock); 2993 2994 ret = __register_ftrace_function(ops); 2995 ftrace_startup(0); 2996 2997 mutex_unlock(&ftrace_lock); 2998 return ret; 2999 } 3000 3001 /** 3002 * unregister_ftrace_function - unregister a function for profiling. 3003 * @ops - ops structure that holds the function to unregister 3004 * 3005 * Unregister a function that was added to be called by ftrace profiling. 3006 */ 3007 int unregister_ftrace_function(struct ftrace_ops *ops) 3008 { 3009 int ret; 3010 3011 mutex_lock(&ftrace_lock); 3012 ret = __unregister_ftrace_function(ops); 3013 ftrace_shutdown(0); 3014 mutex_unlock(&ftrace_lock); 3015 3016 return ret; 3017 } 3018 3019 int 3020 ftrace_enable_sysctl(struct ctl_table *table, int write, 3021 void __user *buffer, size_t *lenp, 3022 loff_t *ppos) 3023 { 3024 int ret; 3025 3026 if (unlikely(ftrace_disabled)) 3027 return -ENODEV; 3028 3029 mutex_lock(&ftrace_lock); 3030 3031 ret = proc_dointvec(table, write, buffer, lenp, ppos); 3032 3033 if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) 3034 goto out; 3035 3036 last_ftrace_enabled = !!ftrace_enabled; 3037 3038 if (ftrace_enabled) { 3039 3040 ftrace_startup_sysctl(); 3041 3042 /* we are starting ftrace again */ 3043 if (ftrace_list != &ftrace_list_end) { 3044 if (ftrace_list->next == &ftrace_list_end) 3045 ftrace_trace_function = ftrace_list->func; 3046 else 3047 ftrace_trace_function = ftrace_list_func; 3048 } 3049 3050 } else { 3051 /* stopping ftrace calls (just send to ftrace_stub) */ 3052 ftrace_trace_function = ftrace_stub; 3053 3054 ftrace_shutdown_sysctl(); 3055 } 3056 3057 out: 3058 mutex_unlock(&ftrace_lock); 3059 return ret; 3060 } 3061 3062 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3063 3064 static int ftrace_graph_active; 3065 static struct notifier_block ftrace_suspend_notifier; 3066 3067 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 3068 { 3069 return 0; 3070 } 3071 3072 /* The callbacks that hook a function */ 3073 trace_func_graph_ret_t ftrace_graph_return = 3074 (trace_func_graph_ret_t)ftrace_stub; 3075 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; 3076 3077 /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ 3078 static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) 3079 { 3080 int i; 3081 int ret = 0; 3082 unsigned long flags; 3083 int start = 0, end = FTRACE_RETSTACK_ALLOC_SIZE; 3084 struct task_struct *g, *t; 3085 3086 for (i = 0; i < FTRACE_RETSTACK_ALLOC_SIZE; i++) { 3087 ret_stack_list[i] = kmalloc(FTRACE_RETFUNC_DEPTH 3088 * sizeof(struct ftrace_ret_stack), 3089 GFP_KERNEL); 3090 if (!ret_stack_list[i]) { 3091 start = 0; 3092 end = i; 3093 ret = -ENOMEM; 3094 goto free; 3095 } 3096 } 3097 3098 read_lock_irqsave(&tasklist_lock, flags); 3099 do_each_thread(g, t) { 3100 if (start == end) { 3101 ret = -EAGAIN; 3102 goto unlock; 3103 } 3104 3105 if (t->ret_stack == NULL) { 3106 atomic_set(&t->tracing_graph_pause, 0); 3107 atomic_set(&t->trace_overrun, 0); 3108 t->curr_ret_stack = -1; 3109 /* Make sure the tasks see the -1 first: */ 3110 smp_wmb(); 3111 t->ret_stack = ret_stack_list[start++]; 3112 } 3113 } while_each_thread(g, t); 3114 3115 unlock: 3116 read_unlock_irqrestore(&tasklist_lock, flags); 3117 free: 3118 for (i = start; i < end; i++) 3119 kfree(ret_stack_list[i]); 3120 return ret; 3121 } 3122 3123 static void 3124 ftrace_graph_probe_sched_switch(struct rq *__rq, struct task_struct *prev, 3125 struct task_struct *next) 3126 { 3127 unsigned long long timestamp; 3128 int index; 3129 3130 /* 3131 * Does the user want to count the time a function was asleep. 3132 * If so, do not update the time stamps. 3133 */ 3134 if (trace_flags & TRACE_ITER_SLEEP_TIME) 3135 return; 3136 3137 timestamp = trace_clock_local(); 3138 3139 prev->ftrace_timestamp = timestamp; 3140 3141 /* only process tasks that we timestamped */ 3142 if (!next->ftrace_timestamp) 3143 return; 3144 3145 /* 3146 * Update all the counters in next to make up for the 3147 * time next was sleeping. 3148 */ 3149 timestamp -= next->ftrace_timestamp; 3150 3151 for (index = next->curr_ret_stack; index >= 0; index--) 3152 next->ret_stack[index].calltime += timestamp; 3153 } 3154 3155 /* Allocate a return stack for each task */ 3156 static int start_graph_tracing(void) 3157 { 3158 struct ftrace_ret_stack **ret_stack_list; 3159 int ret, cpu; 3160 3161 ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * 3162 sizeof(struct ftrace_ret_stack *), 3163 GFP_KERNEL); 3164 3165 if (!ret_stack_list) 3166 return -ENOMEM; 3167 3168 /* The cpu_boot init_task->ret_stack will never be freed */ 3169 for_each_online_cpu(cpu) { 3170 if (!idle_task(cpu)->ret_stack) 3171 ftrace_graph_init_task(idle_task(cpu)); 3172 } 3173 3174 do { 3175 ret = alloc_retstack_tasklist(ret_stack_list); 3176 } while (ret == -EAGAIN); 3177 3178 if (!ret) { 3179 ret = register_trace_sched_switch(ftrace_graph_probe_sched_switch); 3180 if (ret) 3181 pr_info("ftrace_graph: Couldn't activate tracepoint" 3182 " probe to kernel_sched_switch\n"); 3183 } 3184 3185 kfree(ret_stack_list); 3186 return ret; 3187 } 3188 3189 /* 3190 * Hibernation protection. 3191 * The state of the current task is too much unstable during 3192 * suspend/restore to disk. We want to protect against that. 3193 */ 3194 static int 3195 ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, 3196 void *unused) 3197 { 3198 switch (state) { 3199 case PM_HIBERNATION_PREPARE: 3200 pause_graph_tracing(); 3201 break; 3202 3203 case PM_POST_HIBERNATION: 3204 unpause_graph_tracing(); 3205 break; 3206 } 3207 return NOTIFY_DONE; 3208 } 3209 3210 int register_ftrace_graph(trace_func_graph_ret_t retfunc, 3211 trace_func_graph_ent_t entryfunc) 3212 { 3213 int ret = 0; 3214 3215 mutex_lock(&ftrace_lock); 3216 3217 /* we currently allow only one tracer registered at a time */ 3218 if (ftrace_graph_active) { 3219 ret = -EBUSY; 3220 goto out; 3221 } 3222 3223 ftrace_suspend_notifier.notifier_call = ftrace_suspend_notifier_call; 3224 register_pm_notifier(&ftrace_suspend_notifier); 3225 3226 ftrace_graph_active++; 3227 ret = start_graph_tracing(); 3228 if (ret) { 3229 ftrace_graph_active--; 3230 goto out; 3231 } 3232 3233 ftrace_graph_return = retfunc; 3234 ftrace_graph_entry = entryfunc; 3235 3236 ftrace_startup(FTRACE_START_FUNC_RET); 3237 3238 out: 3239 mutex_unlock(&ftrace_lock); 3240 return ret; 3241 } 3242 3243 void unregister_ftrace_graph(void) 3244 { 3245 mutex_lock(&ftrace_lock); 3246 3247 if (unlikely(!ftrace_graph_active)) 3248 goto out; 3249 3250 ftrace_graph_active--; 3251 unregister_trace_sched_switch(ftrace_graph_probe_sched_switch); 3252 ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub; 3253 ftrace_graph_entry = ftrace_graph_entry_stub; 3254 ftrace_shutdown(FTRACE_STOP_FUNC_RET); 3255 unregister_pm_notifier(&ftrace_suspend_notifier); 3256 3257 out: 3258 mutex_unlock(&ftrace_lock); 3259 } 3260 3261 /* Allocate a return stack for newly created task */ 3262 void ftrace_graph_init_task(struct task_struct *t) 3263 { 3264 /* Make sure we do not use the parent ret_stack */ 3265 t->ret_stack = NULL; 3266 3267 if (ftrace_graph_active) { 3268 struct ftrace_ret_stack *ret_stack; 3269 3270 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 3271 * sizeof(struct ftrace_ret_stack), 3272 GFP_KERNEL); 3273 if (!ret_stack) 3274 return; 3275 t->curr_ret_stack = -1; 3276 atomic_set(&t->tracing_graph_pause, 0); 3277 atomic_set(&t->trace_overrun, 0); 3278 t->ftrace_timestamp = 0; 3279 /* make curr_ret_stack visable before we add the ret_stack */ 3280 smp_wmb(); 3281 t->ret_stack = ret_stack; 3282 } 3283 } 3284 3285 void ftrace_graph_exit_task(struct task_struct *t) 3286 { 3287 struct ftrace_ret_stack *ret_stack = t->ret_stack; 3288 3289 t->ret_stack = NULL; 3290 /* NULL must become visible to IRQs before we free it: */ 3291 barrier(); 3292 3293 kfree(ret_stack); 3294 } 3295 3296 void ftrace_graph_stop(void) 3297 { 3298 ftrace_stop(); 3299 } 3300 #endif 3301 3302