1 /* 2 * Infrastructure for profiling code inserted by 'gcc -pg'. 3 * 4 * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com> 5 * Copyright (C) 2004-2008 Ingo Molnar <mingo@redhat.com> 6 * 7 * Originally ported from the -rt patch by: 8 * Copyright (C) 2007 Arnaldo Carvalho de Melo <acme@redhat.com> 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/module.h> 26 #include <linux/ftrace.h> 27 #include <linux/sysctl.h> 28 #include <linux/slab.h> 29 #include <linux/ctype.h> 30 #include <linux/list.h> 31 #include <linux/hash.h> 32 #include <linux/rcupdate.h> 33 34 #include <trace/events/sched.h> 35 36 #include <asm/setup.h> 37 38 #include "trace_output.h" 39 #include "trace_stat.h" 40 41 #define FTRACE_WARN_ON(cond) \ 42 ({ \ 43 int ___r = cond; \ 44 if (WARN_ON(___r)) \ 45 ftrace_kill(); \ 46 ___r; \ 47 }) 48 49 #define FTRACE_WARN_ON_ONCE(cond) \ 50 ({ \ 51 int ___r = cond; \ 52 if (WARN_ON_ONCE(___r)) \ 53 ftrace_kill(); \ 54 ___r; \ 55 }) 56 57 /* hash bits for specific function selection */ 58 #define FTRACE_HASH_BITS 7 59 #define FTRACE_FUNC_HASHSIZE (1 << FTRACE_HASH_BITS) 60 #define FTRACE_HASH_DEFAULT_BITS 10 61 #define FTRACE_HASH_MAX_BITS 12 62 63 /* ftrace_enabled is a method to turn ftrace on or off */ 64 int ftrace_enabled __read_mostly; 65 static int last_ftrace_enabled; 66 67 /* Quick disabling of function tracer. */ 68 int function_trace_stop; 69 70 /* List for set_ftrace_pid's pids. */ 71 LIST_HEAD(ftrace_pids); 72 struct ftrace_pid { 73 struct list_head list; 74 struct pid *pid; 75 }; 76 77 /* 78 * ftrace_disabled is set when an anomaly is discovered. 79 * ftrace_disabled is much stronger than ftrace_enabled. 80 */ 81 static int ftrace_disabled __read_mostly; 82 83 static DEFINE_MUTEX(ftrace_lock); 84 85 static struct ftrace_ops ftrace_list_end __read_mostly = { 86 .func = ftrace_stub, 87 }; 88 89 static struct ftrace_ops *ftrace_global_list __read_mostly = &ftrace_list_end; 90 static struct ftrace_ops *ftrace_ops_list __read_mostly = &ftrace_list_end; 91 ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; 92 static ftrace_func_t __ftrace_trace_function_delay __read_mostly = ftrace_stub; 93 ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub; 94 ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub; 95 static struct ftrace_ops global_ops; 96 97 static void 98 ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip); 99 100 /* 101 * Traverse the ftrace_global_list, invoking all entries. The reason that we 102 * can use rcu_dereference_raw() is that elements removed from this list 103 * are simply leaked, so there is no need to interact with a grace-period 104 * mechanism. The rcu_dereference_raw() calls are needed to handle 105 * concurrent insertions into the ftrace_global_list. 106 * 107 * Silly Alpha and silly pointer-speculation compiler optimizations! 108 */ 109 static void ftrace_global_list_func(unsigned long ip, 110 unsigned long parent_ip) 111 { 112 struct ftrace_ops *op; 113 114 if (unlikely(trace_recursion_test(TRACE_GLOBAL_BIT))) 115 return; 116 117 trace_recursion_set(TRACE_GLOBAL_BIT); 118 op = rcu_dereference_raw(ftrace_global_list); /*see above*/ 119 while (op != &ftrace_list_end) { 120 op->func(ip, parent_ip); 121 op = rcu_dereference_raw(op->next); /*see above*/ 122 }; 123 trace_recursion_clear(TRACE_GLOBAL_BIT); 124 } 125 126 static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip) 127 { 128 if (!test_tsk_trace_trace(current)) 129 return; 130 131 ftrace_pid_function(ip, parent_ip); 132 } 133 134 static void set_ftrace_pid_function(ftrace_func_t func) 135 { 136 /* do not set ftrace_pid_function to itself! */ 137 if (func != ftrace_pid_func) 138 ftrace_pid_function = func; 139 } 140 141 /** 142 * clear_ftrace_function - reset the ftrace function 143 * 144 * This NULLs the ftrace function and in essence stops 145 * tracing. There may be lag 146 */ 147 void clear_ftrace_function(void) 148 { 149 ftrace_trace_function = ftrace_stub; 150 __ftrace_trace_function = ftrace_stub; 151 __ftrace_trace_function_delay = ftrace_stub; 152 ftrace_pid_function = ftrace_stub; 153 } 154 155 #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 156 /* 157 * For those archs that do not test ftrace_trace_stop in their 158 * mcount call site, we need to do it from C. 159 */ 160 static void ftrace_test_stop_func(unsigned long ip, unsigned long parent_ip) 161 { 162 if (function_trace_stop) 163 return; 164 165 __ftrace_trace_function(ip, parent_ip); 166 } 167 #endif 168 169 static void update_global_ops(void) 170 { 171 ftrace_func_t func; 172 173 /* 174 * If there's only one function registered, then call that 175 * function directly. Otherwise, we need to iterate over the 176 * registered callers. 177 */ 178 if (ftrace_global_list == &ftrace_list_end || 179 ftrace_global_list->next == &ftrace_list_end) 180 func = ftrace_global_list->func; 181 else 182 func = ftrace_global_list_func; 183 184 /* If we filter on pids, update to use the pid function */ 185 if (!list_empty(&ftrace_pids)) { 186 set_ftrace_pid_function(func); 187 func = ftrace_pid_func; 188 } 189 190 global_ops.func = func; 191 } 192 193 static void update_ftrace_function(void) 194 { 195 ftrace_func_t func; 196 197 update_global_ops(); 198 199 /* 200 * If we are at the end of the list and this ops is 201 * not dynamic, then have the mcount trampoline call 202 * the function directly 203 */ 204 if (ftrace_ops_list == &ftrace_list_end || 205 (ftrace_ops_list->next == &ftrace_list_end && 206 !(ftrace_ops_list->flags & FTRACE_OPS_FL_DYNAMIC))) 207 func = ftrace_ops_list->func; 208 else 209 func = ftrace_ops_list_func; 210 211 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 212 ftrace_trace_function = func; 213 #else 214 #ifdef CONFIG_DYNAMIC_FTRACE 215 /* do not update till all functions have been modified */ 216 __ftrace_trace_function_delay = func; 217 #else 218 __ftrace_trace_function = func; 219 #endif 220 ftrace_trace_function = ftrace_test_stop_func; 221 #endif 222 } 223 224 static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops) 225 { 226 ops->next = *list; 227 /* 228 * We are entering ops into the list but another 229 * CPU might be walking that list. We need to make sure 230 * the ops->next pointer is valid before another CPU sees 231 * the ops pointer included into the list. 232 */ 233 rcu_assign_pointer(*list, ops); 234 } 235 236 static int remove_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops) 237 { 238 struct ftrace_ops **p; 239 240 /* 241 * If we are removing the last function, then simply point 242 * to the ftrace_stub. 243 */ 244 if (*list == ops && ops->next == &ftrace_list_end) { 245 *list = &ftrace_list_end; 246 return 0; 247 } 248 249 for (p = list; *p != &ftrace_list_end; p = &(*p)->next) 250 if (*p == ops) 251 break; 252 253 if (*p != ops) 254 return -1; 255 256 *p = (*p)->next; 257 return 0; 258 } 259 260 static int __register_ftrace_function(struct ftrace_ops *ops) 261 { 262 if (ftrace_disabled) 263 return -ENODEV; 264 265 if (FTRACE_WARN_ON(ops == &global_ops)) 266 return -EINVAL; 267 268 if (WARN_ON(ops->flags & FTRACE_OPS_FL_ENABLED)) 269 return -EBUSY; 270 271 if (!core_kernel_data((unsigned long)ops)) 272 ops->flags |= FTRACE_OPS_FL_DYNAMIC; 273 274 if (ops->flags & FTRACE_OPS_FL_GLOBAL) { 275 int first = ftrace_global_list == &ftrace_list_end; 276 add_ftrace_ops(&ftrace_global_list, ops); 277 ops->flags |= FTRACE_OPS_FL_ENABLED; 278 if (first) 279 add_ftrace_ops(&ftrace_ops_list, &global_ops); 280 } else 281 add_ftrace_ops(&ftrace_ops_list, ops); 282 283 if (ftrace_enabled) 284 update_ftrace_function(); 285 286 return 0; 287 } 288 289 static int __unregister_ftrace_function(struct ftrace_ops *ops) 290 { 291 int ret; 292 293 if (ftrace_disabled) 294 return -ENODEV; 295 296 if (WARN_ON(!(ops->flags & FTRACE_OPS_FL_ENABLED))) 297 return -EBUSY; 298 299 if (FTRACE_WARN_ON(ops == &global_ops)) 300 return -EINVAL; 301 302 if (ops->flags & FTRACE_OPS_FL_GLOBAL) { 303 ret = remove_ftrace_ops(&ftrace_global_list, ops); 304 if (!ret && ftrace_global_list == &ftrace_list_end) 305 ret = remove_ftrace_ops(&ftrace_ops_list, &global_ops); 306 if (!ret) 307 ops->flags &= ~FTRACE_OPS_FL_ENABLED; 308 } else 309 ret = remove_ftrace_ops(&ftrace_ops_list, ops); 310 311 if (ret < 0) 312 return ret; 313 314 if (ftrace_enabled) 315 update_ftrace_function(); 316 317 /* 318 * Dynamic ops may be freed, we must make sure that all 319 * callers are done before leaving this function. 320 */ 321 if (ops->flags & FTRACE_OPS_FL_DYNAMIC) 322 synchronize_sched(); 323 324 return 0; 325 } 326 327 static void ftrace_update_pid_func(void) 328 { 329 /* Only do something if we are tracing something */ 330 if (ftrace_trace_function == ftrace_stub) 331 return; 332 333 update_ftrace_function(); 334 } 335 336 #ifdef CONFIG_FUNCTION_PROFILER 337 struct ftrace_profile { 338 struct hlist_node node; 339 unsigned long ip; 340 unsigned long counter; 341 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 342 unsigned long long time; 343 unsigned long long time_squared; 344 #endif 345 }; 346 347 struct ftrace_profile_page { 348 struct ftrace_profile_page *next; 349 unsigned long index; 350 struct ftrace_profile records[]; 351 }; 352 353 struct ftrace_profile_stat { 354 atomic_t disabled; 355 struct hlist_head *hash; 356 struct ftrace_profile_page *pages; 357 struct ftrace_profile_page *start; 358 struct tracer_stat stat; 359 }; 360 361 #define PROFILE_RECORDS_SIZE \ 362 (PAGE_SIZE - offsetof(struct ftrace_profile_page, records)) 363 364 #define PROFILES_PER_PAGE \ 365 (PROFILE_RECORDS_SIZE / sizeof(struct ftrace_profile)) 366 367 static int ftrace_profile_bits __read_mostly; 368 static int ftrace_profile_enabled __read_mostly; 369 370 /* ftrace_profile_lock - synchronize the enable and disable of the profiler */ 371 static DEFINE_MUTEX(ftrace_profile_lock); 372 373 static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats); 374 375 #define FTRACE_PROFILE_HASH_SIZE 1024 /* must be power of 2 */ 376 377 static void * 378 function_stat_next(void *v, int idx) 379 { 380 struct ftrace_profile *rec = v; 381 struct ftrace_profile_page *pg; 382 383 pg = (struct ftrace_profile_page *)((unsigned long)rec & PAGE_MASK); 384 385 again: 386 if (idx != 0) 387 rec++; 388 389 if ((void *)rec >= (void *)&pg->records[pg->index]) { 390 pg = pg->next; 391 if (!pg) 392 return NULL; 393 rec = &pg->records[0]; 394 if (!rec->counter) 395 goto again; 396 } 397 398 return rec; 399 } 400 401 static void *function_stat_start(struct tracer_stat *trace) 402 { 403 struct ftrace_profile_stat *stat = 404 container_of(trace, struct ftrace_profile_stat, stat); 405 406 if (!stat || !stat->start) 407 return NULL; 408 409 return function_stat_next(&stat->start->records[0], 0); 410 } 411 412 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 413 /* function graph compares on total time */ 414 static int function_stat_cmp(void *p1, void *p2) 415 { 416 struct ftrace_profile *a = p1; 417 struct ftrace_profile *b = p2; 418 419 if (a->time < b->time) 420 return -1; 421 if (a->time > b->time) 422 return 1; 423 else 424 return 0; 425 } 426 #else 427 /* not function graph compares against hits */ 428 static int function_stat_cmp(void *p1, void *p2) 429 { 430 struct ftrace_profile *a = p1; 431 struct ftrace_profile *b = p2; 432 433 if (a->counter < b->counter) 434 return -1; 435 if (a->counter > b->counter) 436 return 1; 437 else 438 return 0; 439 } 440 #endif 441 442 static int function_stat_headers(struct seq_file *m) 443 { 444 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 445 seq_printf(m, " Function " 446 "Hit Time Avg s^2\n" 447 " -------- " 448 "--- ---- --- ---\n"); 449 #else 450 seq_printf(m, " Function Hit\n" 451 " -------- ---\n"); 452 #endif 453 return 0; 454 } 455 456 static int function_stat_show(struct seq_file *m, void *v) 457 { 458 struct ftrace_profile *rec = v; 459 char str[KSYM_SYMBOL_LEN]; 460 int ret = 0; 461 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 462 static struct trace_seq s; 463 unsigned long long avg; 464 unsigned long long stddev; 465 #endif 466 mutex_lock(&ftrace_profile_lock); 467 468 /* we raced with function_profile_reset() */ 469 if (unlikely(rec->counter == 0)) { 470 ret = -EBUSY; 471 goto out; 472 } 473 474 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 475 seq_printf(m, " %-30.30s %10lu", str, rec->counter); 476 477 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 478 seq_printf(m, " "); 479 avg = rec->time; 480 do_div(avg, rec->counter); 481 482 /* Sample standard deviation (s^2) */ 483 if (rec->counter <= 1) 484 stddev = 0; 485 else { 486 stddev = rec->time_squared - rec->counter * avg * avg; 487 /* 488 * Divide only 1000 for ns^2 -> us^2 conversion. 489 * trace_print_graph_duration will divide 1000 again. 490 */ 491 do_div(stddev, (rec->counter - 1) * 1000); 492 } 493 494 trace_seq_init(&s); 495 trace_print_graph_duration(rec->time, &s); 496 trace_seq_puts(&s, " "); 497 trace_print_graph_duration(avg, &s); 498 trace_seq_puts(&s, " "); 499 trace_print_graph_duration(stddev, &s); 500 trace_print_seq(m, &s); 501 #endif 502 seq_putc(m, '\n'); 503 out: 504 mutex_unlock(&ftrace_profile_lock); 505 506 return ret; 507 } 508 509 static void ftrace_profile_reset(struct ftrace_profile_stat *stat) 510 { 511 struct ftrace_profile_page *pg; 512 513 pg = stat->pages = stat->start; 514 515 while (pg) { 516 memset(pg->records, 0, PROFILE_RECORDS_SIZE); 517 pg->index = 0; 518 pg = pg->next; 519 } 520 521 memset(stat->hash, 0, 522 FTRACE_PROFILE_HASH_SIZE * sizeof(struct hlist_head)); 523 } 524 525 int ftrace_profile_pages_init(struct ftrace_profile_stat *stat) 526 { 527 struct ftrace_profile_page *pg; 528 int functions; 529 int pages; 530 int i; 531 532 /* If we already allocated, do nothing */ 533 if (stat->pages) 534 return 0; 535 536 stat->pages = (void *)get_zeroed_page(GFP_KERNEL); 537 if (!stat->pages) 538 return -ENOMEM; 539 540 #ifdef CONFIG_DYNAMIC_FTRACE 541 functions = ftrace_update_tot_cnt; 542 #else 543 /* 544 * We do not know the number of functions that exist because 545 * dynamic tracing is what counts them. With past experience 546 * we have around 20K functions. That should be more than enough. 547 * It is highly unlikely we will execute every function in 548 * the kernel. 549 */ 550 functions = 20000; 551 #endif 552 553 pg = stat->start = stat->pages; 554 555 pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE); 556 557 for (i = 0; i < pages; i++) { 558 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 559 if (!pg->next) 560 goto out_free; 561 pg = pg->next; 562 } 563 564 return 0; 565 566 out_free: 567 pg = stat->start; 568 while (pg) { 569 unsigned long tmp = (unsigned long)pg; 570 571 pg = pg->next; 572 free_page(tmp); 573 } 574 575 free_page((unsigned long)stat->pages); 576 stat->pages = NULL; 577 stat->start = NULL; 578 579 return -ENOMEM; 580 } 581 582 static int ftrace_profile_init_cpu(int cpu) 583 { 584 struct ftrace_profile_stat *stat; 585 int size; 586 587 stat = &per_cpu(ftrace_profile_stats, cpu); 588 589 if (stat->hash) { 590 /* If the profile is already created, simply reset it */ 591 ftrace_profile_reset(stat); 592 return 0; 593 } 594 595 /* 596 * We are profiling all functions, but usually only a few thousand 597 * functions are hit. We'll make a hash of 1024 items. 598 */ 599 size = FTRACE_PROFILE_HASH_SIZE; 600 601 stat->hash = kzalloc(sizeof(struct hlist_head) * size, GFP_KERNEL); 602 603 if (!stat->hash) 604 return -ENOMEM; 605 606 if (!ftrace_profile_bits) { 607 size--; 608 609 for (; size; size >>= 1) 610 ftrace_profile_bits++; 611 } 612 613 /* Preallocate the function profiling pages */ 614 if (ftrace_profile_pages_init(stat) < 0) { 615 kfree(stat->hash); 616 stat->hash = NULL; 617 return -ENOMEM; 618 } 619 620 return 0; 621 } 622 623 static int ftrace_profile_init(void) 624 { 625 int cpu; 626 int ret = 0; 627 628 for_each_online_cpu(cpu) { 629 ret = ftrace_profile_init_cpu(cpu); 630 if (ret) 631 break; 632 } 633 634 return ret; 635 } 636 637 /* interrupts must be disabled */ 638 static struct ftrace_profile * 639 ftrace_find_profiled_func(struct ftrace_profile_stat *stat, unsigned long ip) 640 { 641 struct ftrace_profile *rec; 642 struct hlist_head *hhd; 643 struct hlist_node *n; 644 unsigned long key; 645 646 key = hash_long(ip, ftrace_profile_bits); 647 hhd = &stat->hash[key]; 648 649 if (hlist_empty(hhd)) 650 return NULL; 651 652 hlist_for_each_entry_rcu(rec, n, hhd, node) { 653 if (rec->ip == ip) 654 return rec; 655 } 656 657 return NULL; 658 } 659 660 static void ftrace_add_profile(struct ftrace_profile_stat *stat, 661 struct ftrace_profile *rec) 662 { 663 unsigned long key; 664 665 key = hash_long(rec->ip, ftrace_profile_bits); 666 hlist_add_head_rcu(&rec->node, &stat->hash[key]); 667 } 668 669 /* 670 * The memory is already allocated, this simply finds a new record to use. 671 */ 672 static struct ftrace_profile * 673 ftrace_profile_alloc(struct ftrace_profile_stat *stat, unsigned long ip) 674 { 675 struct ftrace_profile *rec = NULL; 676 677 /* prevent recursion (from NMIs) */ 678 if (atomic_inc_return(&stat->disabled) != 1) 679 goto out; 680 681 /* 682 * Try to find the function again since an NMI 683 * could have added it 684 */ 685 rec = ftrace_find_profiled_func(stat, ip); 686 if (rec) 687 goto out; 688 689 if (stat->pages->index == PROFILES_PER_PAGE) { 690 if (!stat->pages->next) 691 goto out; 692 stat->pages = stat->pages->next; 693 } 694 695 rec = &stat->pages->records[stat->pages->index++]; 696 rec->ip = ip; 697 ftrace_add_profile(stat, rec); 698 699 out: 700 atomic_dec(&stat->disabled); 701 702 return rec; 703 } 704 705 static void 706 function_profile_call(unsigned long ip, unsigned long parent_ip) 707 { 708 struct ftrace_profile_stat *stat; 709 struct ftrace_profile *rec; 710 unsigned long flags; 711 712 if (!ftrace_profile_enabled) 713 return; 714 715 local_irq_save(flags); 716 717 stat = &__get_cpu_var(ftrace_profile_stats); 718 if (!stat->hash || !ftrace_profile_enabled) 719 goto out; 720 721 rec = ftrace_find_profiled_func(stat, ip); 722 if (!rec) { 723 rec = ftrace_profile_alloc(stat, ip); 724 if (!rec) 725 goto out; 726 } 727 728 rec->counter++; 729 out: 730 local_irq_restore(flags); 731 } 732 733 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 734 static int profile_graph_entry(struct ftrace_graph_ent *trace) 735 { 736 function_profile_call(trace->func, 0); 737 return 1; 738 } 739 740 static void profile_graph_return(struct ftrace_graph_ret *trace) 741 { 742 struct ftrace_profile_stat *stat; 743 unsigned long long calltime; 744 struct ftrace_profile *rec; 745 unsigned long flags; 746 747 local_irq_save(flags); 748 stat = &__get_cpu_var(ftrace_profile_stats); 749 if (!stat->hash || !ftrace_profile_enabled) 750 goto out; 751 752 /* If the calltime was zero'd ignore it */ 753 if (!trace->calltime) 754 goto out; 755 756 calltime = trace->rettime - trace->calltime; 757 758 if (!(trace_flags & TRACE_ITER_GRAPH_TIME)) { 759 int index; 760 761 index = trace->depth; 762 763 /* Append this call time to the parent time to subtract */ 764 if (index) 765 current->ret_stack[index - 1].subtime += calltime; 766 767 if (current->ret_stack[index].subtime < calltime) 768 calltime -= current->ret_stack[index].subtime; 769 else 770 calltime = 0; 771 } 772 773 rec = ftrace_find_profiled_func(stat, trace->func); 774 if (rec) { 775 rec->time += calltime; 776 rec->time_squared += calltime * calltime; 777 } 778 779 out: 780 local_irq_restore(flags); 781 } 782 783 static int register_ftrace_profiler(void) 784 { 785 return register_ftrace_graph(&profile_graph_return, 786 &profile_graph_entry); 787 } 788 789 static void unregister_ftrace_profiler(void) 790 { 791 unregister_ftrace_graph(); 792 } 793 #else 794 static struct ftrace_ops ftrace_profile_ops __read_mostly = { 795 .func = function_profile_call, 796 }; 797 798 static int register_ftrace_profiler(void) 799 { 800 return register_ftrace_function(&ftrace_profile_ops); 801 } 802 803 static void unregister_ftrace_profiler(void) 804 { 805 unregister_ftrace_function(&ftrace_profile_ops); 806 } 807 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 808 809 static ssize_t 810 ftrace_profile_write(struct file *filp, const char __user *ubuf, 811 size_t cnt, loff_t *ppos) 812 { 813 unsigned long val; 814 int ret; 815 816 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 817 if (ret) 818 return ret; 819 820 val = !!val; 821 822 mutex_lock(&ftrace_profile_lock); 823 if (ftrace_profile_enabled ^ val) { 824 if (val) { 825 ret = ftrace_profile_init(); 826 if (ret < 0) { 827 cnt = ret; 828 goto out; 829 } 830 831 ret = register_ftrace_profiler(); 832 if (ret < 0) { 833 cnt = ret; 834 goto out; 835 } 836 ftrace_profile_enabled = 1; 837 } else { 838 ftrace_profile_enabled = 0; 839 /* 840 * unregister_ftrace_profiler calls stop_machine 841 * so this acts like an synchronize_sched. 842 */ 843 unregister_ftrace_profiler(); 844 } 845 } 846 out: 847 mutex_unlock(&ftrace_profile_lock); 848 849 *ppos += cnt; 850 851 return cnt; 852 } 853 854 static ssize_t 855 ftrace_profile_read(struct file *filp, char __user *ubuf, 856 size_t cnt, loff_t *ppos) 857 { 858 char buf[64]; /* big enough to hold a number */ 859 int r; 860 861 r = sprintf(buf, "%u\n", ftrace_profile_enabled); 862 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 863 } 864 865 static const struct file_operations ftrace_profile_fops = { 866 .open = tracing_open_generic, 867 .read = ftrace_profile_read, 868 .write = ftrace_profile_write, 869 .llseek = default_llseek, 870 }; 871 872 /* used to initialize the real stat files */ 873 static struct tracer_stat function_stats __initdata = { 874 .name = "functions", 875 .stat_start = function_stat_start, 876 .stat_next = function_stat_next, 877 .stat_cmp = function_stat_cmp, 878 .stat_headers = function_stat_headers, 879 .stat_show = function_stat_show 880 }; 881 882 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 883 { 884 struct ftrace_profile_stat *stat; 885 struct dentry *entry; 886 char *name; 887 int ret; 888 int cpu; 889 890 for_each_possible_cpu(cpu) { 891 stat = &per_cpu(ftrace_profile_stats, cpu); 892 893 /* allocate enough for function name + cpu number */ 894 name = kmalloc(32, GFP_KERNEL); 895 if (!name) { 896 /* 897 * The files created are permanent, if something happens 898 * we still do not free memory. 899 */ 900 WARN(1, 901 "Could not allocate stat file for cpu %d\n", 902 cpu); 903 return; 904 } 905 stat->stat = function_stats; 906 snprintf(name, 32, "function%d", cpu); 907 stat->stat.name = name; 908 ret = register_stat_tracer(&stat->stat); 909 if (ret) { 910 WARN(1, 911 "Could not register function stat for cpu %d\n", 912 cpu); 913 kfree(name); 914 return; 915 } 916 } 917 918 entry = debugfs_create_file("function_profile_enabled", 0644, 919 d_tracer, NULL, &ftrace_profile_fops); 920 if (!entry) 921 pr_warning("Could not create debugfs " 922 "'function_profile_enabled' entry\n"); 923 } 924 925 #else /* CONFIG_FUNCTION_PROFILER */ 926 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 927 { 928 } 929 #endif /* CONFIG_FUNCTION_PROFILER */ 930 931 static struct pid * const ftrace_swapper_pid = &init_struct_pid; 932 933 #ifdef CONFIG_DYNAMIC_FTRACE 934 935 #ifndef CONFIG_FTRACE_MCOUNT_RECORD 936 # error Dynamic ftrace depends on MCOUNT_RECORD 937 #endif 938 939 static struct hlist_head ftrace_func_hash[FTRACE_FUNC_HASHSIZE] __read_mostly; 940 941 struct ftrace_func_probe { 942 struct hlist_node node; 943 struct ftrace_probe_ops *ops; 944 unsigned long flags; 945 unsigned long ip; 946 void *data; 947 struct rcu_head rcu; 948 }; 949 950 enum { 951 FTRACE_ENABLE_CALLS = (1 << 0), 952 FTRACE_DISABLE_CALLS = (1 << 1), 953 FTRACE_UPDATE_TRACE_FUNC = (1 << 2), 954 FTRACE_START_FUNC_RET = (1 << 3), 955 FTRACE_STOP_FUNC_RET = (1 << 4), 956 }; 957 struct ftrace_func_entry { 958 struct hlist_node hlist; 959 unsigned long ip; 960 }; 961 962 struct ftrace_hash { 963 unsigned long size_bits; 964 struct hlist_head *buckets; 965 unsigned long count; 966 struct rcu_head rcu; 967 }; 968 969 /* 970 * We make these constant because no one should touch them, 971 * but they are used as the default "empty hash", to avoid allocating 972 * it all the time. These are in a read only section such that if 973 * anyone does try to modify it, it will cause an exception. 974 */ 975 static const struct hlist_head empty_buckets[1]; 976 static const struct ftrace_hash empty_hash = { 977 .buckets = (struct hlist_head *)empty_buckets, 978 }; 979 #define EMPTY_HASH ((struct ftrace_hash *)&empty_hash) 980 981 static struct ftrace_ops global_ops = { 982 .func = ftrace_stub, 983 .notrace_hash = EMPTY_HASH, 984 .filter_hash = EMPTY_HASH, 985 }; 986 987 static struct dyn_ftrace *ftrace_new_addrs; 988 989 static DEFINE_MUTEX(ftrace_regex_lock); 990 991 struct ftrace_page { 992 struct ftrace_page *next; 993 int index; 994 struct dyn_ftrace records[]; 995 }; 996 997 #define ENTRIES_PER_PAGE \ 998 ((PAGE_SIZE - sizeof(struct ftrace_page)) / sizeof(struct dyn_ftrace)) 999 1000 /* estimate from running different kernels */ 1001 #define NR_TO_INIT 10000 1002 1003 static struct ftrace_page *ftrace_pages_start; 1004 static struct ftrace_page *ftrace_pages; 1005 1006 static struct dyn_ftrace *ftrace_free_records; 1007 1008 static struct ftrace_func_entry * 1009 ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip) 1010 { 1011 unsigned long key; 1012 struct ftrace_func_entry *entry; 1013 struct hlist_head *hhd; 1014 struct hlist_node *n; 1015 1016 if (!hash->count) 1017 return NULL; 1018 1019 if (hash->size_bits > 0) 1020 key = hash_long(ip, hash->size_bits); 1021 else 1022 key = 0; 1023 1024 hhd = &hash->buckets[key]; 1025 1026 hlist_for_each_entry_rcu(entry, n, hhd, hlist) { 1027 if (entry->ip == ip) 1028 return entry; 1029 } 1030 return NULL; 1031 } 1032 1033 static void __add_hash_entry(struct ftrace_hash *hash, 1034 struct ftrace_func_entry *entry) 1035 { 1036 struct hlist_head *hhd; 1037 unsigned long key; 1038 1039 if (hash->size_bits) 1040 key = hash_long(entry->ip, hash->size_bits); 1041 else 1042 key = 0; 1043 1044 hhd = &hash->buckets[key]; 1045 hlist_add_head(&entry->hlist, hhd); 1046 hash->count++; 1047 } 1048 1049 static int add_hash_entry(struct ftrace_hash *hash, unsigned long ip) 1050 { 1051 struct ftrace_func_entry *entry; 1052 1053 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 1054 if (!entry) 1055 return -ENOMEM; 1056 1057 entry->ip = ip; 1058 __add_hash_entry(hash, entry); 1059 1060 return 0; 1061 } 1062 1063 static void 1064 free_hash_entry(struct ftrace_hash *hash, 1065 struct ftrace_func_entry *entry) 1066 { 1067 hlist_del(&entry->hlist); 1068 kfree(entry); 1069 hash->count--; 1070 } 1071 1072 static void 1073 remove_hash_entry(struct ftrace_hash *hash, 1074 struct ftrace_func_entry *entry) 1075 { 1076 hlist_del(&entry->hlist); 1077 hash->count--; 1078 } 1079 1080 static void ftrace_hash_clear(struct ftrace_hash *hash) 1081 { 1082 struct hlist_head *hhd; 1083 struct hlist_node *tp, *tn; 1084 struct ftrace_func_entry *entry; 1085 int size = 1 << hash->size_bits; 1086 int i; 1087 1088 if (!hash->count) 1089 return; 1090 1091 for (i = 0; i < size; i++) { 1092 hhd = &hash->buckets[i]; 1093 hlist_for_each_entry_safe(entry, tp, tn, hhd, hlist) 1094 free_hash_entry(hash, entry); 1095 } 1096 FTRACE_WARN_ON(hash->count); 1097 } 1098 1099 static void free_ftrace_hash(struct ftrace_hash *hash) 1100 { 1101 if (!hash || hash == EMPTY_HASH) 1102 return; 1103 ftrace_hash_clear(hash); 1104 kfree(hash->buckets); 1105 kfree(hash); 1106 } 1107 1108 static void __free_ftrace_hash_rcu(struct rcu_head *rcu) 1109 { 1110 struct ftrace_hash *hash; 1111 1112 hash = container_of(rcu, struct ftrace_hash, rcu); 1113 free_ftrace_hash(hash); 1114 } 1115 1116 static void free_ftrace_hash_rcu(struct ftrace_hash *hash) 1117 { 1118 if (!hash || hash == EMPTY_HASH) 1119 return; 1120 call_rcu_sched(&hash->rcu, __free_ftrace_hash_rcu); 1121 } 1122 1123 static struct ftrace_hash *alloc_ftrace_hash(int size_bits) 1124 { 1125 struct ftrace_hash *hash; 1126 int size; 1127 1128 hash = kzalloc(sizeof(*hash), GFP_KERNEL); 1129 if (!hash) 1130 return NULL; 1131 1132 size = 1 << size_bits; 1133 hash->buckets = kzalloc(sizeof(*hash->buckets) * size, GFP_KERNEL); 1134 1135 if (!hash->buckets) { 1136 kfree(hash); 1137 return NULL; 1138 } 1139 1140 hash->size_bits = size_bits; 1141 1142 return hash; 1143 } 1144 1145 static struct ftrace_hash * 1146 alloc_and_copy_ftrace_hash(int size_bits, struct ftrace_hash *hash) 1147 { 1148 struct ftrace_func_entry *entry; 1149 struct ftrace_hash *new_hash; 1150 struct hlist_node *tp; 1151 int size; 1152 int ret; 1153 int i; 1154 1155 new_hash = alloc_ftrace_hash(size_bits); 1156 if (!new_hash) 1157 return NULL; 1158 1159 /* Empty hash? */ 1160 if (!hash || !hash->count) 1161 return new_hash; 1162 1163 size = 1 << hash->size_bits; 1164 for (i = 0; i < size; i++) { 1165 hlist_for_each_entry(entry, tp, &hash->buckets[i], hlist) { 1166 ret = add_hash_entry(new_hash, entry->ip); 1167 if (ret < 0) 1168 goto free_hash; 1169 } 1170 } 1171 1172 FTRACE_WARN_ON(new_hash->count != hash->count); 1173 1174 return new_hash; 1175 1176 free_hash: 1177 free_ftrace_hash(new_hash); 1178 return NULL; 1179 } 1180 1181 static void 1182 ftrace_hash_rec_disable(struct ftrace_ops *ops, int filter_hash); 1183 static void 1184 ftrace_hash_rec_enable(struct ftrace_ops *ops, int filter_hash); 1185 1186 static int 1187 ftrace_hash_move(struct ftrace_ops *ops, int enable, 1188 struct ftrace_hash **dst, struct ftrace_hash *src) 1189 { 1190 struct ftrace_func_entry *entry; 1191 struct hlist_node *tp, *tn; 1192 struct hlist_head *hhd; 1193 struct ftrace_hash *old_hash; 1194 struct ftrace_hash *new_hash; 1195 unsigned long key; 1196 int size = src->count; 1197 int bits = 0; 1198 int ret; 1199 int i; 1200 1201 /* 1202 * Remove the current set, update the hash and add 1203 * them back. 1204 */ 1205 ftrace_hash_rec_disable(ops, enable); 1206 1207 /* 1208 * If the new source is empty, just free dst and assign it 1209 * the empty_hash. 1210 */ 1211 if (!src->count) { 1212 free_ftrace_hash_rcu(*dst); 1213 rcu_assign_pointer(*dst, EMPTY_HASH); 1214 /* still need to update the function records */ 1215 ret = 0; 1216 goto out; 1217 } 1218 1219 /* 1220 * Make the hash size about 1/2 the # found 1221 */ 1222 for (size /= 2; size; size >>= 1) 1223 bits++; 1224 1225 /* Don't allocate too much */ 1226 if (bits > FTRACE_HASH_MAX_BITS) 1227 bits = FTRACE_HASH_MAX_BITS; 1228 1229 ret = -ENOMEM; 1230 new_hash = alloc_ftrace_hash(bits); 1231 if (!new_hash) 1232 goto out; 1233 1234 size = 1 << src->size_bits; 1235 for (i = 0; i < size; i++) { 1236 hhd = &src->buckets[i]; 1237 hlist_for_each_entry_safe(entry, tp, tn, hhd, hlist) { 1238 if (bits > 0) 1239 key = hash_long(entry->ip, bits); 1240 else 1241 key = 0; 1242 remove_hash_entry(src, entry); 1243 __add_hash_entry(new_hash, entry); 1244 } 1245 } 1246 1247 old_hash = *dst; 1248 rcu_assign_pointer(*dst, new_hash); 1249 free_ftrace_hash_rcu(old_hash); 1250 1251 ret = 0; 1252 out: 1253 /* 1254 * Enable regardless of ret: 1255 * On success, we enable the new hash. 1256 * On failure, we re-enable the original hash. 1257 */ 1258 ftrace_hash_rec_enable(ops, enable); 1259 1260 return ret; 1261 } 1262 1263 /* 1264 * Test the hashes for this ops to see if we want to call 1265 * the ops->func or not. 1266 * 1267 * It's a match if the ip is in the ops->filter_hash or 1268 * the filter_hash does not exist or is empty, 1269 * AND 1270 * the ip is not in the ops->notrace_hash. 1271 * 1272 * This needs to be called with preemption disabled as 1273 * the hashes are freed with call_rcu_sched(). 1274 */ 1275 static int 1276 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip) 1277 { 1278 struct ftrace_hash *filter_hash; 1279 struct ftrace_hash *notrace_hash; 1280 int ret; 1281 1282 filter_hash = rcu_dereference_raw(ops->filter_hash); 1283 notrace_hash = rcu_dereference_raw(ops->notrace_hash); 1284 1285 if ((!filter_hash || !filter_hash->count || 1286 ftrace_lookup_ip(filter_hash, ip)) && 1287 (!notrace_hash || !notrace_hash->count || 1288 !ftrace_lookup_ip(notrace_hash, ip))) 1289 ret = 1; 1290 else 1291 ret = 0; 1292 1293 return ret; 1294 } 1295 1296 /* 1297 * This is a double for. Do not use 'break' to break out of the loop, 1298 * you must use a goto. 1299 */ 1300 #define do_for_each_ftrace_rec(pg, rec) \ 1301 for (pg = ftrace_pages_start; pg; pg = pg->next) { \ 1302 int _____i; \ 1303 for (_____i = 0; _____i < pg->index; _____i++) { \ 1304 rec = &pg->records[_____i]; 1305 1306 #define while_for_each_ftrace_rec() \ 1307 } \ 1308 } 1309 1310 static void __ftrace_hash_rec_update(struct ftrace_ops *ops, 1311 int filter_hash, 1312 bool inc) 1313 { 1314 struct ftrace_hash *hash; 1315 struct ftrace_hash *other_hash; 1316 struct ftrace_page *pg; 1317 struct dyn_ftrace *rec; 1318 int count = 0; 1319 int all = 0; 1320 1321 /* Only update if the ops has been registered */ 1322 if (!(ops->flags & FTRACE_OPS_FL_ENABLED)) 1323 return; 1324 1325 /* 1326 * In the filter_hash case: 1327 * If the count is zero, we update all records. 1328 * Otherwise we just update the items in the hash. 1329 * 1330 * In the notrace_hash case: 1331 * We enable the update in the hash. 1332 * As disabling notrace means enabling the tracing, 1333 * and enabling notrace means disabling, the inc variable 1334 * gets inversed. 1335 */ 1336 if (filter_hash) { 1337 hash = ops->filter_hash; 1338 other_hash = ops->notrace_hash; 1339 if (!hash || !hash->count) 1340 all = 1; 1341 } else { 1342 inc = !inc; 1343 hash = ops->notrace_hash; 1344 other_hash = ops->filter_hash; 1345 /* 1346 * If the notrace hash has no items, 1347 * then there's nothing to do. 1348 */ 1349 if (hash && !hash->count) 1350 return; 1351 } 1352 1353 do_for_each_ftrace_rec(pg, rec) { 1354 int in_other_hash = 0; 1355 int in_hash = 0; 1356 int match = 0; 1357 1358 if (all) { 1359 /* 1360 * Only the filter_hash affects all records. 1361 * Update if the record is not in the notrace hash. 1362 */ 1363 if (!other_hash || !ftrace_lookup_ip(other_hash, rec->ip)) 1364 match = 1; 1365 } else { 1366 in_hash = hash && !!ftrace_lookup_ip(hash, rec->ip); 1367 in_other_hash = other_hash && !!ftrace_lookup_ip(other_hash, rec->ip); 1368 1369 /* 1370 * 1371 */ 1372 if (filter_hash && in_hash && !in_other_hash) 1373 match = 1; 1374 else if (!filter_hash && in_hash && 1375 (in_other_hash || !other_hash->count)) 1376 match = 1; 1377 } 1378 if (!match) 1379 continue; 1380 1381 if (inc) { 1382 rec->flags++; 1383 if (FTRACE_WARN_ON((rec->flags & ~FTRACE_FL_MASK) == FTRACE_REF_MAX)) 1384 return; 1385 } else { 1386 if (FTRACE_WARN_ON((rec->flags & ~FTRACE_FL_MASK) == 0)) 1387 return; 1388 rec->flags--; 1389 } 1390 count++; 1391 /* Shortcut, if we handled all records, we are done. */ 1392 if (!all && count == hash->count) 1393 return; 1394 } while_for_each_ftrace_rec(); 1395 } 1396 1397 static void ftrace_hash_rec_disable(struct ftrace_ops *ops, 1398 int filter_hash) 1399 { 1400 __ftrace_hash_rec_update(ops, filter_hash, 0); 1401 } 1402 1403 static void ftrace_hash_rec_enable(struct ftrace_ops *ops, 1404 int filter_hash) 1405 { 1406 __ftrace_hash_rec_update(ops, filter_hash, 1); 1407 } 1408 1409 static void ftrace_free_rec(struct dyn_ftrace *rec) 1410 { 1411 rec->freelist = ftrace_free_records; 1412 ftrace_free_records = rec; 1413 rec->flags |= FTRACE_FL_FREE; 1414 } 1415 1416 static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip) 1417 { 1418 struct dyn_ftrace *rec; 1419 1420 /* First check for freed records */ 1421 if (ftrace_free_records) { 1422 rec = ftrace_free_records; 1423 1424 if (unlikely(!(rec->flags & FTRACE_FL_FREE))) { 1425 FTRACE_WARN_ON_ONCE(1); 1426 ftrace_free_records = NULL; 1427 return NULL; 1428 } 1429 1430 ftrace_free_records = rec->freelist; 1431 memset(rec, 0, sizeof(*rec)); 1432 return rec; 1433 } 1434 1435 if (ftrace_pages->index == ENTRIES_PER_PAGE) { 1436 if (!ftrace_pages->next) { 1437 /* allocate another page */ 1438 ftrace_pages->next = 1439 (void *)get_zeroed_page(GFP_KERNEL); 1440 if (!ftrace_pages->next) 1441 return NULL; 1442 } 1443 ftrace_pages = ftrace_pages->next; 1444 } 1445 1446 return &ftrace_pages->records[ftrace_pages->index++]; 1447 } 1448 1449 static struct dyn_ftrace * 1450 ftrace_record_ip(unsigned long ip) 1451 { 1452 struct dyn_ftrace *rec; 1453 1454 if (ftrace_disabled) 1455 return NULL; 1456 1457 rec = ftrace_alloc_dyn_node(ip); 1458 if (!rec) 1459 return NULL; 1460 1461 rec->ip = ip; 1462 rec->newlist = ftrace_new_addrs; 1463 ftrace_new_addrs = rec; 1464 1465 return rec; 1466 } 1467 1468 static void print_ip_ins(const char *fmt, unsigned char *p) 1469 { 1470 int i; 1471 1472 printk(KERN_CONT "%s", fmt); 1473 1474 for (i = 0; i < MCOUNT_INSN_SIZE; i++) 1475 printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); 1476 } 1477 1478 static void ftrace_bug(int failed, unsigned long ip) 1479 { 1480 switch (failed) { 1481 case -EFAULT: 1482 FTRACE_WARN_ON_ONCE(1); 1483 pr_info("ftrace faulted on modifying "); 1484 print_ip_sym(ip); 1485 break; 1486 case -EINVAL: 1487 FTRACE_WARN_ON_ONCE(1); 1488 pr_info("ftrace failed to modify "); 1489 print_ip_sym(ip); 1490 print_ip_ins(" actual: ", (unsigned char *)ip); 1491 printk(KERN_CONT "\n"); 1492 break; 1493 case -EPERM: 1494 FTRACE_WARN_ON_ONCE(1); 1495 pr_info("ftrace faulted on writing "); 1496 print_ip_sym(ip); 1497 break; 1498 default: 1499 FTRACE_WARN_ON_ONCE(1); 1500 pr_info("ftrace faulted on unknown error "); 1501 print_ip_sym(ip); 1502 } 1503 } 1504 1505 1506 /* Return 1 if the address range is reserved for ftrace */ 1507 int ftrace_text_reserved(void *start, void *end) 1508 { 1509 struct dyn_ftrace *rec; 1510 struct ftrace_page *pg; 1511 1512 do_for_each_ftrace_rec(pg, rec) { 1513 if (rec->ip <= (unsigned long)end && 1514 rec->ip + MCOUNT_INSN_SIZE > (unsigned long)start) 1515 return 1; 1516 } while_for_each_ftrace_rec(); 1517 return 0; 1518 } 1519 1520 1521 static int 1522 __ftrace_replace_code(struct dyn_ftrace *rec, int enable) 1523 { 1524 unsigned long ftrace_addr; 1525 unsigned long flag = 0UL; 1526 1527 ftrace_addr = (unsigned long)FTRACE_ADDR; 1528 1529 /* 1530 * If we are enabling tracing: 1531 * 1532 * If the record has a ref count, then we need to enable it 1533 * because someone is using it. 1534 * 1535 * Otherwise we make sure its disabled. 1536 * 1537 * If we are disabling tracing, then disable all records that 1538 * are enabled. 1539 */ 1540 if (enable && (rec->flags & ~FTRACE_FL_MASK)) 1541 flag = FTRACE_FL_ENABLED; 1542 1543 /* If the state of this record hasn't changed, then do nothing */ 1544 if ((rec->flags & FTRACE_FL_ENABLED) == flag) 1545 return 0; 1546 1547 if (flag) { 1548 rec->flags |= FTRACE_FL_ENABLED; 1549 return ftrace_make_call(rec, ftrace_addr); 1550 } 1551 1552 rec->flags &= ~FTRACE_FL_ENABLED; 1553 return ftrace_make_nop(NULL, rec, ftrace_addr); 1554 } 1555 1556 static void ftrace_replace_code(int enable) 1557 { 1558 struct dyn_ftrace *rec; 1559 struct ftrace_page *pg; 1560 int failed; 1561 1562 if (unlikely(ftrace_disabled)) 1563 return; 1564 1565 do_for_each_ftrace_rec(pg, rec) { 1566 /* Skip over free records */ 1567 if (rec->flags & FTRACE_FL_FREE) 1568 continue; 1569 1570 failed = __ftrace_replace_code(rec, enable); 1571 if (failed) { 1572 ftrace_bug(failed, rec->ip); 1573 /* Stop processing */ 1574 return; 1575 } 1576 } while_for_each_ftrace_rec(); 1577 } 1578 1579 static int 1580 ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) 1581 { 1582 unsigned long ip; 1583 int ret; 1584 1585 ip = rec->ip; 1586 1587 if (unlikely(ftrace_disabled)) 1588 return 0; 1589 1590 ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); 1591 if (ret) { 1592 ftrace_bug(ret, ip); 1593 return 0; 1594 } 1595 return 1; 1596 } 1597 1598 /* 1599 * archs can override this function if they must do something 1600 * before the modifying code is performed. 1601 */ 1602 int __weak ftrace_arch_code_modify_prepare(void) 1603 { 1604 return 0; 1605 } 1606 1607 /* 1608 * archs can override this function if they must do something 1609 * after the modifying code is performed. 1610 */ 1611 int __weak ftrace_arch_code_modify_post_process(void) 1612 { 1613 return 0; 1614 } 1615 1616 static int __ftrace_modify_code(void *data) 1617 { 1618 int *command = data; 1619 1620 /* 1621 * Do not call function tracer while we update the code. 1622 * We are in stop machine, no worrying about races. 1623 */ 1624 function_trace_stop++; 1625 1626 if (*command & FTRACE_ENABLE_CALLS) 1627 ftrace_replace_code(1); 1628 else if (*command & FTRACE_DISABLE_CALLS) 1629 ftrace_replace_code(0); 1630 1631 if (*command & FTRACE_UPDATE_TRACE_FUNC) 1632 ftrace_update_ftrace_func(ftrace_trace_function); 1633 1634 if (*command & FTRACE_START_FUNC_RET) 1635 ftrace_enable_ftrace_graph_caller(); 1636 else if (*command & FTRACE_STOP_FUNC_RET) 1637 ftrace_disable_ftrace_graph_caller(); 1638 1639 #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 1640 /* 1641 * For archs that call ftrace_test_stop_func(), we must 1642 * wait till after we update all the function callers 1643 * before we update the callback. This keeps different 1644 * ops that record different functions from corrupting 1645 * each other. 1646 */ 1647 __ftrace_trace_function = __ftrace_trace_function_delay; 1648 #endif 1649 function_trace_stop--; 1650 1651 return 0; 1652 } 1653 1654 static void ftrace_run_update_code(int command) 1655 { 1656 int ret; 1657 1658 ret = ftrace_arch_code_modify_prepare(); 1659 FTRACE_WARN_ON(ret); 1660 if (ret) 1661 return; 1662 1663 stop_machine(__ftrace_modify_code, &command, NULL); 1664 1665 ret = ftrace_arch_code_modify_post_process(); 1666 FTRACE_WARN_ON(ret); 1667 } 1668 1669 static ftrace_func_t saved_ftrace_func; 1670 static int ftrace_start_up; 1671 static int global_start_up; 1672 1673 static void ftrace_startup_enable(int command) 1674 { 1675 if (saved_ftrace_func != ftrace_trace_function) { 1676 saved_ftrace_func = ftrace_trace_function; 1677 command |= FTRACE_UPDATE_TRACE_FUNC; 1678 } 1679 1680 if (!command || !ftrace_enabled) 1681 return; 1682 1683 ftrace_run_update_code(command); 1684 } 1685 1686 static int ftrace_startup(struct ftrace_ops *ops, int command) 1687 { 1688 bool hash_enable = true; 1689 1690 if (unlikely(ftrace_disabled)) 1691 return -ENODEV; 1692 1693 ftrace_start_up++; 1694 command |= FTRACE_ENABLE_CALLS; 1695 1696 /* ops marked global share the filter hashes */ 1697 if (ops->flags & FTRACE_OPS_FL_GLOBAL) { 1698 ops = &global_ops; 1699 /* Don't update hash if global is already set */ 1700 if (global_start_up) 1701 hash_enable = false; 1702 global_start_up++; 1703 } 1704 1705 ops->flags |= FTRACE_OPS_FL_ENABLED; 1706 if (hash_enable) 1707 ftrace_hash_rec_enable(ops, 1); 1708 1709 ftrace_startup_enable(command); 1710 1711 return 0; 1712 } 1713 1714 static void ftrace_shutdown(struct ftrace_ops *ops, int command) 1715 { 1716 bool hash_disable = true; 1717 1718 if (unlikely(ftrace_disabled)) 1719 return; 1720 1721 ftrace_start_up--; 1722 /* 1723 * Just warn in case of unbalance, no need to kill ftrace, it's not 1724 * critical but the ftrace_call callers may be never nopped again after 1725 * further ftrace uses. 1726 */ 1727 WARN_ON_ONCE(ftrace_start_up < 0); 1728 1729 if (ops->flags & FTRACE_OPS_FL_GLOBAL) { 1730 ops = &global_ops; 1731 global_start_up--; 1732 WARN_ON_ONCE(global_start_up < 0); 1733 /* Don't update hash if global still has users */ 1734 if (global_start_up) { 1735 WARN_ON_ONCE(!ftrace_start_up); 1736 hash_disable = false; 1737 } 1738 } 1739 1740 if (hash_disable) 1741 ftrace_hash_rec_disable(ops, 1); 1742 1743 if (ops != &global_ops || !global_start_up) 1744 ops->flags &= ~FTRACE_OPS_FL_ENABLED; 1745 1746 if (!ftrace_start_up) 1747 command |= FTRACE_DISABLE_CALLS; 1748 1749 if (saved_ftrace_func != ftrace_trace_function) { 1750 saved_ftrace_func = ftrace_trace_function; 1751 command |= FTRACE_UPDATE_TRACE_FUNC; 1752 } 1753 1754 if (!command || !ftrace_enabled) 1755 return; 1756 1757 ftrace_run_update_code(command); 1758 } 1759 1760 static void ftrace_startup_sysctl(void) 1761 { 1762 if (unlikely(ftrace_disabled)) 1763 return; 1764 1765 /* Force update next time */ 1766 saved_ftrace_func = NULL; 1767 /* ftrace_start_up is true if we want ftrace running */ 1768 if (ftrace_start_up) 1769 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 1770 } 1771 1772 static void ftrace_shutdown_sysctl(void) 1773 { 1774 if (unlikely(ftrace_disabled)) 1775 return; 1776 1777 /* ftrace_start_up is true if ftrace is running */ 1778 if (ftrace_start_up) 1779 ftrace_run_update_code(FTRACE_DISABLE_CALLS); 1780 } 1781 1782 static cycle_t ftrace_update_time; 1783 static unsigned long ftrace_update_cnt; 1784 unsigned long ftrace_update_tot_cnt; 1785 1786 static int ops_traces_mod(struct ftrace_ops *ops) 1787 { 1788 struct ftrace_hash *hash; 1789 1790 hash = ops->filter_hash; 1791 return !!(!hash || !hash->count); 1792 } 1793 1794 static int ftrace_update_code(struct module *mod) 1795 { 1796 struct dyn_ftrace *p; 1797 cycle_t start, stop; 1798 unsigned long ref = 0; 1799 1800 /* 1801 * When adding a module, we need to check if tracers are 1802 * currently enabled and if they are set to trace all functions. 1803 * If they are, we need to enable the module functions as well 1804 * as update the reference counts for those function records. 1805 */ 1806 if (mod) { 1807 struct ftrace_ops *ops; 1808 1809 for (ops = ftrace_ops_list; 1810 ops != &ftrace_list_end; ops = ops->next) { 1811 if (ops->flags & FTRACE_OPS_FL_ENABLED && 1812 ops_traces_mod(ops)) 1813 ref++; 1814 } 1815 } 1816 1817 start = ftrace_now(raw_smp_processor_id()); 1818 ftrace_update_cnt = 0; 1819 1820 while (ftrace_new_addrs) { 1821 1822 /* If something went wrong, bail without enabling anything */ 1823 if (unlikely(ftrace_disabled)) 1824 return -1; 1825 1826 p = ftrace_new_addrs; 1827 ftrace_new_addrs = p->newlist; 1828 p->flags = ref; 1829 1830 /* 1831 * Do the initial record conversion from mcount jump 1832 * to the NOP instructions. 1833 */ 1834 if (!ftrace_code_disable(mod, p)) { 1835 ftrace_free_rec(p); 1836 /* Game over */ 1837 break; 1838 } 1839 1840 ftrace_update_cnt++; 1841 1842 /* 1843 * If the tracing is enabled, go ahead and enable the record. 1844 * 1845 * The reason not to enable the record immediatelly is the 1846 * inherent check of ftrace_make_nop/ftrace_make_call for 1847 * correct previous instructions. Making first the NOP 1848 * conversion puts the module to the correct state, thus 1849 * passing the ftrace_make_call check. 1850 */ 1851 if (ftrace_start_up && ref) { 1852 int failed = __ftrace_replace_code(p, 1); 1853 if (failed) { 1854 ftrace_bug(failed, p->ip); 1855 ftrace_free_rec(p); 1856 } 1857 } 1858 } 1859 1860 stop = ftrace_now(raw_smp_processor_id()); 1861 ftrace_update_time = stop - start; 1862 ftrace_update_tot_cnt += ftrace_update_cnt; 1863 1864 return 0; 1865 } 1866 1867 static int __init ftrace_dyn_table_alloc(unsigned long num_to_init) 1868 { 1869 struct ftrace_page *pg; 1870 int cnt; 1871 int i; 1872 1873 /* allocate a few pages */ 1874 ftrace_pages_start = (void *)get_zeroed_page(GFP_KERNEL); 1875 if (!ftrace_pages_start) 1876 return -1; 1877 1878 /* 1879 * Allocate a few more pages. 1880 * 1881 * TODO: have some parser search vmlinux before 1882 * final linking to find all calls to ftrace. 1883 * Then we can: 1884 * a) know how many pages to allocate. 1885 * and/or 1886 * b) set up the table then. 1887 * 1888 * The dynamic code is still necessary for 1889 * modules. 1890 */ 1891 1892 pg = ftrace_pages = ftrace_pages_start; 1893 1894 cnt = num_to_init / ENTRIES_PER_PAGE; 1895 pr_info("ftrace: allocating %ld entries in %d pages\n", 1896 num_to_init, cnt + 1); 1897 1898 for (i = 0; i < cnt; i++) { 1899 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 1900 1901 /* If we fail, we'll try later anyway */ 1902 if (!pg->next) 1903 break; 1904 1905 pg = pg->next; 1906 } 1907 1908 return 0; 1909 } 1910 1911 enum { 1912 FTRACE_ITER_FILTER = (1 << 0), 1913 FTRACE_ITER_NOTRACE = (1 << 1), 1914 FTRACE_ITER_PRINTALL = (1 << 2), 1915 FTRACE_ITER_HASH = (1 << 3), 1916 FTRACE_ITER_ENABLED = (1 << 4), 1917 }; 1918 1919 #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ 1920 1921 struct ftrace_iterator { 1922 loff_t pos; 1923 loff_t func_pos; 1924 struct ftrace_page *pg; 1925 struct dyn_ftrace *func; 1926 struct ftrace_func_probe *probe; 1927 struct trace_parser parser; 1928 struct ftrace_hash *hash; 1929 struct ftrace_ops *ops; 1930 int hidx; 1931 int idx; 1932 unsigned flags; 1933 }; 1934 1935 static void * 1936 t_hash_next(struct seq_file *m, loff_t *pos) 1937 { 1938 struct ftrace_iterator *iter = m->private; 1939 struct hlist_node *hnd = NULL; 1940 struct hlist_head *hhd; 1941 1942 (*pos)++; 1943 iter->pos = *pos; 1944 1945 if (iter->probe) 1946 hnd = &iter->probe->node; 1947 retry: 1948 if (iter->hidx >= FTRACE_FUNC_HASHSIZE) 1949 return NULL; 1950 1951 hhd = &ftrace_func_hash[iter->hidx]; 1952 1953 if (hlist_empty(hhd)) { 1954 iter->hidx++; 1955 hnd = NULL; 1956 goto retry; 1957 } 1958 1959 if (!hnd) 1960 hnd = hhd->first; 1961 else { 1962 hnd = hnd->next; 1963 if (!hnd) { 1964 iter->hidx++; 1965 goto retry; 1966 } 1967 } 1968 1969 if (WARN_ON_ONCE(!hnd)) 1970 return NULL; 1971 1972 iter->probe = hlist_entry(hnd, struct ftrace_func_probe, node); 1973 1974 return iter; 1975 } 1976 1977 static void *t_hash_start(struct seq_file *m, loff_t *pos) 1978 { 1979 struct ftrace_iterator *iter = m->private; 1980 void *p = NULL; 1981 loff_t l; 1982 1983 if (iter->func_pos > *pos) 1984 return NULL; 1985 1986 iter->hidx = 0; 1987 for (l = 0; l <= (*pos - iter->func_pos); ) { 1988 p = t_hash_next(m, &l); 1989 if (!p) 1990 break; 1991 } 1992 if (!p) 1993 return NULL; 1994 1995 /* Only set this if we have an item */ 1996 iter->flags |= FTRACE_ITER_HASH; 1997 1998 return iter; 1999 } 2000 2001 static int 2002 t_hash_show(struct seq_file *m, struct ftrace_iterator *iter) 2003 { 2004 struct ftrace_func_probe *rec; 2005 2006 rec = iter->probe; 2007 if (WARN_ON_ONCE(!rec)) 2008 return -EIO; 2009 2010 if (rec->ops->print) 2011 return rec->ops->print(m, rec->ip, rec->ops, rec->data); 2012 2013 seq_printf(m, "%ps:%ps", (void *)rec->ip, (void *)rec->ops->func); 2014 2015 if (rec->data) 2016 seq_printf(m, ":%p", rec->data); 2017 seq_putc(m, '\n'); 2018 2019 return 0; 2020 } 2021 2022 static void * 2023 t_next(struct seq_file *m, void *v, loff_t *pos) 2024 { 2025 struct ftrace_iterator *iter = m->private; 2026 struct ftrace_ops *ops = &global_ops; 2027 struct dyn_ftrace *rec = NULL; 2028 2029 if (unlikely(ftrace_disabled)) 2030 return NULL; 2031 2032 if (iter->flags & FTRACE_ITER_HASH) 2033 return t_hash_next(m, pos); 2034 2035 (*pos)++; 2036 iter->pos = iter->func_pos = *pos; 2037 2038 if (iter->flags & FTRACE_ITER_PRINTALL) 2039 return t_hash_start(m, pos); 2040 2041 retry: 2042 if (iter->idx >= iter->pg->index) { 2043 if (iter->pg->next) { 2044 iter->pg = iter->pg->next; 2045 iter->idx = 0; 2046 goto retry; 2047 } 2048 } else { 2049 rec = &iter->pg->records[iter->idx++]; 2050 if ((rec->flags & FTRACE_FL_FREE) || 2051 2052 ((iter->flags & FTRACE_ITER_FILTER) && 2053 !(ftrace_lookup_ip(ops->filter_hash, rec->ip))) || 2054 2055 ((iter->flags & FTRACE_ITER_NOTRACE) && 2056 !ftrace_lookup_ip(ops->notrace_hash, rec->ip)) || 2057 2058 ((iter->flags & FTRACE_ITER_ENABLED) && 2059 !(rec->flags & ~FTRACE_FL_MASK))) { 2060 2061 rec = NULL; 2062 goto retry; 2063 } 2064 } 2065 2066 if (!rec) 2067 return t_hash_start(m, pos); 2068 2069 iter->func = rec; 2070 2071 return iter; 2072 } 2073 2074 static void reset_iter_read(struct ftrace_iterator *iter) 2075 { 2076 iter->pos = 0; 2077 iter->func_pos = 0; 2078 iter->flags &= ~(FTRACE_ITER_PRINTALL & FTRACE_ITER_HASH); 2079 } 2080 2081 static void *t_start(struct seq_file *m, loff_t *pos) 2082 { 2083 struct ftrace_iterator *iter = m->private; 2084 struct ftrace_ops *ops = &global_ops; 2085 void *p = NULL; 2086 loff_t l; 2087 2088 mutex_lock(&ftrace_lock); 2089 2090 if (unlikely(ftrace_disabled)) 2091 return NULL; 2092 2093 /* 2094 * If an lseek was done, then reset and start from beginning. 2095 */ 2096 if (*pos < iter->pos) 2097 reset_iter_read(iter); 2098 2099 /* 2100 * For set_ftrace_filter reading, if we have the filter 2101 * off, we can short cut and just print out that all 2102 * functions are enabled. 2103 */ 2104 if (iter->flags & FTRACE_ITER_FILTER && !ops->filter_hash->count) { 2105 if (*pos > 0) 2106 return t_hash_start(m, pos); 2107 iter->flags |= FTRACE_ITER_PRINTALL; 2108 /* reset in case of seek/pread */ 2109 iter->flags &= ~FTRACE_ITER_HASH; 2110 return iter; 2111 } 2112 2113 if (iter->flags & FTRACE_ITER_HASH) 2114 return t_hash_start(m, pos); 2115 2116 /* 2117 * Unfortunately, we need to restart at ftrace_pages_start 2118 * every time we let go of the ftrace_mutex. This is because 2119 * those pointers can change without the lock. 2120 */ 2121 iter->pg = ftrace_pages_start; 2122 iter->idx = 0; 2123 for (l = 0; l <= *pos; ) { 2124 p = t_next(m, p, &l); 2125 if (!p) 2126 break; 2127 } 2128 2129 if (!p) { 2130 if (iter->flags & FTRACE_ITER_FILTER) 2131 return t_hash_start(m, pos); 2132 2133 return NULL; 2134 } 2135 2136 return iter; 2137 } 2138 2139 static void t_stop(struct seq_file *m, void *p) 2140 { 2141 mutex_unlock(&ftrace_lock); 2142 } 2143 2144 static int t_show(struct seq_file *m, void *v) 2145 { 2146 struct ftrace_iterator *iter = m->private; 2147 struct dyn_ftrace *rec; 2148 2149 if (iter->flags & FTRACE_ITER_HASH) 2150 return t_hash_show(m, iter); 2151 2152 if (iter->flags & FTRACE_ITER_PRINTALL) { 2153 seq_printf(m, "#### all functions enabled ####\n"); 2154 return 0; 2155 } 2156 2157 rec = iter->func; 2158 2159 if (!rec) 2160 return 0; 2161 2162 seq_printf(m, "%ps", (void *)rec->ip); 2163 if (iter->flags & FTRACE_ITER_ENABLED) 2164 seq_printf(m, " (%ld)", 2165 rec->flags & ~FTRACE_FL_MASK); 2166 seq_printf(m, "\n"); 2167 2168 return 0; 2169 } 2170 2171 static const struct seq_operations show_ftrace_seq_ops = { 2172 .start = t_start, 2173 .next = t_next, 2174 .stop = t_stop, 2175 .show = t_show, 2176 }; 2177 2178 static int 2179 ftrace_avail_open(struct inode *inode, struct file *file) 2180 { 2181 struct ftrace_iterator *iter; 2182 int ret; 2183 2184 if (unlikely(ftrace_disabled)) 2185 return -ENODEV; 2186 2187 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 2188 if (!iter) 2189 return -ENOMEM; 2190 2191 iter->pg = ftrace_pages_start; 2192 2193 ret = seq_open(file, &show_ftrace_seq_ops); 2194 if (!ret) { 2195 struct seq_file *m = file->private_data; 2196 2197 m->private = iter; 2198 } else { 2199 kfree(iter); 2200 } 2201 2202 return ret; 2203 } 2204 2205 static int 2206 ftrace_enabled_open(struct inode *inode, struct file *file) 2207 { 2208 struct ftrace_iterator *iter; 2209 int ret; 2210 2211 if (unlikely(ftrace_disabled)) 2212 return -ENODEV; 2213 2214 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 2215 if (!iter) 2216 return -ENOMEM; 2217 2218 iter->pg = ftrace_pages_start; 2219 iter->flags = FTRACE_ITER_ENABLED; 2220 2221 ret = seq_open(file, &show_ftrace_seq_ops); 2222 if (!ret) { 2223 struct seq_file *m = file->private_data; 2224 2225 m->private = iter; 2226 } else { 2227 kfree(iter); 2228 } 2229 2230 return ret; 2231 } 2232 2233 static void ftrace_filter_reset(struct ftrace_hash *hash) 2234 { 2235 mutex_lock(&ftrace_lock); 2236 ftrace_hash_clear(hash); 2237 mutex_unlock(&ftrace_lock); 2238 } 2239 2240 static int 2241 ftrace_regex_open(struct ftrace_ops *ops, int flag, 2242 struct inode *inode, struct file *file) 2243 { 2244 struct ftrace_iterator *iter; 2245 struct ftrace_hash *hash; 2246 int ret = 0; 2247 2248 if (unlikely(ftrace_disabled)) 2249 return -ENODEV; 2250 2251 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 2252 if (!iter) 2253 return -ENOMEM; 2254 2255 if (trace_parser_get_init(&iter->parser, FTRACE_BUFF_MAX)) { 2256 kfree(iter); 2257 return -ENOMEM; 2258 } 2259 2260 if (flag & FTRACE_ITER_NOTRACE) 2261 hash = ops->notrace_hash; 2262 else 2263 hash = ops->filter_hash; 2264 2265 iter->ops = ops; 2266 iter->flags = flag; 2267 2268 if (file->f_mode & FMODE_WRITE) { 2269 mutex_lock(&ftrace_lock); 2270 iter->hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, hash); 2271 mutex_unlock(&ftrace_lock); 2272 2273 if (!iter->hash) { 2274 trace_parser_put(&iter->parser); 2275 kfree(iter); 2276 return -ENOMEM; 2277 } 2278 } 2279 2280 mutex_lock(&ftrace_regex_lock); 2281 2282 if ((file->f_mode & FMODE_WRITE) && 2283 (file->f_flags & O_TRUNC)) 2284 ftrace_filter_reset(iter->hash); 2285 2286 if (file->f_mode & FMODE_READ) { 2287 iter->pg = ftrace_pages_start; 2288 2289 ret = seq_open(file, &show_ftrace_seq_ops); 2290 if (!ret) { 2291 struct seq_file *m = file->private_data; 2292 m->private = iter; 2293 } else { 2294 /* Failed */ 2295 free_ftrace_hash(iter->hash); 2296 trace_parser_put(&iter->parser); 2297 kfree(iter); 2298 } 2299 } else 2300 file->private_data = iter; 2301 mutex_unlock(&ftrace_regex_lock); 2302 2303 return ret; 2304 } 2305 2306 static int 2307 ftrace_filter_open(struct inode *inode, struct file *file) 2308 { 2309 return ftrace_regex_open(&global_ops, FTRACE_ITER_FILTER, 2310 inode, file); 2311 } 2312 2313 static int 2314 ftrace_notrace_open(struct inode *inode, struct file *file) 2315 { 2316 return ftrace_regex_open(&global_ops, FTRACE_ITER_NOTRACE, 2317 inode, file); 2318 } 2319 2320 static loff_t 2321 ftrace_regex_lseek(struct file *file, loff_t offset, int origin) 2322 { 2323 loff_t ret; 2324 2325 if (file->f_mode & FMODE_READ) 2326 ret = seq_lseek(file, offset, origin); 2327 else 2328 file->f_pos = ret = 1; 2329 2330 return ret; 2331 } 2332 2333 static int ftrace_match(char *str, char *regex, int len, int type) 2334 { 2335 int matched = 0; 2336 int slen; 2337 2338 switch (type) { 2339 case MATCH_FULL: 2340 if (strcmp(str, regex) == 0) 2341 matched = 1; 2342 break; 2343 case MATCH_FRONT_ONLY: 2344 if (strncmp(str, regex, len) == 0) 2345 matched = 1; 2346 break; 2347 case MATCH_MIDDLE_ONLY: 2348 if (strstr(str, regex)) 2349 matched = 1; 2350 break; 2351 case MATCH_END_ONLY: 2352 slen = strlen(str); 2353 if (slen >= len && memcmp(str + slen - len, regex, len) == 0) 2354 matched = 1; 2355 break; 2356 } 2357 2358 return matched; 2359 } 2360 2361 static int 2362 enter_record(struct ftrace_hash *hash, struct dyn_ftrace *rec, int not) 2363 { 2364 struct ftrace_func_entry *entry; 2365 int ret = 0; 2366 2367 entry = ftrace_lookup_ip(hash, rec->ip); 2368 if (not) { 2369 /* Do nothing if it doesn't exist */ 2370 if (!entry) 2371 return 0; 2372 2373 free_hash_entry(hash, entry); 2374 } else { 2375 /* Do nothing if it exists */ 2376 if (entry) 2377 return 0; 2378 2379 ret = add_hash_entry(hash, rec->ip); 2380 } 2381 return ret; 2382 } 2383 2384 static int 2385 ftrace_match_record(struct dyn_ftrace *rec, char *mod, 2386 char *regex, int len, int type) 2387 { 2388 char str[KSYM_SYMBOL_LEN]; 2389 char *modname; 2390 2391 kallsyms_lookup(rec->ip, NULL, NULL, &modname, str); 2392 2393 if (mod) { 2394 /* module lookup requires matching the module */ 2395 if (!modname || strcmp(modname, mod)) 2396 return 0; 2397 2398 /* blank search means to match all funcs in the mod */ 2399 if (!len) 2400 return 1; 2401 } 2402 2403 return ftrace_match(str, regex, len, type); 2404 } 2405 2406 static int 2407 match_records(struct ftrace_hash *hash, char *buff, 2408 int len, char *mod, int not) 2409 { 2410 unsigned search_len = 0; 2411 struct ftrace_page *pg; 2412 struct dyn_ftrace *rec; 2413 int type = MATCH_FULL; 2414 char *search = buff; 2415 int found = 0; 2416 int ret; 2417 2418 if (len) { 2419 type = filter_parse_regex(buff, len, &search, ¬); 2420 search_len = strlen(search); 2421 } 2422 2423 mutex_lock(&ftrace_lock); 2424 2425 if (unlikely(ftrace_disabled)) 2426 goto out_unlock; 2427 2428 do_for_each_ftrace_rec(pg, rec) { 2429 2430 if (ftrace_match_record(rec, mod, search, search_len, type)) { 2431 ret = enter_record(hash, rec, not); 2432 if (ret < 0) { 2433 found = ret; 2434 goto out_unlock; 2435 } 2436 found = 1; 2437 } 2438 } while_for_each_ftrace_rec(); 2439 out_unlock: 2440 mutex_unlock(&ftrace_lock); 2441 2442 return found; 2443 } 2444 2445 static int 2446 ftrace_match_records(struct ftrace_hash *hash, char *buff, int len) 2447 { 2448 return match_records(hash, buff, len, NULL, 0); 2449 } 2450 2451 static int 2452 ftrace_match_module_records(struct ftrace_hash *hash, char *buff, char *mod) 2453 { 2454 int not = 0; 2455 2456 /* blank or '*' mean the same */ 2457 if (strcmp(buff, "*") == 0) 2458 buff[0] = 0; 2459 2460 /* handle the case of 'dont filter this module' */ 2461 if (strcmp(buff, "!") == 0 || strcmp(buff, "!*") == 0) { 2462 buff[0] = 0; 2463 not = 1; 2464 } 2465 2466 return match_records(hash, buff, strlen(buff), mod, not); 2467 } 2468 2469 /* 2470 * We register the module command as a template to show others how 2471 * to register the a command as well. 2472 */ 2473 2474 static int 2475 ftrace_mod_callback(struct ftrace_hash *hash, 2476 char *func, char *cmd, char *param, int enable) 2477 { 2478 char *mod; 2479 int ret = -EINVAL; 2480 2481 /* 2482 * cmd == 'mod' because we only registered this func 2483 * for the 'mod' ftrace_func_command. 2484 * But if you register one func with multiple commands, 2485 * you can tell which command was used by the cmd 2486 * parameter. 2487 */ 2488 2489 /* we must have a module name */ 2490 if (!param) 2491 return ret; 2492 2493 mod = strsep(¶m, ":"); 2494 if (!strlen(mod)) 2495 return ret; 2496 2497 ret = ftrace_match_module_records(hash, func, mod); 2498 if (!ret) 2499 ret = -EINVAL; 2500 if (ret < 0) 2501 return ret; 2502 2503 return 0; 2504 } 2505 2506 static struct ftrace_func_command ftrace_mod_cmd = { 2507 .name = "mod", 2508 .func = ftrace_mod_callback, 2509 }; 2510 2511 static int __init ftrace_mod_cmd_init(void) 2512 { 2513 return register_ftrace_command(&ftrace_mod_cmd); 2514 } 2515 device_initcall(ftrace_mod_cmd_init); 2516 2517 static void 2518 function_trace_probe_call(unsigned long ip, unsigned long parent_ip) 2519 { 2520 struct ftrace_func_probe *entry; 2521 struct hlist_head *hhd; 2522 struct hlist_node *n; 2523 unsigned long key; 2524 2525 key = hash_long(ip, FTRACE_HASH_BITS); 2526 2527 hhd = &ftrace_func_hash[key]; 2528 2529 if (hlist_empty(hhd)) 2530 return; 2531 2532 /* 2533 * Disable preemption for these calls to prevent a RCU grace 2534 * period. This syncs the hash iteration and freeing of items 2535 * on the hash. rcu_read_lock is too dangerous here. 2536 */ 2537 preempt_disable_notrace(); 2538 hlist_for_each_entry_rcu(entry, n, hhd, node) { 2539 if (entry->ip == ip) 2540 entry->ops->func(ip, parent_ip, &entry->data); 2541 } 2542 preempt_enable_notrace(); 2543 } 2544 2545 static struct ftrace_ops trace_probe_ops __read_mostly = 2546 { 2547 .func = function_trace_probe_call, 2548 }; 2549 2550 static int ftrace_probe_registered; 2551 2552 static void __enable_ftrace_function_probe(void) 2553 { 2554 int ret; 2555 int i; 2556 2557 if (ftrace_probe_registered) 2558 return; 2559 2560 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2561 struct hlist_head *hhd = &ftrace_func_hash[i]; 2562 if (hhd->first) 2563 break; 2564 } 2565 /* Nothing registered? */ 2566 if (i == FTRACE_FUNC_HASHSIZE) 2567 return; 2568 2569 ret = __register_ftrace_function(&trace_probe_ops); 2570 if (!ret) 2571 ret = ftrace_startup(&trace_probe_ops, 0); 2572 2573 ftrace_probe_registered = 1; 2574 } 2575 2576 static void __disable_ftrace_function_probe(void) 2577 { 2578 int ret; 2579 int i; 2580 2581 if (!ftrace_probe_registered) 2582 return; 2583 2584 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2585 struct hlist_head *hhd = &ftrace_func_hash[i]; 2586 if (hhd->first) 2587 return; 2588 } 2589 2590 /* no more funcs left */ 2591 ret = __unregister_ftrace_function(&trace_probe_ops); 2592 if (!ret) 2593 ftrace_shutdown(&trace_probe_ops, 0); 2594 2595 ftrace_probe_registered = 0; 2596 } 2597 2598 2599 static void ftrace_free_entry_rcu(struct rcu_head *rhp) 2600 { 2601 struct ftrace_func_probe *entry = 2602 container_of(rhp, struct ftrace_func_probe, rcu); 2603 2604 if (entry->ops->free) 2605 entry->ops->free(&entry->data); 2606 kfree(entry); 2607 } 2608 2609 2610 int 2611 register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2612 void *data) 2613 { 2614 struct ftrace_func_probe *entry; 2615 struct ftrace_page *pg; 2616 struct dyn_ftrace *rec; 2617 int type, len, not; 2618 unsigned long key; 2619 int count = 0; 2620 char *search; 2621 2622 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 2623 len = strlen(search); 2624 2625 /* we do not support '!' for function probes */ 2626 if (WARN_ON(not)) 2627 return -EINVAL; 2628 2629 mutex_lock(&ftrace_lock); 2630 2631 if (unlikely(ftrace_disabled)) 2632 goto out_unlock; 2633 2634 do_for_each_ftrace_rec(pg, rec) { 2635 2636 if (!ftrace_match_record(rec, NULL, search, len, type)) 2637 continue; 2638 2639 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 2640 if (!entry) { 2641 /* If we did not process any, then return error */ 2642 if (!count) 2643 count = -ENOMEM; 2644 goto out_unlock; 2645 } 2646 2647 count++; 2648 2649 entry->data = data; 2650 2651 /* 2652 * The caller might want to do something special 2653 * for each function we find. We call the callback 2654 * to give the caller an opportunity to do so. 2655 */ 2656 if (ops->callback) { 2657 if (ops->callback(rec->ip, &entry->data) < 0) { 2658 /* caller does not like this func */ 2659 kfree(entry); 2660 continue; 2661 } 2662 } 2663 2664 entry->ops = ops; 2665 entry->ip = rec->ip; 2666 2667 key = hash_long(entry->ip, FTRACE_HASH_BITS); 2668 hlist_add_head_rcu(&entry->node, &ftrace_func_hash[key]); 2669 2670 } while_for_each_ftrace_rec(); 2671 __enable_ftrace_function_probe(); 2672 2673 out_unlock: 2674 mutex_unlock(&ftrace_lock); 2675 2676 return count; 2677 } 2678 2679 enum { 2680 PROBE_TEST_FUNC = 1, 2681 PROBE_TEST_DATA = 2 2682 }; 2683 2684 static void 2685 __unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2686 void *data, int flags) 2687 { 2688 struct ftrace_func_probe *entry; 2689 struct hlist_node *n, *tmp; 2690 char str[KSYM_SYMBOL_LEN]; 2691 int type = MATCH_FULL; 2692 int i, len = 0; 2693 char *search; 2694 2695 if (glob && (strcmp(glob, "*") == 0 || !strlen(glob))) 2696 glob = NULL; 2697 else if (glob) { 2698 int not; 2699 2700 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 2701 len = strlen(search); 2702 2703 /* we do not support '!' for function probes */ 2704 if (WARN_ON(not)) 2705 return; 2706 } 2707 2708 mutex_lock(&ftrace_lock); 2709 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2710 struct hlist_head *hhd = &ftrace_func_hash[i]; 2711 2712 hlist_for_each_entry_safe(entry, n, tmp, hhd, node) { 2713 2714 /* break up if statements for readability */ 2715 if ((flags & PROBE_TEST_FUNC) && entry->ops != ops) 2716 continue; 2717 2718 if ((flags & PROBE_TEST_DATA) && entry->data != data) 2719 continue; 2720 2721 /* do this last, since it is the most expensive */ 2722 if (glob) { 2723 kallsyms_lookup(entry->ip, NULL, NULL, 2724 NULL, str); 2725 if (!ftrace_match(str, glob, len, type)) 2726 continue; 2727 } 2728 2729 hlist_del(&entry->node); 2730 call_rcu(&entry->rcu, ftrace_free_entry_rcu); 2731 } 2732 } 2733 __disable_ftrace_function_probe(); 2734 mutex_unlock(&ftrace_lock); 2735 } 2736 2737 void 2738 unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2739 void *data) 2740 { 2741 __unregister_ftrace_function_probe(glob, ops, data, 2742 PROBE_TEST_FUNC | PROBE_TEST_DATA); 2743 } 2744 2745 void 2746 unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops) 2747 { 2748 __unregister_ftrace_function_probe(glob, ops, NULL, PROBE_TEST_FUNC); 2749 } 2750 2751 void unregister_ftrace_function_probe_all(char *glob) 2752 { 2753 __unregister_ftrace_function_probe(glob, NULL, NULL, 0); 2754 } 2755 2756 static LIST_HEAD(ftrace_commands); 2757 static DEFINE_MUTEX(ftrace_cmd_mutex); 2758 2759 int register_ftrace_command(struct ftrace_func_command *cmd) 2760 { 2761 struct ftrace_func_command *p; 2762 int ret = 0; 2763 2764 mutex_lock(&ftrace_cmd_mutex); 2765 list_for_each_entry(p, &ftrace_commands, list) { 2766 if (strcmp(cmd->name, p->name) == 0) { 2767 ret = -EBUSY; 2768 goto out_unlock; 2769 } 2770 } 2771 list_add(&cmd->list, &ftrace_commands); 2772 out_unlock: 2773 mutex_unlock(&ftrace_cmd_mutex); 2774 2775 return ret; 2776 } 2777 2778 int unregister_ftrace_command(struct ftrace_func_command *cmd) 2779 { 2780 struct ftrace_func_command *p, *n; 2781 int ret = -ENODEV; 2782 2783 mutex_lock(&ftrace_cmd_mutex); 2784 list_for_each_entry_safe(p, n, &ftrace_commands, list) { 2785 if (strcmp(cmd->name, p->name) == 0) { 2786 ret = 0; 2787 list_del_init(&p->list); 2788 goto out_unlock; 2789 } 2790 } 2791 out_unlock: 2792 mutex_unlock(&ftrace_cmd_mutex); 2793 2794 return ret; 2795 } 2796 2797 static int ftrace_process_regex(struct ftrace_hash *hash, 2798 char *buff, int len, int enable) 2799 { 2800 char *func, *command, *next = buff; 2801 struct ftrace_func_command *p; 2802 int ret = -EINVAL; 2803 2804 func = strsep(&next, ":"); 2805 2806 if (!next) { 2807 ret = ftrace_match_records(hash, func, len); 2808 if (!ret) 2809 ret = -EINVAL; 2810 if (ret < 0) 2811 return ret; 2812 return 0; 2813 } 2814 2815 /* command found */ 2816 2817 command = strsep(&next, ":"); 2818 2819 mutex_lock(&ftrace_cmd_mutex); 2820 list_for_each_entry(p, &ftrace_commands, list) { 2821 if (strcmp(p->name, command) == 0) { 2822 ret = p->func(hash, func, command, next, enable); 2823 goto out_unlock; 2824 } 2825 } 2826 out_unlock: 2827 mutex_unlock(&ftrace_cmd_mutex); 2828 2829 return ret; 2830 } 2831 2832 static ssize_t 2833 ftrace_regex_write(struct file *file, const char __user *ubuf, 2834 size_t cnt, loff_t *ppos, int enable) 2835 { 2836 struct ftrace_iterator *iter; 2837 struct trace_parser *parser; 2838 ssize_t ret, read; 2839 2840 if (!cnt) 2841 return 0; 2842 2843 mutex_lock(&ftrace_regex_lock); 2844 2845 ret = -ENODEV; 2846 if (unlikely(ftrace_disabled)) 2847 goto out_unlock; 2848 2849 if (file->f_mode & FMODE_READ) { 2850 struct seq_file *m = file->private_data; 2851 iter = m->private; 2852 } else 2853 iter = file->private_data; 2854 2855 parser = &iter->parser; 2856 read = trace_get_user(parser, ubuf, cnt, ppos); 2857 2858 if (read >= 0 && trace_parser_loaded(parser) && 2859 !trace_parser_cont(parser)) { 2860 ret = ftrace_process_regex(iter->hash, parser->buffer, 2861 parser->idx, enable); 2862 trace_parser_clear(parser); 2863 if (ret) 2864 goto out_unlock; 2865 } 2866 2867 ret = read; 2868 out_unlock: 2869 mutex_unlock(&ftrace_regex_lock); 2870 2871 return ret; 2872 } 2873 2874 static ssize_t 2875 ftrace_filter_write(struct file *file, const char __user *ubuf, 2876 size_t cnt, loff_t *ppos) 2877 { 2878 return ftrace_regex_write(file, ubuf, cnt, ppos, 1); 2879 } 2880 2881 static ssize_t 2882 ftrace_notrace_write(struct file *file, const char __user *ubuf, 2883 size_t cnt, loff_t *ppos) 2884 { 2885 return ftrace_regex_write(file, ubuf, cnt, ppos, 0); 2886 } 2887 2888 static int 2889 ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, 2890 int reset, int enable) 2891 { 2892 struct ftrace_hash **orig_hash; 2893 struct ftrace_hash *hash; 2894 int ret; 2895 2896 /* All global ops uses the global ops filters */ 2897 if (ops->flags & FTRACE_OPS_FL_GLOBAL) 2898 ops = &global_ops; 2899 2900 if (unlikely(ftrace_disabled)) 2901 return -ENODEV; 2902 2903 if (enable) 2904 orig_hash = &ops->filter_hash; 2905 else 2906 orig_hash = &ops->notrace_hash; 2907 2908 hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, *orig_hash); 2909 if (!hash) 2910 return -ENOMEM; 2911 2912 mutex_lock(&ftrace_regex_lock); 2913 if (reset) 2914 ftrace_filter_reset(hash); 2915 if (buf) 2916 ftrace_match_records(hash, buf, len); 2917 2918 mutex_lock(&ftrace_lock); 2919 ret = ftrace_hash_move(ops, enable, orig_hash, hash); 2920 if (!ret && ops->flags & FTRACE_OPS_FL_ENABLED 2921 && ftrace_enabled) 2922 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 2923 2924 mutex_unlock(&ftrace_lock); 2925 2926 mutex_unlock(&ftrace_regex_lock); 2927 2928 free_ftrace_hash(hash); 2929 return ret; 2930 } 2931 2932 /** 2933 * ftrace_set_filter - set a function to filter on in ftrace 2934 * @ops - the ops to set the filter with 2935 * @buf - the string that holds the function filter text. 2936 * @len - the length of the string. 2937 * @reset - non zero to reset all filters before applying this filter. 2938 * 2939 * Filters denote which functions should be enabled when tracing is enabled. 2940 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 2941 */ 2942 void ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf, 2943 int len, int reset) 2944 { 2945 ftrace_set_regex(ops, buf, len, reset, 1); 2946 } 2947 EXPORT_SYMBOL_GPL(ftrace_set_filter); 2948 2949 /** 2950 * ftrace_set_notrace - set a function to not trace in ftrace 2951 * @ops - the ops to set the notrace filter with 2952 * @buf - the string that holds the function notrace text. 2953 * @len - the length of the string. 2954 * @reset - non zero to reset all filters before applying this filter. 2955 * 2956 * Notrace Filters denote which functions should not be enabled when tracing 2957 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 2958 * for tracing. 2959 */ 2960 void ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf, 2961 int len, int reset) 2962 { 2963 ftrace_set_regex(ops, buf, len, reset, 0); 2964 } 2965 EXPORT_SYMBOL_GPL(ftrace_set_notrace); 2966 /** 2967 * ftrace_set_filter - set a function to filter on in ftrace 2968 * @ops - the ops to set the filter with 2969 * @buf - the string that holds the function filter text. 2970 * @len - the length of the string. 2971 * @reset - non zero to reset all filters before applying this filter. 2972 * 2973 * Filters denote which functions should be enabled when tracing is enabled. 2974 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 2975 */ 2976 void ftrace_set_global_filter(unsigned char *buf, int len, int reset) 2977 { 2978 ftrace_set_regex(&global_ops, buf, len, reset, 1); 2979 } 2980 EXPORT_SYMBOL_GPL(ftrace_set_global_filter); 2981 2982 /** 2983 * ftrace_set_notrace - set a function to not trace in ftrace 2984 * @ops - the ops to set the notrace filter with 2985 * @buf - the string that holds the function notrace text. 2986 * @len - the length of the string. 2987 * @reset - non zero to reset all filters before applying this filter. 2988 * 2989 * Notrace Filters denote which functions should not be enabled when tracing 2990 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 2991 * for tracing. 2992 */ 2993 void ftrace_set_global_notrace(unsigned char *buf, int len, int reset) 2994 { 2995 ftrace_set_regex(&global_ops, buf, len, reset, 0); 2996 } 2997 EXPORT_SYMBOL_GPL(ftrace_set_global_notrace); 2998 2999 /* 3000 * command line interface to allow users to set filters on boot up. 3001 */ 3002 #define FTRACE_FILTER_SIZE COMMAND_LINE_SIZE 3003 static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 3004 static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata; 3005 3006 static int __init set_ftrace_notrace(char *str) 3007 { 3008 strncpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE); 3009 return 1; 3010 } 3011 __setup("ftrace_notrace=", set_ftrace_notrace); 3012 3013 static int __init set_ftrace_filter(char *str) 3014 { 3015 strncpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE); 3016 return 1; 3017 } 3018 __setup("ftrace_filter=", set_ftrace_filter); 3019 3020 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3021 static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata; 3022 static int ftrace_set_func(unsigned long *array, int *idx, char *buffer); 3023 3024 static int __init set_graph_function(char *str) 3025 { 3026 strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE); 3027 return 1; 3028 } 3029 __setup("ftrace_graph_filter=", set_graph_function); 3030 3031 static void __init set_ftrace_early_graph(char *buf) 3032 { 3033 int ret; 3034 char *func; 3035 3036 while (buf) { 3037 func = strsep(&buf, ","); 3038 /* we allow only one expression at a time */ 3039 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 3040 func); 3041 if (ret) 3042 printk(KERN_DEBUG "ftrace: function %s not " 3043 "traceable\n", func); 3044 } 3045 } 3046 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 3047 3048 static void __init 3049 set_ftrace_early_filter(struct ftrace_ops *ops, char *buf, int enable) 3050 { 3051 char *func; 3052 3053 while (buf) { 3054 func = strsep(&buf, ","); 3055 ftrace_set_regex(ops, func, strlen(func), 0, enable); 3056 } 3057 } 3058 3059 static void __init set_ftrace_early_filters(void) 3060 { 3061 if (ftrace_filter_buf[0]) 3062 set_ftrace_early_filter(&global_ops, ftrace_filter_buf, 1); 3063 if (ftrace_notrace_buf[0]) 3064 set_ftrace_early_filter(&global_ops, ftrace_notrace_buf, 0); 3065 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3066 if (ftrace_graph_buf[0]) 3067 set_ftrace_early_graph(ftrace_graph_buf); 3068 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 3069 } 3070 3071 static int 3072 ftrace_regex_release(struct inode *inode, struct file *file) 3073 { 3074 struct seq_file *m = (struct seq_file *)file->private_data; 3075 struct ftrace_iterator *iter; 3076 struct ftrace_hash **orig_hash; 3077 struct trace_parser *parser; 3078 int filter_hash; 3079 int ret; 3080 3081 mutex_lock(&ftrace_regex_lock); 3082 if (file->f_mode & FMODE_READ) { 3083 iter = m->private; 3084 3085 seq_release(inode, file); 3086 } else 3087 iter = file->private_data; 3088 3089 parser = &iter->parser; 3090 if (trace_parser_loaded(parser)) { 3091 parser->buffer[parser->idx] = 0; 3092 ftrace_match_records(iter->hash, parser->buffer, parser->idx); 3093 } 3094 3095 trace_parser_put(parser); 3096 3097 if (file->f_mode & FMODE_WRITE) { 3098 filter_hash = !!(iter->flags & FTRACE_ITER_FILTER); 3099 3100 if (filter_hash) 3101 orig_hash = &iter->ops->filter_hash; 3102 else 3103 orig_hash = &iter->ops->notrace_hash; 3104 3105 mutex_lock(&ftrace_lock); 3106 ret = ftrace_hash_move(iter->ops, filter_hash, 3107 orig_hash, iter->hash); 3108 if (!ret && (iter->ops->flags & FTRACE_OPS_FL_ENABLED) 3109 && ftrace_enabled) 3110 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 3111 3112 mutex_unlock(&ftrace_lock); 3113 } 3114 free_ftrace_hash(iter->hash); 3115 kfree(iter); 3116 3117 mutex_unlock(&ftrace_regex_lock); 3118 return 0; 3119 } 3120 3121 static const struct file_operations ftrace_avail_fops = { 3122 .open = ftrace_avail_open, 3123 .read = seq_read, 3124 .llseek = seq_lseek, 3125 .release = seq_release_private, 3126 }; 3127 3128 static const struct file_operations ftrace_enabled_fops = { 3129 .open = ftrace_enabled_open, 3130 .read = seq_read, 3131 .llseek = seq_lseek, 3132 .release = seq_release_private, 3133 }; 3134 3135 static const struct file_operations ftrace_filter_fops = { 3136 .open = ftrace_filter_open, 3137 .read = seq_read, 3138 .write = ftrace_filter_write, 3139 .llseek = ftrace_regex_lseek, 3140 .release = ftrace_regex_release, 3141 }; 3142 3143 static const struct file_operations ftrace_notrace_fops = { 3144 .open = ftrace_notrace_open, 3145 .read = seq_read, 3146 .write = ftrace_notrace_write, 3147 .llseek = ftrace_regex_lseek, 3148 .release = ftrace_regex_release, 3149 }; 3150 3151 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3152 3153 static DEFINE_MUTEX(graph_lock); 3154 3155 int ftrace_graph_count; 3156 int ftrace_graph_filter_enabled; 3157 unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly; 3158 3159 static void * 3160 __g_next(struct seq_file *m, loff_t *pos) 3161 { 3162 if (*pos >= ftrace_graph_count) 3163 return NULL; 3164 return &ftrace_graph_funcs[*pos]; 3165 } 3166 3167 static void * 3168 g_next(struct seq_file *m, void *v, loff_t *pos) 3169 { 3170 (*pos)++; 3171 return __g_next(m, pos); 3172 } 3173 3174 static void *g_start(struct seq_file *m, loff_t *pos) 3175 { 3176 mutex_lock(&graph_lock); 3177 3178 /* Nothing, tell g_show to print all functions are enabled */ 3179 if (!ftrace_graph_filter_enabled && !*pos) 3180 return (void *)1; 3181 3182 return __g_next(m, pos); 3183 } 3184 3185 static void g_stop(struct seq_file *m, void *p) 3186 { 3187 mutex_unlock(&graph_lock); 3188 } 3189 3190 static int g_show(struct seq_file *m, void *v) 3191 { 3192 unsigned long *ptr = v; 3193 3194 if (!ptr) 3195 return 0; 3196 3197 if (ptr == (unsigned long *)1) { 3198 seq_printf(m, "#### all functions enabled ####\n"); 3199 return 0; 3200 } 3201 3202 seq_printf(m, "%ps\n", (void *)*ptr); 3203 3204 return 0; 3205 } 3206 3207 static const struct seq_operations ftrace_graph_seq_ops = { 3208 .start = g_start, 3209 .next = g_next, 3210 .stop = g_stop, 3211 .show = g_show, 3212 }; 3213 3214 static int 3215 ftrace_graph_open(struct inode *inode, struct file *file) 3216 { 3217 int ret = 0; 3218 3219 if (unlikely(ftrace_disabled)) 3220 return -ENODEV; 3221 3222 mutex_lock(&graph_lock); 3223 if ((file->f_mode & FMODE_WRITE) && 3224 (file->f_flags & O_TRUNC)) { 3225 ftrace_graph_filter_enabled = 0; 3226 ftrace_graph_count = 0; 3227 memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); 3228 } 3229 mutex_unlock(&graph_lock); 3230 3231 if (file->f_mode & FMODE_READ) 3232 ret = seq_open(file, &ftrace_graph_seq_ops); 3233 3234 return ret; 3235 } 3236 3237 static int 3238 ftrace_graph_release(struct inode *inode, struct file *file) 3239 { 3240 if (file->f_mode & FMODE_READ) 3241 seq_release(inode, file); 3242 return 0; 3243 } 3244 3245 static int 3246 ftrace_set_func(unsigned long *array, int *idx, char *buffer) 3247 { 3248 struct dyn_ftrace *rec; 3249 struct ftrace_page *pg; 3250 int search_len; 3251 int fail = 1; 3252 int type, not; 3253 char *search; 3254 bool exists; 3255 int i; 3256 3257 /* decode regex */ 3258 type = filter_parse_regex(buffer, strlen(buffer), &search, ¬); 3259 if (!not && *idx >= FTRACE_GRAPH_MAX_FUNCS) 3260 return -EBUSY; 3261 3262 search_len = strlen(search); 3263 3264 mutex_lock(&ftrace_lock); 3265 3266 if (unlikely(ftrace_disabled)) { 3267 mutex_unlock(&ftrace_lock); 3268 return -ENODEV; 3269 } 3270 3271 do_for_each_ftrace_rec(pg, rec) { 3272 3273 if (rec->flags & FTRACE_FL_FREE) 3274 continue; 3275 3276 if (ftrace_match_record(rec, NULL, search, search_len, type)) { 3277 /* if it is in the array */ 3278 exists = false; 3279 for (i = 0; i < *idx; i++) { 3280 if (array[i] == rec->ip) { 3281 exists = true; 3282 break; 3283 } 3284 } 3285 3286 if (!not) { 3287 fail = 0; 3288 if (!exists) { 3289 array[(*idx)++] = rec->ip; 3290 if (*idx >= FTRACE_GRAPH_MAX_FUNCS) 3291 goto out; 3292 } 3293 } else { 3294 if (exists) { 3295 array[i] = array[--(*idx)]; 3296 array[*idx] = 0; 3297 fail = 0; 3298 } 3299 } 3300 } 3301 } while_for_each_ftrace_rec(); 3302 out: 3303 mutex_unlock(&ftrace_lock); 3304 3305 if (fail) 3306 return -EINVAL; 3307 3308 ftrace_graph_filter_enabled = 1; 3309 return 0; 3310 } 3311 3312 static ssize_t 3313 ftrace_graph_write(struct file *file, const char __user *ubuf, 3314 size_t cnt, loff_t *ppos) 3315 { 3316 struct trace_parser parser; 3317 ssize_t read, ret; 3318 3319 if (!cnt) 3320 return 0; 3321 3322 mutex_lock(&graph_lock); 3323 3324 if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) { 3325 ret = -ENOMEM; 3326 goto out_unlock; 3327 } 3328 3329 read = trace_get_user(&parser, ubuf, cnt, ppos); 3330 3331 if (read >= 0 && trace_parser_loaded((&parser))) { 3332 parser.buffer[parser.idx] = 0; 3333 3334 /* we allow only one expression at a time */ 3335 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 3336 parser.buffer); 3337 if (ret) 3338 goto out_free; 3339 } 3340 3341 ret = read; 3342 3343 out_free: 3344 trace_parser_put(&parser); 3345 out_unlock: 3346 mutex_unlock(&graph_lock); 3347 3348 return ret; 3349 } 3350 3351 static const struct file_operations ftrace_graph_fops = { 3352 .open = ftrace_graph_open, 3353 .read = seq_read, 3354 .write = ftrace_graph_write, 3355 .release = ftrace_graph_release, 3356 .llseek = seq_lseek, 3357 }; 3358 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 3359 3360 static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer) 3361 { 3362 3363 trace_create_file("available_filter_functions", 0444, 3364 d_tracer, NULL, &ftrace_avail_fops); 3365 3366 trace_create_file("enabled_functions", 0444, 3367 d_tracer, NULL, &ftrace_enabled_fops); 3368 3369 trace_create_file("set_ftrace_filter", 0644, d_tracer, 3370 NULL, &ftrace_filter_fops); 3371 3372 trace_create_file("set_ftrace_notrace", 0644, d_tracer, 3373 NULL, &ftrace_notrace_fops); 3374 3375 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3376 trace_create_file("set_graph_function", 0444, d_tracer, 3377 NULL, 3378 &ftrace_graph_fops); 3379 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 3380 3381 return 0; 3382 } 3383 3384 static int ftrace_process_locs(struct module *mod, 3385 unsigned long *start, 3386 unsigned long *end) 3387 { 3388 unsigned long *p; 3389 unsigned long addr; 3390 unsigned long flags = 0; /* Shut up gcc */ 3391 3392 mutex_lock(&ftrace_lock); 3393 p = start; 3394 while (p < end) { 3395 addr = ftrace_call_adjust(*p++); 3396 /* 3397 * Some architecture linkers will pad between 3398 * the different mcount_loc sections of different 3399 * object files to satisfy alignments. 3400 * Skip any NULL pointers. 3401 */ 3402 if (!addr) 3403 continue; 3404 ftrace_record_ip(addr); 3405 } 3406 3407 /* 3408 * We only need to disable interrupts on start up 3409 * because we are modifying code that an interrupt 3410 * may execute, and the modification is not atomic. 3411 * But for modules, nothing runs the code we modify 3412 * until we are finished with it, and there's no 3413 * reason to cause large interrupt latencies while we do it. 3414 */ 3415 if (!mod) 3416 local_irq_save(flags); 3417 ftrace_update_code(mod); 3418 if (!mod) 3419 local_irq_restore(flags); 3420 mutex_unlock(&ftrace_lock); 3421 3422 return 0; 3423 } 3424 3425 #ifdef CONFIG_MODULES 3426 void ftrace_release_mod(struct module *mod) 3427 { 3428 struct dyn_ftrace *rec; 3429 struct ftrace_page *pg; 3430 3431 mutex_lock(&ftrace_lock); 3432 3433 if (ftrace_disabled) 3434 goto out_unlock; 3435 3436 do_for_each_ftrace_rec(pg, rec) { 3437 if (within_module_core(rec->ip, mod)) { 3438 /* 3439 * rec->ip is changed in ftrace_free_rec() 3440 * It should not between s and e if record was freed. 3441 */ 3442 FTRACE_WARN_ON(rec->flags & FTRACE_FL_FREE); 3443 ftrace_free_rec(rec); 3444 } 3445 } while_for_each_ftrace_rec(); 3446 out_unlock: 3447 mutex_unlock(&ftrace_lock); 3448 } 3449 3450 static void ftrace_init_module(struct module *mod, 3451 unsigned long *start, unsigned long *end) 3452 { 3453 if (ftrace_disabled || start == end) 3454 return; 3455 ftrace_process_locs(mod, start, end); 3456 } 3457 3458 static int ftrace_module_notify(struct notifier_block *self, 3459 unsigned long val, void *data) 3460 { 3461 struct module *mod = data; 3462 3463 switch (val) { 3464 case MODULE_STATE_COMING: 3465 ftrace_init_module(mod, mod->ftrace_callsites, 3466 mod->ftrace_callsites + 3467 mod->num_ftrace_callsites); 3468 break; 3469 case MODULE_STATE_GOING: 3470 ftrace_release_mod(mod); 3471 break; 3472 } 3473 3474 return 0; 3475 } 3476 #else 3477 static int ftrace_module_notify(struct notifier_block *self, 3478 unsigned long val, void *data) 3479 { 3480 return 0; 3481 } 3482 #endif /* CONFIG_MODULES */ 3483 3484 struct notifier_block ftrace_module_nb = { 3485 .notifier_call = ftrace_module_notify, 3486 .priority = 0, 3487 }; 3488 3489 extern unsigned long __start_mcount_loc[]; 3490 extern unsigned long __stop_mcount_loc[]; 3491 3492 void __init ftrace_init(void) 3493 { 3494 unsigned long count, addr, flags; 3495 int ret; 3496 3497 /* Keep the ftrace pointer to the stub */ 3498 addr = (unsigned long)ftrace_stub; 3499 3500 local_irq_save(flags); 3501 ftrace_dyn_arch_init(&addr); 3502 local_irq_restore(flags); 3503 3504 /* ftrace_dyn_arch_init places the return code in addr */ 3505 if (addr) 3506 goto failed; 3507 3508 count = __stop_mcount_loc - __start_mcount_loc; 3509 3510 ret = ftrace_dyn_table_alloc(count); 3511 if (ret) 3512 goto failed; 3513 3514 last_ftrace_enabled = ftrace_enabled = 1; 3515 3516 ret = ftrace_process_locs(NULL, 3517 __start_mcount_loc, 3518 __stop_mcount_loc); 3519 3520 ret = register_module_notifier(&ftrace_module_nb); 3521 if (ret) 3522 pr_warning("Failed to register trace ftrace module notifier\n"); 3523 3524 set_ftrace_early_filters(); 3525 3526 return; 3527 failed: 3528 ftrace_disabled = 1; 3529 } 3530 3531 #else 3532 3533 static struct ftrace_ops global_ops = { 3534 .func = ftrace_stub, 3535 }; 3536 3537 static int __init ftrace_nodyn_init(void) 3538 { 3539 ftrace_enabled = 1; 3540 return 0; 3541 } 3542 device_initcall(ftrace_nodyn_init); 3543 3544 static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; } 3545 static inline void ftrace_startup_enable(int command) { } 3546 /* Keep as macros so we do not need to define the commands */ 3547 # define ftrace_startup(ops, command) \ 3548 ({ \ 3549 (ops)->flags |= FTRACE_OPS_FL_ENABLED; \ 3550 0; \ 3551 }) 3552 # define ftrace_shutdown(ops, command) do { } while (0) 3553 # define ftrace_startup_sysctl() do { } while (0) 3554 # define ftrace_shutdown_sysctl() do { } while (0) 3555 3556 static inline int 3557 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip) 3558 { 3559 return 1; 3560 } 3561 3562 #endif /* CONFIG_DYNAMIC_FTRACE */ 3563 3564 static void 3565 ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip) 3566 { 3567 struct ftrace_ops *op; 3568 3569 if (unlikely(trace_recursion_test(TRACE_INTERNAL_BIT))) 3570 return; 3571 3572 trace_recursion_set(TRACE_INTERNAL_BIT); 3573 /* 3574 * Some of the ops may be dynamically allocated, 3575 * they must be freed after a synchronize_sched(). 3576 */ 3577 preempt_disable_notrace(); 3578 op = rcu_dereference_raw(ftrace_ops_list); 3579 while (op != &ftrace_list_end) { 3580 if (ftrace_ops_test(op, ip)) 3581 op->func(ip, parent_ip); 3582 op = rcu_dereference_raw(op->next); 3583 }; 3584 preempt_enable_notrace(); 3585 trace_recursion_clear(TRACE_INTERNAL_BIT); 3586 } 3587 3588 static void clear_ftrace_swapper(void) 3589 { 3590 struct task_struct *p; 3591 int cpu; 3592 3593 get_online_cpus(); 3594 for_each_online_cpu(cpu) { 3595 p = idle_task(cpu); 3596 clear_tsk_trace_trace(p); 3597 } 3598 put_online_cpus(); 3599 } 3600 3601 static void set_ftrace_swapper(void) 3602 { 3603 struct task_struct *p; 3604 int cpu; 3605 3606 get_online_cpus(); 3607 for_each_online_cpu(cpu) { 3608 p = idle_task(cpu); 3609 set_tsk_trace_trace(p); 3610 } 3611 put_online_cpus(); 3612 } 3613 3614 static void clear_ftrace_pid(struct pid *pid) 3615 { 3616 struct task_struct *p; 3617 3618 rcu_read_lock(); 3619 do_each_pid_task(pid, PIDTYPE_PID, p) { 3620 clear_tsk_trace_trace(p); 3621 } while_each_pid_task(pid, PIDTYPE_PID, p); 3622 rcu_read_unlock(); 3623 3624 put_pid(pid); 3625 } 3626 3627 static void set_ftrace_pid(struct pid *pid) 3628 { 3629 struct task_struct *p; 3630 3631 rcu_read_lock(); 3632 do_each_pid_task(pid, PIDTYPE_PID, p) { 3633 set_tsk_trace_trace(p); 3634 } while_each_pid_task(pid, PIDTYPE_PID, p); 3635 rcu_read_unlock(); 3636 } 3637 3638 static void clear_ftrace_pid_task(struct pid *pid) 3639 { 3640 if (pid == ftrace_swapper_pid) 3641 clear_ftrace_swapper(); 3642 else 3643 clear_ftrace_pid(pid); 3644 } 3645 3646 static void set_ftrace_pid_task(struct pid *pid) 3647 { 3648 if (pid == ftrace_swapper_pid) 3649 set_ftrace_swapper(); 3650 else 3651 set_ftrace_pid(pid); 3652 } 3653 3654 static int ftrace_pid_add(int p) 3655 { 3656 struct pid *pid; 3657 struct ftrace_pid *fpid; 3658 int ret = -EINVAL; 3659 3660 mutex_lock(&ftrace_lock); 3661 3662 if (!p) 3663 pid = ftrace_swapper_pid; 3664 else 3665 pid = find_get_pid(p); 3666 3667 if (!pid) 3668 goto out; 3669 3670 ret = 0; 3671 3672 list_for_each_entry(fpid, &ftrace_pids, list) 3673 if (fpid->pid == pid) 3674 goto out_put; 3675 3676 ret = -ENOMEM; 3677 3678 fpid = kmalloc(sizeof(*fpid), GFP_KERNEL); 3679 if (!fpid) 3680 goto out_put; 3681 3682 list_add(&fpid->list, &ftrace_pids); 3683 fpid->pid = pid; 3684 3685 set_ftrace_pid_task(pid); 3686 3687 ftrace_update_pid_func(); 3688 ftrace_startup_enable(0); 3689 3690 mutex_unlock(&ftrace_lock); 3691 return 0; 3692 3693 out_put: 3694 if (pid != ftrace_swapper_pid) 3695 put_pid(pid); 3696 3697 out: 3698 mutex_unlock(&ftrace_lock); 3699 return ret; 3700 } 3701 3702 static void ftrace_pid_reset(void) 3703 { 3704 struct ftrace_pid *fpid, *safe; 3705 3706 mutex_lock(&ftrace_lock); 3707 list_for_each_entry_safe(fpid, safe, &ftrace_pids, list) { 3708 struct pid *pid = fpid->pid; 3709 3710 clear_ftrace_pid_task(pid); 3711 3712 list_del(&fpid->list); 3713 kfree(fpid); 3714 } 3715 3716 ftrace_update_pid_func(); 3717 ftrace_startup_enable(0); 3718 3719 mutex_unlock(&ftrace_lock); 3720 } 3721 3722 static void *fpid_start(struct seq_file *m, loff_t *pos) 3723 { 3724 mutex_lock(&ftrace_lock); 3725 3726 if (list_empty(&ftrace_pids) && (!*pos)) 3727 return (void *) 1; 3728 3729 return seq_list_start(&ftrace_pids, *pos); 3730 } 3731 3732 static void *fpid_next(struct seq_file *m, void *v, loff_t *pos) 3733 { 3734 if (v == (void *)1) 3735 return NULL; 3736 3737 return seq_list_next(v, &ftrace_pids, pos); 3738 } 3739 3740 static void fpid_stop(struct seq_file *m, void *p) 3741 { 3742 mutex_unlock(&ftrace_lock); 3743 } 3744 3745 static int fpid_show(struct seq_file *m, void *v) 3746 { 3747 const struct ftrace_pid *fpid = list_entry(v, struct ftrace_pid, list); 3748 3749 if (v == (void *)1) { 3750 seq_printf(m, "no pid\n"); 3751 return 0; 3752 } 3753 3754 if (fpid->pid == ftrace_swapper_pid) 3755 seq_printf(m, "swapper tasks\n"); 3756 else 3757 seq_printf(m, "%u\n", pid_vnr(fpid->pid)); 3758 3759 return 0; 3760 } 3761 3762 static const struct seq_operations ftrace_pid_sops = { 3763 .start = fpid_start, 3764 .next = fpid_next, 3765 .stop = fpid_stop, 3766 .show = fpid_show, 3767 }; 3768 3769 static int 3770 ftrace_pid_open(struct inode *inode, struct file *file) 3771 { 3772 int ret = 0; 3773 3774 if ((file->f_mode & FMODE_WRITE) && 3775 (file->f_flags & O_TRUNC)) 3776 ftrace_pid_reset(); 3777 3778 if (file->f_mode & FMODE_READ) 3779 ret = seq_open(file, &ftrace_pid_sops); 3780 3781 return ret; 3782 } 3783 3784 static ssize_t 3785 ftrace_pid_write(struct file *filp, const char __user *ubuf, 3786 size_t cnt, loff_t *ppos) 3787 { 3788 char buf[64], *tmp; 3789 long val; 3790 int ret; 3791 3792 if (cnt >= sizeof(buf)) 3793 return -EINVAL; 3794 3795 if (copy_from_user(&buf, ubuf, cnt)) 3796 return -EFAULT; 3797 3798 buf[cnt] = 0; 3799 3800 /* 3801 * Allow "echo > set_ftrace_pid" or "echo -n '' > set_ftrace_pid" 3802 * to clean the filter quietly. 3803 */ 3804 tmp = strstrip(buf); 3805 if (strlen(tmp) == 0) 3806 return 1; 3807 3808 ret = strict_strtol(tmp, 10, &val); 3809 if (ret < 0) 3810 return ret; 3811 3812 ret = ftrace_pid_add(val); 3813 3814 return ret ? ret : cnt; 3815 } 3816 3817 static int 3818 ftrace_pid_release(struct inode *inode, struct file *file) 3819 { 3820 if (file->f_mode & FMODE_READ) 3821 seq_release(inode, file); 3822 3823 return 0; 3824 } 3825 3826 static const struct file_operations ftrace_pid_fops = { 3827 .open = ftrace_pid_open, 3828 .write = ftrace_pid_write, 3829 .read = seq_read, 3830 .llseek = seq_lseek, 3831 .release = ftrace_pid_release, 3832 }; 3833 3834 static __init int ftrace_init_debugfs(void) 3835 { 3836 struct dentry *d_tracer; 3837 3838 d_tracer = tracing_init_dentry(); 3839 if (!d_tracer) 3840 return 0; 3841 3842 ftrace_init_dyn_debugfs(d_tracer); 3843 3844 trace_create_file("set_ftrace_pid", 0644, d_tracer, 3845 NULL, &ftrace_pid_fops); 3846 3847 ftrace_profile_debugfs(d_tracer); 3848 3849 return 0; 3850 } 3851 fs_initcall(ftrace_init_debugfs); 3852 3853 /** 3854 * ftrace_kill - kill ftrace 3855 * 3856 * This function should be used by panic code. It stops ftrace 3857 * but in a not so nice way. If you need to simply kill ftrace 3858 * from a non-atomic section, use ftrace_kill. 3859 */ 3860 void ftrace_kill(void) 3861 { 3862 ftrace_disabled = 1; 3863 ftrace_enabled = 0; 3864 clear_ftrace_function(); 3865 } 3866 3867 /** 3868 * Test if ftrace is dead or not. 3869 */ 3870 int ftrace_is_dead(void) 3871 { 3872 return ftrace_disabled; 3873 } 3874 3875 /** 3876 * register_ftrace_function - register a function for profiling 3877 * @ops - ops structure that holds the function for profiling. 3878 * 3879 * Register a function to be called by all functions in the 3880 * kernel. 3881 * 3882 * Note: @ops->func and all the functions it calls must be labeled 3883 * with "notrace", otherwise it will go into a 3884 * recursive loop. 3885 */ 3886 int register_ftrace_function(struct ftrace_ops *ops) 3887 { 3888 int ret = -1; 3889 3890 mutex_lock(&ftrace_lock); 3891 3892 if (unlikely(ftrace_disabled)) 3893 goto out_unlock; 3894 3895 ret = __register_ftrace_function(ops); 3896 if (!ret) 3897 ret = ftrace_startup(ops, 0); 3898 3899 3900 out_unlock: 3901 mutex_unlock(&ftrace_lock); 3902 return ret; 3903 } 3904 EXPORT_SYMBOL_GPL(register_ftrace_function); 3905 3906 /** 3907 * unregister_ftrace_function - unregister a function for profiling. 3908 * @ops - ops structure that holds the function to unregister 3909 * 3910 * Unregister a function that was added to be called by ftrace profiling. 3911 */ 3912 int unregister_ftrace_function(struct ftrace_ops *ops) 3913 { 3914 int ret; 3915 3916 mutex_lock(&ftrace_lock); 3917 ret = __unregister_ftrace_function(ops); 3918 if (!ret) 3919 ftrace_shutdown(ops, 0); 3920 mutex_unlock(&ftrace_lock); 3921 3922 return ret; 3923 } 3924 EXPORT_SYMBOL_GPL(unregister_ftrace_function); 3925 3926 int 3927 ftrace_enable_sysctl(struct ctl_table *table, int write, 3928 void __user *buffer, size_t *lenp, 3929 loff_t *ppos) 3930 { 3931 int ret = -ENODEV; 3932 3933 mutex_lock(&ftrace_lock); 3934 3935 if (unlikely(ftrace_disabled)) 3936 goto out; 3937 3938 ret = proc_dointvec(table, write, buffer, lenp, ppos); 3939 3940 if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) 3941 goto out; 3942 3943 last_ftrace_enabled = !!ftrace_enabled; 3944 3945 if (ftrace_enabled) { 3946 3947 ftrace_startup_sysctl(); 3948 3949 /* we are starting ftrace again */ 3950 if (ftrace_ops_list != &ftrace_list_end) { 3951 if (ftrace_ops_list->next == &ftrace_list_end) 3952 ftrace_trace_function = ftrace_ops_list->func; 3953 else 3954 ftrace_trace_function = ftrace_ops_list_func; 3955 } 3956 3957 } else { 3958 /* stopping ftrace calls (just send to ftrace_stub) */ 3959 ftrace_trace_function = ftrace_stub; 3960 3961 ftrace_shutdown_sysctl(); 3962 } 3963 3964 out: 3965 mutex_unlock(&ftrace_lock); 3966 return ret; 3967 } 3968 3969 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3970 3971 static int ftrace_graph_active; 3972 static struct notifier_block ftrace_suspend_notifier; 3973 3974 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 3975 { 3976 return 0; 3977 } 3978 3979 /* The callbacks that hook a function */ 3980 trace_func_graph_ret_t ftrace_graph_return = 3981 (trace_func_graph_ret_t)ftrace_stub; 3982 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; 3983 3984 /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ 3985 static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) 3986 { 3987 int i; 3988 int ret = 0; 3989 unsigned long flags; 3990 int start = 0, end = FTRACE_RETSTACK_ALLOC_SIZE; 3991 struct task_struct *g, *t; 3992 3993 for (i = 0; i < FTRACE_RETSTACK_ALLOC_SIZE; i++) { 3994 ret_stack_list[i] = kmalloc(FTRACE_RETFUNC_DEPTH 3995 * sizeof(struct ftrace_ret_stack), 3996 GFP_KERNEL); 3997 if (!ret_stack_list[i]) { 3998 start = 0; 3999 end = i; 4000 ret = -ENOMEM; 4001 goto free; 4002 } 4003 } 4004 4005 read_lock_irqsave(&tasklist_lock, flags); 4006 do_each_thread(g, t) { 4007 if (start == end) { 4008 ret = -EAGAIN; 4009 goto unlock; 4010 } 4011 4012 if (t->ret_stack == NULL) { 4013 atomic_set(&t->tracing_graph_pause, 0); 4014 atomic_set(&t->trace_overrun, 0); 4015 t->curr_ret_stack = -1; 4016 /* Make sure the tasks see the -1 first: */ 4017 smp_wmb(); 4018 t->ret_stack = ret_stack_list[start++]; 4019 } 4020 } while_each_thread(g, t); 4021 4022 unlock: 4023 read_unlock_irqrestore(&tasklist_lock, flags); 4024 free: 4025 for (i = start; i < end; i++) 4026 kfree(ret_stack_list[i]); 4027 return ret; 4028 } 4029 4030 static void 4031 ftrace_graph_probe_sched_switch(void *ignore, 4032 struct task_struct *prev, struct task_struct *next) 4033 { 4034 unsigned long long timestamp; 4035 int index; 4036 4037 /* 4038 * Does the user want to count the time a function was asleep. 4039 * If so, do not update the time stamps. 4040 */ 4041 if (trace_flags & TRACE_ITER_SLEEP_TIME) 4042 return; 4043 4044 timestamp = trace_clock_local(); 4045 4046 prev->ftrace_timestamp = timestamp; 4047 4048 /* only process tasks that we timestamped */ 4049 if (!next->ftrace_timestamp) 4050 return; 4051 4052 /* 4053 * Update all the counters in next to make up for the 4054 * time next was sleeping. 4055 */ 4056 timestamp -= next->ftrace_timestamp; 4057 4058 for (index = next->curr_ret_stack; index >= 0; index--) 4059 next->ret_stack[index].calltime += timestamp; 4060 } 4061 4062 /* Allocate a return stack for each task */ 4063 static int start_graph_tracing(void) 4064 { 4065 struct ftrace_ret_stack **ret_stack_list; 4066 int ret, cpu; 4067 4068 ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * 4069 sizeof(struct ftrace_ret_stack *), 4070 GFP_KERNEL); 4071 4072 if (!ret_stack_list) 4073 return -ENOMEM; 4074 4075 /* The cpu_boot init_task->ret_stack will never be freed */ 4076 for_each_online_cpu(cpu) { 4077 if (!idle_task(cpu)->ret_stack) 4078 ftrace_graph_init_idle_task(idle_task(cpu), cpu); 4079 } 4080 4081 do { 4082 ret = alloc_retstack_tasklist(ret_stack_list); 4083 } while (ret == -EAGAIN); 4084 4085 if (!ret) { 4086 ret = register_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 4087 if (ret) 4088 pr_info("ftrace_graph: Couldn't activate tracepoint" 4089 " probe to kernel_sched_switch\n"); 4090 } 4091 4092 kfree(ret_stack_list); 4093 return ret; 4094 } 4095 4096 /* 4097 * Hibernation protection. 4098 * The state of the current task is too much unstable during 4099 * suspend/restore to disk. We want to protect against that. 4100 */ 4101 static int 4102 ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, 4103 void *unused) 4104 { 4105 switch (state) { 4106 case PM_HIBERNATION_PREPARE: 4107 pause_graph_tracing(); 4108 break; 4109 4110 case PM_POST_HIBERNATION: 4111 unpause_graph_tracing(); 4112 break; 4113 } 4114 return NOTIFY_DONE; 4115 } 4116 4117 int register_ftrace_graph(trace_func_graph_ret_t retfunc, 4118 trace_func_graph_ent_t entryfunc) 4119 { 4120 int ret = 0; 4121 4122 mutex_lock(&ftrace_lock); 4123 4124 /* we currently allow only one tracer registered at a time */ 4125 if (ftrace_graph_active) { 4126 ret = -EBUSY; 4127 goto out; 4128 } 4129 4130 ftrace_suspend_notifier.notifier_call = ftrace_suspend_notifier_call; 4131 register_pm_notifier(&ftrace_suspend_notifier); 4132 4133 ftrace_graph_active++; 4134 ret = start_graph_tracing(); 4135 if (ret) { 4136 ftrace_graph_active--; 4137 goto out; 4138 } 4139 4140 ftrace_graph_return = retfunc; 4141 ftrace_graph_entry = entryfunc; 4142 4143 ret = ftrace_startup(&global_ops, FTRACE_START_FUNC_RET); 4144 4145 out: 4146 mutex_unlock(&ftrace_lock); 4147 return ret; 4148 } 4149 4150 void unregister_ftrace_graph(void) 4151 { 4152 mutex_lock(&ftrace_lock); 4153 4154 if (unlikely(!ftrace_graph_active)) 4155 goto out; 4156 4157 ftrace_graph_active--; 4158 ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub; 4159 ftrace_graph_entry = ftrace_graph_entry_stub; 4160 ftrace_shutdown(&global_ops, FTRACE_STOP_FUNC_RET); 4161 unregister_pm_notifier(&ftrace_suspend_notifier); 4162 unregister_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 4163 4164 out: 4165 mutex_unlock(&ftrace_lock); 4166 } 4167 4168 static DEFINE_PER_CPU(struct ftrace_ret_stack *, idle_ret_stack); 4169 4170 static void 4171 graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack) 4172 { 4173 atomic_set(&t->tracing_graph_pause, 0); 4174 atomic_set(&t->trace_overrun, 0); 4175 t->ftrace_timestamp = 0; 4176 /* make curr_ret_stack visible before we add the ret_stack */ 4177 smp_wmb(); 4178 t->ret_stack = ret_stack; 4179 } 4180 4181 /* 4182 * Allocate a return stack for the idle task. May be the first 4183 * time through, or it may be done by CPU hotplug online. 4184 */ 4185 void ftrace_graph_init_idle_task(struct task_struct *t, int cpu) 4186 { 4187 t->curr_ret_stack = -1; 4188 /* 4189 * The idle task has no parent, it either has its own 4190 * stack or no stack at all. 4191 */ 4192 if (t->ret_stack) 4193 WARN_ON(t->ret_stack != per_cpu(idle_ret_stack, cpu)); 4194 4195 if (ftrace_graph_active) { 4196 struct ftrace_ret_stack *ret_stack; 4197 4198 ret_stack = per_cpu(idle_ret_stack, cpu); 4199 if (!ret_stack) { 4200 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 4201 * sizeof(struct ftrace_ret_stack), 4202 GFP_KERNEL); 4203 if (!ret_stack) 4204 return; 4205 per_cpu(idle_ret_stack, cpu) = ret_stack; 4206 } 4207 graph_init_task(t, ret_stack); 4208 } 4209 } 4210 4211 /* Allocate a return stack for newly created task */ 4212 void ftrace_graph_init_task(struct task_struct *t) 4213 { 4214 /* Make sure we do not use the parent ret_stack */ 4215 t->ret_stack = NULL; 4216 t->curr_ret_stack = -1; 4217 4218 if (ftrace_graph_active) { 4219 struct ftrace_ret_stack *ret_stack; 4220 4221 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 4222 * sizeof(struct ftrace_ret_stack), 4223 GFP_KERNEL); 4224 if (!ret_stack) 4225 return; 4226 graph_init_task(t, ret_stack); 4227 } 4228 } 4229 4230 void ftrace_graph_exit_task(struct task_struct *t) 4231 { 4232 struct ftrace_ret_stack *ret_stack = t->ret_stack; 4233 4234 t->ret_stack = NULL; 4235 /* NULL must become visible to IRQs before we free it: */ 4236 barrier(); 4237 4238 kfree(ret_stack); 4239 } 4240 4241 void ftrace_graph_stop(void) 4242 { 4243 ftrace_stop(); 4244 } 4245 #endif 4246