linux/kernel/trace/ftrace.c
<<
>>
Prefs
   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 */
  64int ftrace_enabled __read_mostly;
  65static int last_ftrace_enabled;
  66
  67/* Quick disabling of function tracer. */
  68int function_trace_stop;
  69
  70/* List for set_ftrace_pid's pids. */
  71LIST_HEAD(ftrace_pids);
  72struct 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 */
  81static int ftrace_disabled __read_mostly;
  82
  83static DEFINE_MUTEX(ftrace_lock);
  84
  85static struct ftrace_ops ftrace_list_end __read_mostly = {
  86        .func           = ftrace_stub,
  87};
  88
  89static struct ftrace_ops *ftrace_global_list __read_mostly = &ftrace_list_end;
  90static struct ftrace_ops *ftrace_ops_list __read_mostly = &ftrace_list_end;
  91ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub;
  92static ftrace_func_t __ftrace_trace_function_delay __read_mostly = ftrace_stub;
  93ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub;
  94ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub;
  95static struct ftrace_ops global_ops;
  96
  97static void
  98ftrace_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 */
 109static 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
 126static 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
 134static 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 */
 147void 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 */
 160static 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
 169static 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
 193static 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
 224static 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
 236static 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
 260static 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
 289static 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
 327static 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
 337struct 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
 347struct ftrace_profile_page {
 348        struct ftrace_profile_page      *next;
 349        unsigned long                   index;
 350        struct ftrace_profile           records[];
 351};
 352
 353struct 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
 367static int ftrace_profile_bits __read_mostly;
 368static int ftrace_profile_enabled __read_mostly;
 369
 370/* ftrace_profile_lock - synchronize the enable and disable of the profiler */
 371static DEFINE_MUTEX(ftrace_profile_lock);
 372
 373static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats);
 374
 375#define FTRACE_PROFILE_HASH_SIZE 1024 /* must be power of 2 */
 376
 377static void *
 378function_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
 401static 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 */
 414static 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 */
 428static 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
 442static 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
 456static 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');
 503out:
 504        mutex_unlock(&ftrace_profile_lock);
 505
 506        return ret;
 507}
 508
 509static 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
 525int 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
 582static 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
 623static 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 */
 638static struct ftrace_profile *
 639ftrace_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
 660static 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 */
 672static struct ftrace_profile *
 673ftrace_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
 705static void
 706function_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
 734static int profile_graph_entry(struct ftrace_graph_ent *trace)
 735{
 736        function_profile_call(trace->func, 0);
 737        return 1;
 738}
 739
 740static 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
 783static int register_ftrace_profiler(void)
 784{
 785        return register_ftrace_graph(&profile_graph_return,
 786                                     &profile_graph_entry);
 787}
 788
 789static void unregister_ftrace_profiler(void)
 790{
 791        unregister_ftrace_graph();
 792}
 793#else
 794static struct ftrace_ops ftrace_profile_ops __read_mostly = {
 795        .func           = function_profile_call,
 796};
 797
 798static int register_ftrace_profiler(void)
 799{
 800        return register_ftrace_function(&ftrace_profile_ops);
 801}
 802
 803static void unregister_ftrace_profiler(void)
 804{
 805        unregister_ftrace_function(&ftrace_profile_ops);
 806}
 807#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 808
 809static ssize_t
 810ftrace_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
 854static ssize_t
 855ftrace_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
 865static 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 */
 873static 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
 882static __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 */
 926static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
 927{
 928}
 929#endif /* CONFIG_FUNCTION_PROFILER */
 930
 931static 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
 939static struct hlist_head ftrace_func_hash[FTRACE_FUNC_HASHSIZE] __read_mostly;
 940
 941struct 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
 950enum {
 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};
 957struct ftrace_func_entry {
 958        struct hlist_node hlist;
 959        unsigned long ip;
 960};
 961
 962struct 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 */
 975static const struct hlist_head empty_buckets[1];
 976static const struct ftrace_hash empty_hash = {
 977        .buckets = (struct hlist_head *)empty_buckets,
 978};
 979#define EMPTY_HASH      ((struct ftrace_hash *)&empty_hash)
 980
 981static struct ftrace_ops global_ops = {
 982        .func                   = ftrace_stub,
 983        .notrace_hash           = EMPTY_HASH,
 984        .filter_hash            = EMPTY_HASH,
 985};
 986
 987static struct dyn_ftrace *ftrace_new_addrs;
 988
 989static DEFINE_MUTEX(ftrace_regex_lock);
 990
 991struct 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
1003static struct ftrace_page       *ftrace_pages_start;
1004static struct ftrace_page       *ftrace_pages;
1005
1006static struct dyn_ftrace *ftrace_free_records;
1007
1008static struct ftrace_func_entry *
1009ftrace_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
1033static 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
1049static 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
1063static void
1064free_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
1072static void
1073remove_hash_entry(struct ftrace_hash *hash,
1074                  struct ftrace_func_entry *entry)
1075{
1076        hlist_del(&entry->hlist);
1077        hash->count--;
1078}
1079
1080static 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
1099static 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
1108static 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
1116static 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
1123static 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
1145static struct ftrace_hash *
1146alloc_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
1181static void
1182ftrace_hash_rec_disable(struct ftrace_ops *ops, int filter_hash);
1183static void
1184ftrace_hash_rec_enable(struct ftrace_ops *ops, int filter_hash);
1185
1186static int
1187ftrace_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 */
1275static int
1276ftrace_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
1310static 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
1397static 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
1403static 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
1409static 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
1416static 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
1449static struct dyn_ftrace *
1450ftrace_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
1468static 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
1478static 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 */
1507int 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
1521static 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
1556static 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
1579static int
1580ftrace_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 */
1602int __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 */
1611int __weak ftrace_arch_code_modify_post_process(void)
1612{
1613        return 0;
1614}
1615
1616static 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
1654static 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
1669static ftrace_func_t saved_ftrace_func;
1670static int ftrace_start_up;
1671static int global_start_up;
1672
1673static 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
1686static 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
1714static 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
1760static 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
1772static 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
1782static cycle_t          ftrace_update_time;
1783static unsigned long    ftrace_update_cnt;
1784unsigned long           ftrace_update_tot_cnt;
1785
1786static 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
1794static 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
1867static 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
1911enum {
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
1921struct 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
1935static void *
1936t_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
1977static 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
2001static int
2002t_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
2022static void *
2023t_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
2074static 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
2081static 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
2139static void t_stop(struct seq_file *m, void *p)
2140{
2141        mutex_unlock(&ftrace_lock);
2142}
2143
2144static 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
2171static 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
2178static int
2179ftrace_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
2205static int
2206ftrace_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
2233static 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
2240static int
2241ftrace_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
2306static int
2307ftrace_filter_open(struct inode *inode, struct file *file)
2308{
2309        return ftrace_regex_open(&global_ops, FTRACE_ITER_FILTER,
2310                                 inode, file);
2311}
2312
2313static int
2314ftrace_notrace_open(struct inode *inode, struct file *file)
2315{
2316        return ftrace_regex_open(&global_ops, FTRACE_ITER_NOTRACE,
2317                                 inode, file);
2318}
2319
2320static loff_t
2321ftrace_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
2333static 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
2361static int
2362enter_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
2384static int
2385ftrace_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
2406static int
2407match_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, &not);
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
2445static int
2446ftrace_match_records(struct ftrace_hash *hash, char *buff, int len)
2447{
2448        return match_records(hash, buff, len, NULL, 0);
2449}
2450
2451static int
2452ftrace_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
2474static int
2475ftrace_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(&param, ":");
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
2506static struct ftrace_func_command ftrace_mod_cmd = {
2507        .name                   = "mod",
2508        .func                   = ftrace_mod_callback,
2509};
2510
2511static int __init ftrace_mod_cmd_init(void)
2512{
2513        return register_ftrace_command(&ftrace_mod_cmd);
2514}
2515device_initcall(ftrace_mod_cmd_init);
2516
2517static void
2518function_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
2545static struct ftrace_ops trace_probe_ops __read_mostly =
2546{
2547        .func           = function_trace_probe_call,
2548};
2549
2550static int ftrace_probe_registered;
2551
2552static 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
2576static 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
2599static 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
2610int
2611register_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, &not);
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
2679enum {
2680        PROBE_TEST_FUNC         = 1,
2681        PROBE_TEST_DATA         = 2
2682};
2683
2684static 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, &not);
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
2737void
2738unregister_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
2745void
2746unregister_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
2751void unregister_ftrace_function_probe_all(char *glob)
2752{
2753        __unregister_ftrace_function_probe(glob, NULL, NULL, 0);
2754}
2755
2756static LIST_HEAD(ftrace_commands);
2757static DEFINE_MUTEX(ftrace_cmd_mutex);
2758
2759int 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
2778int 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
2797static 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
2832static ssize_t
2833ftrace_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;
2868out_unlock:
2869        mutex_unlock(&ftrace_regex_lock);
2870
2871        return ret;
2872}
2873
2874static ssize_t
2875ftrace_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
2881static ssize_t
2882ftrace_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
2888static int
2889ftrace_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 */
2942void 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}
2947EXPORT_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 */
2960void 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}
2965EXPORT_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 */
2976void ftrace_set_global_filter(unsigned char *buf, int len, int reset)
2977{
2978        ftrace_set_regex(&global_ops, buf, len, reset, 1);
2979}
2980EXPORT_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 */
2993void ftrace_set_global_notrace(unsigned char *buf, int len, int reset)
2994{
2995        ftrace_set_regex(&global_ops, buf, len, reset, 0);
2996}
2997EXPORT_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
3003static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata;
3004static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata;
3005
3006static 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
3013static 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
3021static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata;
3022static int ftrace_set_func(unsigned long *array, int *idx, char *buffer);
3023
3024static 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
3031static 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
3048static void __init
3049set_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
3059static 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
3071static int
3072ftrace_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
3121static 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
3128static 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
3135static 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
3143static 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
3153static DEFINE_MUTEX(graph_lock);
3154
3155int ftrace_graph_count;
3156int ftrace_graph_filter_enabled;
3157unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly;
3158
3159static 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
3167static void *
3168g_next(struct seq_file *m, void *v, loff_t *pos)
3169{
3170        (*pos)++;
3171        return __g_next(m, pos);
3172}
3173
3174static 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
3185static void g_stop(struct seq_file *m, void *p)
3186{
3187        mutex_unlock(&graph_lock);
3188}
3189
3190static 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
3207static 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
3214static int
3215ftrace_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
3237static int
3238ftrace_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
3245static int
3246ftrace_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, &not);
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();
3302out:
3303        mutex_unlock(&ftrace_lock);
3304
3305        if (fail)
3306                return -EINVAL;
3307
3308        ftrace_graph_filter_enabled = 1;
3309        return 0;
3310}
3311
3312static ssize_t
3313ftrace_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
3343out_free:
3344        trace_parser_put(&parser);
3345out_unlock:
3346        mutex_unlock(&graph_lock);
3347
3348        return ret;
3349}
3350
3351static 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
3360static __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
3384static 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
3426void 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
3450static 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
3458static 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
3477static int ftrace_module_notify(struct notifier_block *self,
3478                                unsigned long val, void *data)
3479{
3480        return 0;
3481}
3482#endif /* CONFIG_MODULES */
3483
3484struct notifier_block ftrace_module_nb = {
3485        .notifier_call = ftrace_module_notify,
3486        .priority = 0,
3487};
3488
3489extern unsigned long __start_mcount_loc[];
3490extern unsigned long __stop_mcount_loc[];
3491
3492void __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
3533static struct ftrace_ops global_ops = {
3534        .func                   = ftrace_stub,
3535};
3536
3537static int __init ftrace_nodyn_init(void)
3538{
3539        ftrace_enabled = 1;
3540        return 0;
3541}
3542device_initcall(ftrace_nodyn_init);
3543
3544static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; }
3545static 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
3556static inline int
3557ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
3558{
3559        return 1;
3560}
3561
3562#endif /* CONFIG_DYNAMIC_FTRACE */
3563
3564static void
3565ftrace_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
3588static 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
3601static 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
3614static 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
3627static 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
3638static 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
3646static 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
3654static 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
3693out_put:
3694        if (pid != ftrace_swapper_pid)
3695                put_pid(pid);
3696
3697out:
3698        mutex_unlock(&ftrace_lock);
3699        return ret;
3700}
3701
3702static 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
3722static 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
3732static 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
3740static void fpid_stop(struct seq_file *m, void *p)
3741{
3742        mutex_unlock(&ftrace_lock);
3743}
3744
3745static 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
3762static 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
3769static int
3770ftrace_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
3784static ssize_t
3785ftrace_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
3817static int
3818ftrace_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
3826static 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
3834static __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}
3851fs_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 */
3860void 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 */
3870int 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 */
3886int 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}
3904EXPORT_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 */
3912int 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}
3924EXPORT_SYMBOL_GPL(unregister_ftrace_function);
3925
3926int
3927ftrace_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
3971static int ftrace_graph_active;
3972static struct notifier_block ftrace_suspend_notifier;
3973
3974int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
3975{
3976        return 0;
3977}
3978
3979/* The callbacks that hook a function */
3980trace_func_graph_ret_t ftrace_graph_return =
3981                        (trace_func_graph_ret_t)ftrace_stub;
3982trace_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. */
3985static 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
4022unlock:
4023        read_unlock_irqrestore(&tasklist_lock, flags);
4024free:
4025        for (i = start; i < end; i++)
4026                kfree(ret_stack_list[i]);
4027        return ret;
4028}
4029
4030static void
4031ftrace_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 */
4063static 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 */
4101static int
4102ftrace_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
4117int 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
4145out:
4146        mutex_unlock(&ftrace_lock);
4147        return ret;
4148}
4149
4150void 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
4168static DEFINE_PER_CPU(struct ftrace_ret_stack *, idle_ret_stack);
4169
4170static void
4171graph_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 */
4185void 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 */
4212void 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
4230void 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
4241void ftrace_graph_stop(void)
4242{
4243        ftrace_stop();
4244}
4245#endif
4246