linux/kernel/trace/ftrace.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Infrastructure for profiling code inserted by 'gcc -pg'.
   4 *
   5 * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com>
   6 * Copyright (C) 2004-2008 Ingo Molnar <mingo@redhat.com>
   7 *
   8 * Originally ported from the -rt patch by:
   9 *   Copyright (C) 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
  10 *
  11 * Based on code in the latency_tracer, that is:
  12 *
  13 *  Copyright (C) 2004-2006 Ingo Molnar
  14 *  Copyright (C) 2004 Nadia Yvette Chambers
  15 */
  16
  17#include <linux/stop_machine.h>
  18#include <linux/clocksource.h>
  19#include <linux/sched/task.h>
  20#include <linux/kallsyms.h>
  21#include <linux/seq_file.h>
  22#include <linux/tracefs.h>
  23#include <linux/hardirq.h>
  24#include <linux/kthread.h>
  25#include <linux/uaccess.h>
  26#include <linux/bsearch.h>
  27#include <linux/module.h>
  28#include <linux/ftrace.h>
  29#include <linux/sysctl.h>
  30#include <linux/slab.h>
  31#include <linux/ctype.h>
  32#include <linux/sort.h>
  33#include <linux/list.h>
  34#include <linux/hash.h>
  35#include <linux/rcupdate.h>
  36#include <linux/kprobes.h>
  37
  38#include <trace/events/sched.h>
  39
  40#include <asm/sections.h>
  41#include <asm/setup.h>
  42
  43#include "ftrace_internal.h"
  44#include "trace_output.h"
  45#include "trace_stat.h"
  46
  47#define FTRACE_WARN_ON(cond)                    \
  48        ({                                      \
  49                int ___r = cond;                \
  50                if (WARN_ON(___r))              \
  51                        ftrace_kill();          \
  52                ___r;                           \
  53        })
  54
  55#define FTRACE_WARN_ON_ONCE(cond)               \
  56        ({                                      \
  57                int ___r = cond;                \
  58                if (WARN_ON_ONCE(___r))         \
  59                        ftrace_kill();          \
  60                ___r;                           \
  61        })
  62
  63/* hash bits for specific function selection */
  64#define FTRACE_HASH_BITS 7
  65#define FTRACE_FUNC_HASHSIZE (1 << FTRACE_HASH_BITS)
  66#define FTRACE_HASH_DEFAULT_BITS 10
  67#define FTRACE_HASH_MAX_BITS 12
  68
  69#ifdef CONFIG_DYNAMIC_FTRACE
  70#define INIT_OPS_HASH(opsname)  \
  71        .func_hash              = &opsname.local_hash,                  \
  72        .local_hash.regex_lock  = __MUTEX_INITIALIZER(opsname.local_hash.regex_lock),
  73#define ASSIGN_OPS_HASH(opsname, val) \
  74        .func_hash              = val, \
  75        .local_hash.regex_lock  = __MUTEX_INITIALIZER(opsname.local_hash.regex_lock),
  76#else
  77#define INIT_OPS_HASH(opsname)
  78#define ASSIGN_OPS_HASH(opsname, val)
  79#endif
  80
  81enum {
  82        FTRACE_MODIFY_ENABLE_FL         = (1 << 0),
  83        FTRACE_MODIFY_MAY_SLEEP_FL      = (1 << 1),
  84};
  85
  86struct ftrace_ops ftrace_list_end __read_mostly = {
  87        .func           = ftrace_stub,
  88        .flags          = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_STUB,
  89        INIT_OPS_HASH(ftrace_list_end)
  90};
  91
  92/* ftrace_enabled is a method to turn ftrace on or off */
  93int ftrace_enabled __read_mostly;
  94static int last_ftrace_enabled;
  95
  96/* Current function tracing op */
  97struct ftrace_ops *function_trace_op __read_mostly = &ftrace_list_end;
  98/* What to set function_trace_op to */
  99static struct ftrace_ops *set_function_trace_op;
 100
 101static bool ftrace_pids_enabled(struct ftrace_ops *ops)
 102{
 103        struct trace_array *tr;
 104
 105        if (!(ops->flags & FTRACE_OPS_FL_PID) || !ops->private)
 106                return false;
 107
 108        tr = ops->private;
 109
 110        return tr->function_pids != NULL;
 111}
 112
 113static void ftrace_update_trampoline(struct ftrace_ops *ops);
 114
 115/*
 116 * ftrace_disabled is set when an anomaly is discovered.
 117 * ftrace_disabled is much stronger than ftrace_enabled.
 118 */
 119static int ftrace_disabled __read_mostly;
 120
 121DEFINE_MUTEX(ftrace_lock);
 122
 123struct ftrace_ops __rcu *ftrace_ops_list __read_mostly = &ftrace_list_end;
 124ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub;
 125struct ftrace_ops global_ops;
 126
 127#if ARCH_SUPPORTS_FTRACE_OPS
 128static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
 129                                 struct ftrace_ops *op, struct pt_regs *regs);
 130#else
 131/* See comment below, where ftrace_ops_list_func is defined */
 132static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip);
 133#define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
 134#endif
 135
 136static inline void ftrace_ops_init(struct ftrace_ops *ops)
 137{
 138#ifdef CONFIG_DYNAMIC_FTRACE
 139        if (!(ops->flags & FTRACE_OPS_FL_INITIALIZED)) {
 140                mutex_init(&ops->local_hash.regex_lock);
 141                ops->func_hash = &ops->local_hash;
 142                ops->flags |= FTRACE_OPS_FL_INITIALIZED;
 143        }
 144#endif
 145}
 146
 147static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip,
 148                            struct ftrace_ops *op, struct pt_regs *regs)
 149{
 150        struct trace_array *tr = op->private;
 151
 152        if (tr && this_cpu_read(tr->trace_buffer.data->ftrace_ignore_pid))
 153                return;
 154
 155        op->saved_func(ip, parent_ip, op, regs);
 156}
 157
 158static void ftrace_sync(struct work_struct *work)
 159{
 160        /*
 161         * This function is just a stub to implement a hard force
 162         * of synchronize_rcu(). This requires synchronizing
 163         * tasks even in userspace and idle.
 164         *
 165         * Yes, function tracing is rude.
 166         */
 167}
 168
 169static void ftrace_sync_ipi(void *data)
 170{
 171        /* Probably not needed, but do it anyway */
 172        smp_rmb();
 173}
 174
 175static ftrace_func_t ftrace_ops_get_list_func(struct ftrace_ops *ops)
 176{
 177        /*
 178         * If this is a dynamic, RCU, or per CPU ops, or we force list func,
 179         * then it needs to call the list anyway.
 180         */
 181        if (ops->flags & (FTRACE_OPS_FL_DYNAMIC | FTRACE_OPS_FL_RCU) ||
 182            FTRACE_FORCE_LIST_FUNC)
 183                return ftrace_ops_list_func;
 184
 185        return ftrace_ops_get_func(ops);
 186}
 187
 188static void update_ftrace_function(void)
 189{
 190        ftrace_func_t func;
 191
 192        /*
 193         * Prepare the ftrace_ops that the arch callback will use.
 194         * If there's only one ftrace_ops registered, the ftrace_ops_list
 195         * will point to the ops we want.
 196         */
 197        set_function_trace_op = rcu_dereference_protected(ftrace_ops_list,
 198                                                lockdep_is_held(&ftrace_lock));
 199
 200        /* If there's no ftrace_ops registered, just call the stub function */
 201        if (set_function_trace_op == &ftrace_list_end) {
 202                func = ftrace_stub;
 203
 204        /*
 205         * If we are at the end of the list and this ops is
 206         * recursion safe and not dynamic and the arch supports passing ops,
 207         * then have the mcount trampoline call the function directly.
 208         */
 209        } else if (rcu_dereference_protected(ftrace_ops_list->next,
 210                        lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) {
 211                func = ftrace_ops_get_list_func(ftrace_ops_list);
 212
 213        } else {
 214                /* Just use the default ftrace_ops */
 215                set_function_trace_op = &ftrace_list_end;
 216                func = ftrace_ops_list_func;
 217        }
 218
 219        update_function_graph_func();
 220
 221        /* If there's no change, then do nothing more here */
 222        if (ftrace_trace_function == func)
 223                return;
 224
 225        /*
 226         * If we are using the list function, it doesn't care
 227         * about the function_trace_ops.
 228         */
 229        if (func == ftrace_ops_list_func) {
 230                ftrace_trace_function = func;
 231                /*
 232                 * Don't even bother setting function_trace_ops,
 233                 * it would be racy to do so anyway.
 234                 */
 235                return;
 236        }
 237
 238#ifndef CONFIG_DYNAMIC_FTRACE
 239        /*
 240         * For static tracing, we need to be a bit more careful.
 241         * The function change takes affect immediately. Thus,
 242         * we need to coorditate the setting of the function_trace_ops
 243         * with the setting of the ftrace_trace_function.
 244         *
 245         * Set the function to the list ops, which will call the
 246         * function we want, albeit indirectly, but it handles the
 247         * ftrace_ops and doesn't depend on function_trace_op.
 248         */
 249        ftrace_trace_function = ftrace_ops_list_func;
 250        /*
 251         * Make sure all CPUs see this. Yes this is slow, but static
 252         * tracing is slow and nasty to have enabled.
 253         */
 254        schedule_on_each_cpu(ftrace_sync);
 255        /* Now all cpus are using the list ops. */
 256        function_trace_op = set_function_trace_op;
 257        /* Make sure the function_trace_op is visible on all CPUs */
 258        smp_wmb();
 259        /* Nasty way to force a rmb on all cpus */
 260        smp_call_function(ftrace_sync_ipi, NULL, 1);
 261        /* OK, we are all set to update the ftrace_trace_function now! */
 262#endif /* !CONFIG_DYNAMIC_FTRACE */
 263
 264        ftrace_trace_function = func;
 265}
 266
 267static void add_ftrace_ops(struct ftrace_ops __rcu **list,
 268                           struct ftrace_ops *ops)
 269{
 270        rcu_assign_pointer(ops->next, *list);
 271
 272        /*
 273         * We are entering ops into the list but another
 274         * CPU might be walking that list. We need to make sure
 275         * the ops->next pointer is valid before another CPU sees
 276         * the ops pointer included into the list.
 277         */
 278        rcu_assign_pointer(*list, ops);
 279}
 280
 281static int remove_ftrace_ops(struct ftrace_ops __rcu **list,
 282                             struct ftrace_ops *ops)
 283{
 284        struct ftrace_ops **p;
 285
 286        /*
 287         * If we are removing the last function, then simply point
 288         * to the ftrace_stub.
 289         */
 290        if (rcu_dereference_protected(*list,
 291                        lockdep_is_held(&ftrace_lock)) == ops &&
 292            rcu_dereference_protected(ops->next,
 293                        lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) {
 294                *list = &ftrace_list_end;
 295                return 0;
 296        }
 297
 298        for (p = list; *p != &ftrace_list_end; p = &(*p)->next)
 299                if (*p == ops)
 300                        break;
 301
 302        if (*p != ops)
 303                return -1;
 304
 305        *p = (*p)->next;
 306        return 0;
 307}
 308
 309static void ftrace_update_trampoline(struct ftrace_ops *ops);
 310
 311int __register_ftrace_function(struct ftrace_ops *ops)
 312{
 313        if (ops->flags & FTRACE_OPS_FL_DELETED)
 314                return -EINVAL;
 315
 316        if (WARN_ON(ops->flags & FTRACE_OPS_FL_ENABLED))
 317                return -EBUSY;
 318
 319#ifndef CONFIG_DYNAMIC_FTRACE_WITH_REGS
 320        /*
 321         * If the ftrace_ops specifies SAVE_REGS, then it only can be used
 322         * if the arch supports it, or SAVE_REGS_IF_SUPPORTED is also set.
 323         * Setting SAVE_REGS_IF_SUPPORTED makes SAVE_REGS irrelevant.
 324         */
 325        if (ops->flags & FTRACE_OPS_FL_SAVE_REGS &&
 326            !(ops->flags & FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED))
 327                return -EINVAL;
 328
 329        if (ops->flags & FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED)
 330                ops->flags |= FTRACE_OPS_FL_SAVE_REGS;
 331#endif
 332
 333        if (!core_kernel_data((unsigned long)ops))
 334                ops->flags |= FTRACE_OPS_FL_DYNAMIC;
 335
 336        add_ftrace_ops(&ftrace_ops_list, ops);
 337
 338        /* Always save the function, and reset at unregistering */
 339        ops->saved_func = ops->func;
 340
 341        if (ftrace_pids_enabled(ops))
 342                ops->func = ftrace_pid_func;
 343
 344        ftrace_update_trampoline(ops);
 345
 346        if (ftrace_enabled)
 347                update_ftrace_function();
 348
 349        return 0;
 350}
 351
 352int __unregister_ftrace_function(struct ftrace_ops *ops)
 353{
 354        int ret;
 355
 356        if (WARN_ON(!(ops->flags & FTRACE_OPS_FL_ENABLED)))
 357                return -EBUSY;
 358
 359        ret = remove_ftrace_ops(&ftrace_ops_list, ops);
 360
 361        if (ret < 0)
 362                return ret;
 363
 364        if (ftrace_enabled)
 365                update_ftrace_function();
 366
 367        ops->func = ops->saved_func;
 368
 369        return 0;
 370}
 371
 372static void ftrace_update_pid_func(void)
 373{
 374        struct ftrace_ops *op;
 375
 376        /* Only do something if we are tracing something */
 377        if (ftrace_trace_function == ftrace_stub)
 378                return;
 379
 380        do_for_each_ftrace_op(op, ftrace_ops_list) {
 381                if (op->flags & FTRACE_OPS_FL_PID) {
 382                        op->func = ftrace_pids_enabled(op) ?
 383                                ftrace_pid_func : op->saved_func;
 384                        ftrace_update_trampoline(op);
 385                }
 386        } while_for_each_ftrace_op(op);
 387
 388        update_ftrace_function();
 389}
 390
 391#ifdef CONFIG_FUNCTION_PROFILER
 392struct ftrace_profile {
 393        struct hlist_node               node;
 394        unsigned long                   ip;
 395        unsigned long                   counter;
 396#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 397        unsigned long long              time;
 398        unsigned long long              time_squared;
 399#endif
 400};
 401
 402struct ftrace_profile_page {
 403        struct ftrace_profile_page      *next;
 404        unsigned long                   index;
 405        struct ftrace_profile           records[];
 406};
 407
 408struct ftrace_profile_stat {
 409        atomic_t                        disabled;
 410        struct hlist_head               *hash;
 411        struct ftrace_profile_page      *pages;
 412        struct ftrace_profile_page      *start;
 413        struct tracer_stat              stat;
 414};
 415
 416#define PROFILE_RECORDS_SIZE                                            \
 417        (PAGE_SIZE - offsetof(struct ftrace_profile_page, records))
 418
 419#define PROFILES_PER_PAGE                                       \
 420        (PROFILE_RECORDS_SIZE / sizeof(struct ftrace_profile))
 421
 422static int ftrace_profile_enabled __read_mostly;
 423
 424/* ftrace_profile_lock - synchronize the enable and disable of the profiler */
 425static DEFINE_MUTEX(ftrace_profile_lock);
 426
 427static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats);
 428
 429#define FTRACE_PROFILE_HASH_BITS 10
 430#define FTRACE_PROFILE_HASH_SIZE (1 << FTRACE_PROFILE_HASH_BITS)
 431
 432static void *
 433function_stat_next(void *v, int idx)
 434{
 435        struct ftrace_profile *rec = v;
 436        struct ftrace_profile_page *pg;
 437
 438        pg = (struct ftrace_profile_page *)((unsigned long)rec & PAGE_MASK);
 439
 440 again:
 441        if (idx != 0)
 442                rec++;
 443
 444        if ((void *)rec >= (void *)&pg->records[pg->index]) {
 445                pg = pg->next;
 446                if (!pg)
 447                        return NULL;
 448                rec = &pg->records[0];
 449                if (!rec->counter)
 450                        goto again;
 451        }
 452
 453        return rec;
 454}
 455
 456static void *function_stat_start(struct tracer_stat *trace)
 457{
 458        struct ftrace_profile_stat *stat =
 459                container_of(trace, struct ftrace_profile_stat, stat);
 460
 461        if (!stat || !stat->start)
 462                return NULL;
 463
 464        return function_stat_next(&stat->start->records[0], 0);
 465}
 466
 467#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 468/* function graph compares on total time */
 469static int function_stat_cmp(void *p1, void *p2)
 470{
 471        struct ftrace_profile *a = p1;
 472        struct ftrace_profile *b = p2;
 473
 474        if (a->time < b->time)
 475                return -1;
 476        if (a->time > b->time)
 477                return 1;
 478        else
 479                return 0;
 480}
 481#else
 482/* not function graph compares against hits */
 483static int function_stat_cmp(void *p1, void *p2)
 484{
 485        struct ftrace_profile *a = p1;
 486        struct ftrace_profile *b = p2;
 487
 488        if (a->counter < b->counter)
 489                return -1;
 490        if (a->counter > b->counter)
 491                return 1;
 492        else
 493                return 0;
 494}
 495#endif
 496
 497static int function_stat_headers(struct seq_file *m)
 498{
 499#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 500        seq_puts(m, "  Function                               "
 501                 "Hit    Time            Avg             s^2\n"
 502                    "  --------                               "
 503                 "---    ----            ---             ---\n");
 504#else
 505        seq_puts(m, "  Function                               Hit\n"
 506                    "  --------                               ---\n");
 507#endif
 508        return 0;
 509}
 510
 511static int function_stat_show(struct seq_file *m, void *v)
 512{
 513        struct ftrace_profile *rec = v;
 514        char str[KSYM_SYMBOL_LEN];
 515        int ret = 0;
 516#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 517        static struct trace_seq s;
 518        unsigned long long avg;
 519        unsigned long long stddev;
 520#endif
 521        mutex_lock(&ftrace_profile_lock);
 522
 523        /* we raced with function_profile_reset() */
 524        if (unlikely(rec->counter == 0)) {
 525                ret = -EBUSY;
 526                goto out;
 527        }
 528
 529#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 530        avg = rec->time;
 531        do_div(avg, rec->counter);
 532        if (tracing_thresh && (avg < tracing_thresh))
 533                goto out;
 534#endif
 535
 536        kallsyms_lookup(rec->ip, NULL, NULL, NULL, str);
 537        seq_printf(m, "  %-30.30s  %10lu", str, rec->counter);
 538
 539#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 540        seq_puts(m, "    ");
 541
 542        /* Sample standard deviation (s^2) */
 543        if (rec->counter <= 1)
 544                stddev = 0;
 545        else {
 546                /*
 547                 * Apply Welford's method:
 548                 * s^2 = 1 / (n * (n-1)) * (n * \Sum (x_i)^2 - (\Sum x_i)^2)
 549                 */
 550                stddev = rec->counter * rec->time_squared -
 551                         rec->time * rec->time;
 552
 553                /*
 554                 * Divide only 1000 for ns^2 -> us^2 conversion.
 555                 * trace_print_graph_duration will divide 1000 again.
 556                 */
 557                do_div(stddev, rec->counter * (rec->counter - 1) * 1000);
 558        }
 559
 560        trace_seq_init(&s);
 561        trace_print_graph_duration(rec->time, &s);
 562        trace_seq_puts(&s, "    ");
 563        trace_print_graph_duration(avg, &s);
 564        trace_seq_puts(&s, "    ");
 565        trace_print_graph_duration(stddev, &s);
 566        trace_print_seq(m, &s);
 567#endif
 568        seq_putc(m, '\n');
 569out:
 570        mutex_unlock(&ftrace_profile_lock);
 571
 572        return ret;
 573}
 574
 575static void ftrace_profile_reset(struct ftrace_profile_stat *stat)
 576{
 577        struct ftrace_profile_page *pg;
 578
 579        pg = stat->pages = stat->start;
 580
 581        while (pg) {
 582                memset(pg->records, 0, PROFILE_RECORDS_SIZE);
 583                pg->index = 0;
 584                pg = pg->next;
 585        }
 586
 587        memset(stat->hash, 0,
 588               FTRACE_PROFILE_HASH_SIZE * sizeof(struct hlist_head));
 589}
 590
 591int ftrace_profile_pages_init(struct ftrace_profile_stat *stat)
 592{
 593        struct ftrace_profile_page *pg;
 594        int functions;
 595        int pages;
 596        int i;
 597
 598        /* If we already allocated, do nothing */
 599        if (stat->pages)
 600                return 0;
 601
 602        stat->pages = (void *)get_zeroed_page(GFP_KERNEL);
 603        if (!stat->pages)
 604                return -ENOMEM;
 605
 606#ifdef CONFIG_DYNAMIC_FTRACE
 607        functions = ftrace_update_tot_cnt;
 608#else
 609        /*
 610         * We do not know the number of functions that exist because
 611         * dynamic tracing is what counts them. With past experience
 612         * we have around 20K functions. That should be more than enough.
 613         * It is highly unlikely we will execute every function in
 614         * the kernel.
 615         */
 616        functions = 20000;
 617#endif
 618
 619        pg = stat->start = stat->pages;
 620
 621        pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE);
 622
 623        for (i = 1; i < pages; i++) {
 624                pg->next = (void *)get_zeroed_page(GFP_KERNEL);
 625                if (!pg->next)
 626                        goto out_free;
 627                pg = pg->next;
 628        }
 629
 630        return 0;
 631
 632 out_free:
 633        pg = stat->start;
 634        while (pg) {
 635                unsigned long tmp = (unsigned long)pg;
 636
 637                pg = pg->next;
 638                free_page(tmp);
 639        }
 640
 641        stat->pages = NULL;
 642        stat->start = NULL;
 643
 644        return -ENOMEM;
 645}
 646
 647static int ftrace_profile_init_cpu(int cpu)
 648{
 649        struct ftrace_profile_stat *stat;
 650        int size;
 651
 652        stat = &per_cpu(ftrace_profile_stats, cpu);
 653
 654        if (stat->hash) {
 655                /* If the profile is already created, simply reset it */
 656                ftrace_profile_reset(stat);
 657                return 0;
 658        }
 659
 660        /*
 661         * We are profiling all functions, but usually only a few thousand
 662         * functions are hit. We'll make a hash of 1024 items.
 663         */
 664        size = FTRACE_PROFILE_HASH_SIZE;
 665
 666        stat->hash = kcalloc(size, sizeof(struct hlist_head), GFP_KERNEL);
 667
 668        if (!stat->hash)
 669                return -ENOMEM;
 670
 671        /* Preallocate the function profiling pages */
 672        if (ftrace_profile_pages_init(stat) < 0) {
 673                kfree(stat->hash);
 674                stat->hash = NULL;
 675                return -ENOMEM;
 676        }
 677
 678        return 0;
 679}
 680
 681static int ftrace_profile_init(void)
 682{
 683        int cpu;
 684        int ret = 0;
 685
 686        for_each_possible_cpu(cpu) {
 687                ret = ftrace_profile_init_cpu(cpu);
 688                if (ret)
 689                        break;
 690        }
 691
 692        return ret;
 693}
 694
 695/* interrupts must be disabled */
 696static struct ftrace_profile *
 697ftrace_find_profiled_func(struct ftrace_profile_stat *stat, unsigned long ip)
 698{
 699        struct ftrace_profile *rec;
 700        struct hlist_head *hhd;
 701        unsigned long key;
 702
 703        key = hash_long(ip, FTRACE_PROFILE_HASH_BITS);
 704        hhd = &stat->hash[key];
 705
 706        if (hlist_empty(hhd))
 707                return NULL;
 708
 709        hlist_for_each_entry_rcu_notrace(rec, hhd, node) {
 710                if (rec->ip == ip)
 711                        return rec;
 712        }
 713
 714        return NULL;
 715}
 716
 717static void ftrace_add_profile(struct ftrace_profile_stat *stat,
 718                               struct ftrace_profile *rec)
 719{
 720        unsigned long key;
 721
 722        key = hash_long(rec->ip, FTRACE_PROFILE_HASH_BITS);
 723        hlist_add_head_rcu(&rec->node, &stat->hash[key]);
 724}
 725
 726/*
 727 * The memory is already allocated, this simply finds a new record to use.
 728 */
 729static struct ftrace_profile *
 730ftrace_profile_alloc(struct ftrace_profile_stat *stat, unsigned long ip)
 731{
 732        struct ftrace_profile *rec = NULL;
 733
 734        /* prevent recursion (from NMIs) */
 735        if (atomic_inc_return(&stat->disabled) != 1)
 736                goto out;
 737
 738        /*
 739         * Try to find the function again since an NMI
 740         * could have added it
 741         */
 742        rec = ftrace_find_profiled_func(stat, ip);
 743        if (rec)
 744                goto out;
 745
 746        if (stat->pages->index == PROFILES_PER_PAGE) {
 747                if (!stat->pages->next)
 748                        goto out;
 749                stat->pages = stat->pages->next;
 750        }
 751
 752        rec = &stat->pages->records[stat->pages->index++];
 753        rec->ip = ip;
 754        ftrace_add_profile(stat, rec);
 755
 756 out:
 757        atomic_dec(&stat->disabled);
 758
 759        return rec;
 760}
 761
 762static void
 763function_profile_call(unsigned long ip, unsigned long parent_ip,
 764                      struct ftrace_ops *ops, struct pt_regs *regs)
 765{
 766        struct ftrace_profile_stat *stat;
 767        struct ftrace_profile *rec;
 768        unsigned long flags;
 769
 770        if (!ftrace_profile_enabled)
 771                return;
 772
 773        local_irq_save(flags);
 774
 775        stat = this_cpu_ptr(&ftrace_profile_stats);
 776        if (!stat->hash || !ftrace_profile_enabled)
 777                goto out;
 778
 779        rec = ftrace_find_profiled_func(stat, ip);
 780        if (!rec) {
 781                rec = ftrace_profile_alloc(stat, ip);
 782                if (!rec)
 783                        goto out;
 784        }
 785
 786        rec->counter++;
 787 out:
 788        local_irq_restore(flags);
 789}
 790
 791#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 792static bool fgraph_graph_time = true;
 793
 794void ftrace_graph_graph_time_control(bool enable)
 795{
 796        fgraph_graph_time = enable;
 797}
 798
 799static int profile_graph_entry(struct ftrace_graph_ent *trace)
 800{
 801        struct ftrace_ret_stack *ret_stack;
 802
 803        function_profile_call(trace->func, 0, NULL, NULL);
 804
 805        /* If function graph is shutting down, ret_stack can be NULL */
 806        if (!current->ret_stack)
 807                return 0;
 808
 809        ret_stack = ftrace_graph_get_ret_stack(current, 0);
 810        if (ret_stack)
 811                ret_stack->subtime = 0;
 812
 813        return 1;
 814}
 815
 816static void profile_graph_return(struct ftrace_graph_ret *trace)
 817{
 818        struct ftrace_ret_stack *ret_stack;
 819        struct ftrace_profile_stat *stat;
 820        unsigned long long calltime;
 821        struct ftrace_profile *rec;
 822        unsigned long flags;
 823
 824        local_irq_save(flags);
 825        stat = this_cpu_ptr(&ftrace_profile_stats);
 826        if (!stat->hash || !ftrace_profile_enabled)
 827                goto out;
 828
 829        /* If the calltime was zero'd ignore it */
 830        if (!trace->calltime)
 831                goto out;
 832
 833        calltime = trace->rettime - trace->calltime;
 834
 835        if (!fgraph_graph_time) {
 836
 837                /* Append this call time to the parent time to subtract */
 838                ret_stack = ftrace_graph_get_ret_stack(current, 1);
 839                if (ret_stack)
 840                        ret_stack->subtime += calltime;
 841
 842                ret_stack = ftrace_graph_get_ret_stack(current, 0);
 843                if (ret_stack && ret_stack->subtime < calltime)
 844                        calltime -= ret_stack->subtime;
 845                else
 846                        calltime = 0;
 847        }
 848
 849        rec = ftrace_find_profiled_func(stat, trace->func);
 850        if (rec) {
 851                rec->time += calltime;
 852                rec->time_squared += calltime * calltime;
 853        }
 854
 855 out:
 856        local_irq_restore(flags);
 857}
 858
 859static struct fgraph_ops fprofiler_ops = {
 860        .entryfunc = &profile_graph_entry,
 861        .retfunc = &profile_graph_return,
 862};
 863
 864static int register_ftrace_profiler(void)
 865{
 866        return register_ftrace_graph(&fprofiler_ops);
 867}
 868
 869static void unregister_ftrace_profiler(void)
 870{
 871        unregister_ftrace_graph(&fprofiler_ops);
 872}
 873#else
 874static struct ftrace_ops ftrace_profile_ops __read_mostly = {
 875        .func           = function_profile_call,
 876        .flags          = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_INITIALIZED,
 877        INIT_OPS_HASH(ftrace_profile_ops)
 878};
 879
 880static int register_ftrace_profiler(void)
 881{
 882        return register_ftrace_function(&ftrace_profile_ops);
 883}
 884
 885static void unregister_ftrace_profiler(void)
 886{
 887        unregister_ftrace_function(&ftrace_profile_ops);
 888}
 889#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 890
 891static ssize_t
 892ftrace_profile_write(struct file *filp, const char __user *ubuf,
 893                     size_t cnt, loff_t *ppos)
 894{
 895        unsigned long val;
 896        int ret;
 897
 898        ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
 899        if (ret)
 900                return ret;
 901
 902        val = !!val;
 903
 904        mutex_lock(&ftrace_profile_lock);
 905        if (ftrace_profile_enabled ^ val) {
 906                if (val) {
 907                        ret = ftrace_profile_init();
 908                        if (ret < 0) {
 909                                cnt = ret;
 910                                goto out;
 911                        }
 912
 913                        ret = register_ftrace_profiler();
 914                        if (ret < 0) {
 915                                cnt = ret;
 916                                goto out;
 917                        }
 918                        ftrace_profile_enabled = 1;
 919                } else {
 920                        ftrace_profile_enabled = 0;
 921                        /*
 922                         * unregister_ftrace_profiler calls stop_machine
 923                         * so this acts like an synchronize_rcu.
 924                         */
 925                        unregister_ftrace_profiler();
 926                }
 927        }
 928 out:
 929        mutex_unlock(&ftrace_profile_lock);
 930
 931        *ppos += cnt;
 932
 933        return cnt;
 934}
 935
 936static ssize_t
 937ftrace_profile_read(struct file *filp, char __user *ubuf,
 938                     size_t cnt, loff_t *ppos)
 939{
 940        char buf[64];           /* big enough to hold a number */
 941        int r;
 942
 943        r = sprintf(buf, "%u\n", ftrace_profile_enabled);
 944        return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
 945}
 946
 947static const struct file_operations ftrace_profile_fops = {
 948        .open           = tracing_open_generic,
 949        .read           = ftrace_profile_read,
 950        .write          = ftrace_profile_write,
 951        .llseek         = default_llseek,
 952};
 953
 954/* used to initialize the real stat files */
 955static struct tracer_stat function_stats __initdata = {
 956        .name           = "functions",
 957        .stat_start     = function_stat_start,
 958        .stat_next      = function_stat_next,
 959        .stat_cmp       = function_stat_cmp,
 960        .stat_headers   = function_stat_headers,
 961        .stat_show      = function_stat_show
 962};
 963
 964static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
 965{
 966        struct ftrace_profile_stat *stat;
 967        struct dentry *entry;
 968        char *name;
 969        int ret;
 970        int cpu;
 971
 972        for_each_possible_cpu(cpu) {
 973                stat = &per_cpu(ftrace_profile_stats, cpu);
 974
 975                name = kasprintf(GFP_KERNEL, "function%d", cpu);
 976                if (!name) {
 977                        /*
 978                         * The files created are permanent, if something happens
 979                         * we still do not free memory.
 980                         */
 981                        WARN(1,
 982                             "Could not allocate stat file for cpu %d\n",
 983                             cpu);
 984                        return;
 985                }
 986                stat->stat = function_stats;
 987                stat->stat.name = name;
 988                ret = register_stat_tracer(&stat->stat);
 989                if (ret) {
 990                        WARN(1,
 991                             "Could not register function stat for cpu %d\n",
 992                             cpu);
 993                        kfree(name);
 994                        return;
 995                }
 996        }
 997
 998        entry = tracefs_create_file("function_profile_enabled", 0644,
 999                                    d_tracer, NULL, &ftrace_profile_fops);
1000        if (!entry)
1001                pr_warn("Could not create tracefs 'function_profile_enabled' entry\n");
1002}
1003
1004#else /* CONFIG_FUNCTION_PROFILER */
1005static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
1006{
1007}
1008#endif /* CONFIG_FUNCTION_PROFILER */
1009
1010#ifdef CONFIG_DYNAMIC_FTRACE
1011
1012static struct ftrace_ops *removed_ops;
1013
1014/*
1015 * Set when doing a global update, like enabling all recs or disabling them.
1016 * It is not set when just updating a single ftrace_ops.
1017 */
1018static bool update_all_ops;
1019
1020#ifndef CONFIG_FTRACE_MCOUNT_RECORD
1021# error Dynamic ftrace depends on MCOUNT_RECORD
1022#endif
1023
1024struct ftrace_func_entry {
1025        struct hlist_node hlist;
1026        unsigned long ip;
1027};
1028
1029struct ftrace_func_probe {
1030        struct ftrace_probe_ops *probe_ops;
1031        struct ftrace_ops       ops;
1032        struct trace_array      *tr;
1033        struct list_head        list;
1034        void                    *data;
1035        int                     ref;
1036};
1037
1038/*
1039 * We make these constant because no one should touch them,
1040 * but they are used as the default "empty hash", to avoid allocating
1041 * it all the time. These are in a read only section such that if
1042 * anyone does try to modify it, it will cause an exception.
1043 */
1044static const struct hlist_head empty_buckets[1];
1045static const struct ftrace_hash empty_hash = {
1046        .buckets = (struct hlist_head *)empty_buckets,
1047};
1048#define EMPTY_HASH      ((struct ftrace_hash *)&empty_hash)
1049
1050struct ftrace_ops global_ops = {
1051        .func                           = ftrace_stub,
1052        .local_hash.notrace_hash        = EMPTY_HASH,
1053        .local_hash.filter_hash         = EMPTY_HASH,
1054        INIT_OPS_HASH(global_ops)
1055        .flags                          = FTRACE_OPS_FL_RECURSION_SAFE |
1056                                          FTRACE_OPS_FL_INITIALIZED |
1057                                          FTRACE_OPS_FL_PID,
1058};
1059
1060/*
1061 * Used by the stack undwinder to know about dynamic ftrace trampolines.
1062 */
1063struct ftrace_ops *ftrace_ops_trampoline(unsigned long addr)
1064{
1065        struct ftrace_ops *op = NULL;
1066
1067        /*
1068         * Some of the ops may be dynamically allocated,
1069         * they are freed after a synchronize_rcu().
1070         */
1071        preempt_disable_notrace();
1072
1073        do_for_each_ftrace_op(op, ftrace_ops_list) {
1074                /*
1075                 * This is to check for dynamically allocated trampolines.
1076                 * Trampolines that are in kernel text will have
1077                 * core_kernel_text() return true.
1078                 */
1079                if (op->trampoline && op->trampoline_size)
1080                        if (addr >= op->trampoline &&
1081                            addr < op->trampoline + op->trampoline_size) {
1082                                preempt_enable_notrace();
1083                                return op;
1084                        }
1085        } while_for_each_ftrace_op(op);
1086        preempt_enable_notrace();
1087
1088        return NULL;
1089}
1090
1091/*
1092 * This is used by __kernel_text_address() to return true if the
1093 * address is on a dynamically allocated trampoline that would
1094 * not return true for either core_kernel_text() or
1095 * is_module_text_address().
1096 */
1097bool is_ftrace_trampoline(unsigned long addr)
1098{
1099        return ftrace_ops_trampoline(addr) != NULL;
1100}
1101
1102struct ftrace_page {
1103        struct ftrace_page      *next;
1104        struct dyn_ftrace       *records;
1105        int                     index;
1106        int                     size;
1107};
1108
1109#define ENTRY_SIZE sizeof(struct dyn_ftrace)
1110#define ENTRIES_PER_PAGE (PAGE_SIZE / ENTRY_SIZE)
1111
1112/* estimate from running different kernels */
1113#define NR_TO_INIT              10000
1114
1115static struct ftrace_page       *ftrace_pages_start;
1116static struct ftrace_page       *ftrace_pages;
1117
1118static __always_inline unsigned long
1119ftrace_hash_key(struct ftrace_hash *hash, unsigned long ip)
1120{
1121        if (hash->size_bits > 0)
1122                return hash_long(ip, hash->size_bits);
1123
1124        return 0;
1125}
1126
1127/* Only use this function if ftrace_hash_empty() has already been tested */
1128static __always_inline struct ftrace_func_entry *
1129__ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip)
1130{
1131        unsigned long key;
1132        struct ftrace_func_entry *entry;
1133        struct hlist_head *hhd;
1134
1135        key = ftrace_hash_key(hash, ip);
1136        hhd = &hash->buckets[key];
1137
1138        hlist_for_each_entry_rcu_notrace(entry, hhd, hlist) {
1139                if (entry->ip == ip)
1140                        return entry;
1141        }
1142        return NULL;
1143}
1144
1145/**
1146 * ftrace_lookup_ip - Test to see if an ip exists in an ftrace_hash
1147 * @hash: The hash to look at
1148 * @ip: The instruction pointer to test
1149 *
1150 * Search a given @hash to see if a given instruction pointer (@ip)
1151 * exists in it.
1152 *
1153 * Returns the entry that holds the @ip if found. NULL otherwise.
1154 */
1155struct ftrace_func_entry *
1156ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip)
1157{
1158        if (ftrace_hash_empty(hash))
1159                return NULL;
1160
1161        return __ftrace_lookup_ip(hash, ip);
1162}
1163
1164static void __add_hash_entry(struct ftrace_hash *hash,
1165                             struct ftrace_func_entry *entry)
1166{
1167        struct hlist_head *hhd;
1168        unsigned long key;
1169
1170        key = ftrace_hash_key(hash, entry->ip);
1171        hhd = &hash->buckets[key];
1172        hlist_add_head(&entry->hlist, hhd);
1173        hash->count++;
1174}
1175
1176static int add_hash_entry(struct ftrace_hash *hash, unsigned long ip)
1177{
1178        struct ftrace_func_entry *entry;
1179
1180        entry = kmalloc(sizeof(*entry), GFP_KERNEL);
1181        if (!entry)
1182                return -ENOMEM;
1183
1184        entry->ip = ip;
1185        __add_hash_entry(hash, entry);
1186
1187        return 0;
1188}
1189
1190static void
1191free_hash_entry(struct ftrace_hash *hash,
1192                  struct ftrace_func_entry *entry)
1193{
1194        hlist_del(&entry->hlist);
1195        kfree(entry);
1196        hash->count--;
1197}
1198
1199static void
1200remove_hash_entry(struct ftrace_hash *hash,
1201                  struct ftrace_func_entry *entry)
1202{
1203        hlist_del_rcu(&entry->hlist);
1204        hash->count--;
1205}
1206
1207static void ftrace_hash_clear(struct ftrace_hash *hash)
1208{
1209        struct hlist_head *hhd;
1210        struct hlist_node *tn;
1211        struct ftrace_func_entry *entry;
1212        int size = 1 << hash->size_bits;
1213        int i;
1214
1215        if (!hash->count)
1216                return;
1217
1218        for (i = 0; i < size; i++) {
1219                hhd = &hash->buckets[i];
1220                hlist_for_each_entry_safe(entry, tn, hhd, hlist)
1221                        free_hash_entry(hash, entry);
1222        }
1223        FTRACE_WARN_ON(hash->count);
1224}
1225
1226static void free_ftrace_mod(struct ftrace_mod_load *ftrace_mod)
1227{
1228        list_del(&ftrace_mod->list);
1229        kfree(ftrace_mod->module);
1230        kfree(ftrace_mod->func);
1231        kfree(ftrace_mod);
1232}
1233
1234static void clear_ftrace_mod_list(struct list_head *head)
1235{
1236        struct ftrace_mod_load *p, *n;
1237
1238        /* stack tracer isn't supported yet */
1239        if (!head)
1240                return;
1241
1242        mutex_lock(&ftrace_lock);
1243        list_for_each_entry_safe(p, n, head, list)
1244                free_ftrace_mod(p);
1245        mutex_unlock(&ftrace_lock);
1246}
1247
1248static void free_ftrace_hash(struct ftrace_hash *hash)
1249{
1250        if (!hash || hash == EMPTY_HASH)
1251                return;
1252        ftrace_hash_clear(hash);
1253        kfree(hash->buckets);
1254        kfree(hash);
1255}
1256
1257static void __free_ftrace_hash_rcu(struct rcu_head *rcu)
1258{
1259        struct ftrace_hash *hash;
1260
1261        hash = container_of(rcu, struct ftrace_hash, rcu);
1262        free_ftrace_hash(hash);
1263}
1264
1265static void free_ftrace_hash_rcu(struct ftrace_hash *hash)
1266{
1267        if (!hash || hash == EMPTY_HASH)
1268                return;
1269        call_rcu(&hash->rcu, __free_ftrace_hash_rcu);
1270}
1271
1272void ftrace_free_filter(struct ftrace_ops *ops)
1273{
1274        ftrace_ops_init(ops);
1275        free_ftrace_hash(ops->func_hash->filter_hash);
1276        free_ftrace_hash(ops->func_hash->notrace_hash);
1277}
1278
1279static struct ftrace_hash *alloc_ftrace_hash(int size_bits)
1280{
1281        struct ftrace_hash *hash;
1282        int size;
1283
1284        hash = kzalloc(sizeof(*hash), GFP_KERNEL);
1285        if (!hash)
1286                return NULL;
1287
1288        size = 1 << size_bits;
1289        hash->buckets = kcalloc(size, sizeof(*hash->buckets), GFP_KERNEL);
1290
1291        if (!hash->buckets) {
1292                kfree(hash);
1293                return NULL;
1294        }
1295
1296        hash->size_bits = size_bits;
1297
1298        return hash;
1299}
1300
1301
1302static int ftrace_add_mod(struct trace_array *tr,
1303                          const char *func, const char *module,
1304                          int enable)
1305{
1306        struct ftrace_mod_load *ftrace_mod;
1307        struct list_head *mod_head = enable ? &tr->mod_trace : &tr->mod_notrace;
1308
1309        ftrace_mod = kzalloc(sizeof(*ftrace_mod), GFP_KERNEL);
1310        if (!ftrace_mod)
1311                return -ENOMEM;
1312
1313        ftrace_mod->func = kstrdup(func, GFP_KERNEL);
1314        ftrace_mod->module = kstrdup(module, GFP_KERNEL);
1315        ftrace_mod->enable = enable;
1316
1317        if (!ftrace_mod->func || !ftrace_mod->module)
1318                goto out_free;
1319
1320        list_add(&ftrace_mod->list, mod_head);
1321
1322        return 0;
1323
1324 out_free:
1325        free_ftrace_mod(ftrace_mod);
1326
1327        return -ENOMEM;
1328}
1329
1330static struct ftrace_hash *
1331alloc_and_copy_ftrace_hash(int size_bits, struct ftrace_hash *hash)
1332{
1333        struct ftrace_func_entry *entry;
1334        struct ftrace_hash *new_hash;
1335        int size;
1336        int ret;
1337        int i;
1338
1339        new_hash = alloc_ftrace_hash(size_bits);
1340        if (!new_hash)
1341                return NULL;
1342
1343        if (hash)
1344                new_hash->flags = hash->flags;
1345
1346        /* Empty hash? */
1347        if (ftrace_hash_empty(hash))
1348                return new_hash;
1349
1350        size = 1 << hash->size_bits;
1351        for (i = 0; i < size; i++) {
1352                hlist_for_each_entry(entry, &hash->buckets[i], hlist) {
1353                        ret = add_hash_entry(new_hash, entry->ip);
1354                        if (ret < 0)
1355                                goto free_hash;
1356                }
1357        }
1358
1359        FTRACE_WARN_ON(new_hash->count != hash->count);
1360
1361        return new_hash;
1362
1363 free_hash:
1364        free_ftrace_hash(new_hash);
1365        return NULL;
1366}
1367
1368static void
1369ftrace_hash_rec_disable_modify(struct ftrace_ops *ops, int filter_hash);
1370static void
1371ftrace_hash_rec_enable_modify(struct ftrace_ops *ops, int filter_hash);
1372
1373static int ftrace_hash_ipmodify_update(struct ftrace_ops *ops,
1374                                       struct ftrace_hash *new_hash);
1375
1376static struct ftrace_hash *
1377__ftrace_hash_move(struct ftrace_hash *src)
1378{
1379        struct ftrace_func_entry *entry;
1380        struct hlist_node *tn;
1381        struct hlist_head *hhd;
1382        struct ftrace_hash *new_hash;
1383        int size = src->count;
1384        int bits = 0;
1385        int i;
1386
1387        /*
1388         * If the new source is empty, just return the empty_hash.
1389         */
1390        if (ftrace_hash_empty(src))
1391                return EMPTY_HASH;
1392
1393        /*
1394         * Make the hash size about 1/2 the # found
1395         */
1396        for (size /= 2; size; size >>= 1)
1397                bits++;
1398
1399        /* Don't allocate too much */
1400        if (bits > FTRACE_HASH_MAX_BITS)
1401                bits = FTRACE_HASH_MAX_BITS;
1402
1403        new_hash = alloc_ftrace_hash(bits);
1404        if (!new_hash)
1405                return NULL;
1406
1407        new_hash->flags = src->flags;
1408
1409        size = 1 << src->size_bits;
1410        for (i = 0; i < size; i++) {
1411                hhd = &src->buckets[i];
1412                hlist_for_each_entry_safe(entry, tn, hhd, hlist) {
1413                        remove_hash_entry(src, entry);
1414                        __add_hash_entry(new_hash, entry);
1415                }
1416        }
1417
1418        return new_hash;
1419}
1420
1421static int
1422ftrace_hash_move(struct ftrace_ops *ops, int enable,
1423                 struct ftrace_hash **dst, struct ftrace_hash *src)
1424{
1425        struct ftrace_hash *new_hash;
1426        int ret;
1427
1428        /* Reject setting notrace hash on IPMODIFY ftrace_ops */
1429        if (ops->flags & FTRACE_OPS_FL_IPMODIFY && !enable)
1430                return -EINVAL;
1431
1432        new_hash = __ftrace_hash_move(src);
1433        if (!new_hash)
1434                return -ENOMEM;
1435
1436        /* Make sure this can be applied if it is IPMODIFY ftrace_ops */
1437        if (enable) {
1438                /* IPMODIFY should be updated only when filter_hash updating */
1439                ret = ftrace_hash_ipmodify_update(ops, new_hash);
1440                if (ret < 0) {
1441                        free_ftrace_hash(new_hash);
1442                        return ret;
1443                }
1444        }
1445
1446        /*
1447         * Remove the current set, update the hash and add
1448         * them back.
1449         */
1450        ftrace_hash_rec_disable_modify(ops, enable);
1451
1452        rcu_assign_pointer(*dst, new_hash);
1453
1454        ftrace_hash_rec_enable_modify(ops, enable);
1455
1456        return 0;
1457}
1458
1459static bool hash_contains_ip(unsigned long ip,
1460                             struct ftrace_ops_hash *hash)
1461{
1462        /*
1463         * The function record is a match if it exists in the filter
1464         * hash and not in the notrace hash. Note, an emty hash is
1465         * considered a match for the filter hash, but an empty
1466         * notrace hash is considered not in the notrace hash.
1467         */
1468        return (ftrace_hash_empty(hash->filter_hash) ||
1469                __ftrace_lookup_ip(hash->filter_hash, ip)) &&
1470                (ftrace_hash_empty(hash->notrace_hash) ||
1471                 !__ftrace_lookup_ip(hash->notrace_hash, ip));
1472}
1473
1474/*
1475 * Test the hashes for this ops to see if we want to call
1476 * the ops->func or not.
1477 *
1478 * It's a match if the ip is in the ops->filter_hash or
1479 * the filter_hash does not exist or is empty,
1480 *  AND
1481 * the ip is not in the ops->notrace_hash.
1482 *
1483 * This needs to be called with preemption disabled as
1484 * the hashes are freed with call_rcu().
1485 */
1486int
1487ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs)
1488{
1489        struct ftrace_ops_hash hash;
1490        int ret;
1491
1492#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
1493        /*
1494         * There's a small race when adding ops that the ftrace handler
1495         * that wants regs, may be called without them. We can not
1496         * allow that handler to be called if regs is NULL.
1497         */
1498        if (regs == NULL && (ops->flags & FTRACE_OPS_FL_SAVE_REGS))
1499                return 0;
1500#endif
1501
1502        rcu_assign_pointer(hash.filter_hash, ops->func_hash->filter_hash);
1503        rcu_assign_pointer(hash.notrace_hash, ops->func_hash->notrace_hash);
1504
1505        if (hash_contains_ip(ip, &hash))
1506                ret = 1;
1507        else
1508                ret = 0;
1509
1510        return ret;
1511}
1512
1513/*
1514 * This is a double for. Do not use 'break' to break out of the loop,
1515 * you must use a goto.
1516 */
1517#define do_for_each_ftrace_rec(pg, rec)                                 \
1518        for (pg = ftrace_pages_start; pg; pg = pg->next) {              \
1519                int _____i;                                             \
1520                for (_____i = 0; _____i < pg->index; _____i++) {        \
1521                        rec = &pg->records[_____i];
1522
1523#define while_for_each_ftrace_rec()             \
1524                }                               \
1525        }
1526
1527
1528static int ftrace_cmp_recs(const void *a, const void *b)
1529{
1530        const struct dyn_ftrace *key = a;
1531        const struct dyn_ftrace *rec = b;
1532
1533        if (key->flags < rec->ip)
1534                return -1;
1535        if (key->ip >= rec->ip + MCOUNT_INSN_SIZE)
1536                return 1;
1537        return 0;
1538}
1539
1540/**
1541 * ftrace_location_range - return the first address of a traced location
1542 *      if it touches the given ip range
1543 * @start: start of range to search.
1544 * @end: end of range to search (inclusive). @end points to the last byte
1545 *      to check.
1546 *
1547 * Returns rec->ip if the related ftrace location is a least partly within
1548 * the given address range. That is, the first address of the instruction
1549 * that is either a NOP or call to the function tracer. It checks the ftrace
1550 * internal tables to determine if the address belongs or not.
1551 */
1552unsigned long ftrace_location_range(unsigned long start, unsigned long end)
1553{
1554        struct ftrace_page *pg;
1555        struct dyn_ftrace *rec;
1556        struct dyn_ftrace key;
1557
1558        key.ip = start;
1559        key.flags = end;        /* overload flags, as it is unsigned long */
1560
1561        for (pg = ftrace_pages_start; pg; pg = pg->next) {
1562                if (end < pg->records[0].ip ||
1563                    start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE))
1564                        continue;
1565                rec = bsearch(&key, pg->records, pg->index,
1566                              sizeof(struct dyn_ftrace),
1567                              ftrace_cmp_recs);
1568                if (rec)
1569                        return rec->ip;
1570        }
1571
1572        return 0;
1573}
1574
1575/**
1576 * ftrace_location - return true if the ip giving is a traced location
1577 * @ip: the instruction pointer to check
1578 *
1579 * Returns rec->ip if @ip given is a pointer to a ftrace location.
1580 * That is, the instruction that is either a NOP or call to
1581 * the function tracer. It checks the ftrace internal tables to
1582 * determine if the address belongs or not.
1583 */
1584unsigned long ftrace_location(unsigned long ip)
1585{
1586        return ftrace_location_range(ip, ip);
1587}
1588
1589/**
1590 * ftrace_text_reserved - return true if range contains an ftrace location
1591 * @start: start of range to search
1592 * @end: end of range to search (inclusive). @end points to the last byte to check.
1593 *
1594 * Returns 1 if @start and @end contains a ftrace location.
1595 * That is, the instruction that is either a NOP or call to
1596 * the function tracer. It checks the ftrace internal tables to
1597 * determine if the address belongs or not.
1598 */
1599int ftrace_text_reserved(const void *start, const void *end)
1600{
1601        unsigned long ret;
1602
1603        ret = ftrace_location_range((unsigned long)start,
1604                                    (unsigned long)end);
1605
1606        return (int)!!ret;
1607}
1608
1609/* Test if ops registered to this rec needs regs */
1610static bool test_rec_ops_needs_regs(struct dyn_ftrace *rec)
1611{
1612        struct ftrace_ops *ops;
1613        bool keep_regs = false;
1614
1615        for (ops = ftrace_ops_list;
1616             ops != &ftrace_list_end; ops = ops->next) {
1617                /* pass rec in as regs to have non-NULL val */
1618                if (ftrace_ops_test(ops, rec->ip, rec)) {
1619                        if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
1620                                keep_regs = true;
1621                                break;
1622                        }
1623                }
1624        }
1625
1626        return  keep_regs;
1627}
1628
1629static bool __ftrace_hash_rec_update(struct ftrace_ops *ops,
1630                                     int filter_hash,
1631                                     bool inc)
1632{
1633        struct ftrace_hash *hash;
1634        struct ftrace_hash *other_hash;
1635        struct ftrace_page *pg;
1636        struct dyn_ftrace *rec;
1637        bool update = false;
1638        int count = 0;
1639        int all = false;
1640
1641        /* Only update if the ops has been registered */
1642        if (!(ops->flags & FTRACE_OPS_FL_ENABLED))
1643                return false;
1644
1645        /*
1646         * In the filter_hash case:
1647         *   If the count is zero, we update all records.
1648         *   Otherwise we just update the items in the hash.
1649         *
1650         * In the notrace_hash case:
1651         *   We enable the update in the hash.
1652         *   As disabling notrace means enabling the tracing,
1653         *   and enabling notrace means disabling, the inc variable
1654         *   gets inversed.
1655         */
1656        if (filter_hash) {
1657                hash = ops->func_hash->filter_hash;
1658                other_hash = ops->func_hash->notrace_hash;
1659                if (ftrace_hash_empty(hash))
1660                        all = true;
1661        } else {
1662                inc = !inc;
1663                hash = ops->func_hash->notrace_hash;
1664                other_hash = ops->func_hash->filter_hash;
1665                /*
1666                 * If the notrace hash has no items,
1667                 * then there's nothing to do.
1668                 */
1669                if (ftrace_hash_empty(hash))
1670                        return false;
1671        }
1672
1673        do_for_each_ftrace_rec(pg, rec) {
1674                int in_other_hash = 0;
1675                int in_hash = 0;
1676                int match = 0;
1677
1678                if (rec->flags & FTRACE_FL_DISABLED)
1679                        continue;
1680
1681                if (all) {
1682                        /*
1683                         * Only the filter_hash affects all records.
1684                         * Update if the record is not in the notrace hash.
1685                         */
1686                        if (!other_hash || !ftrace_lookup_ip(other_hash, rec->ip))
1687                                match = 1;
1688                } else {
1689                        in_hash = !!ftrace_lookup_ip(hash, rec->ip);
1690                        in_other_hash = !!ftrace_lookup_ip(other_hash, rec->ip);
1691
1692                        /*
1693                         * If filter_hash is set, we want to match all functions
1694                         * that are in the hash but not in the other hash.
1695                         *
1696                         * If filter_hash is not set, then we are decrementing.
1697                         * That means we match anything that is in the hash
1698                         * and also in the other_hash. That is, we need to turn
1699                         * off functions in the other hash because they are disabled
1700                         * by this hash.
1701                         */
1702                        if (filter_hash && in_hash && !in_other_hash)
1703                                match = 1;
1704                        else if (!filter_hash && in_hash &&
1705                                 (in_other_hash || ftrace_hash_empty(other_hash)))
1706                                match = 1;
1707                }
1708                if (!match)
1709                        continue;
1710
1711                if (inc) {
1712                        rec->flags++;
1713                        if (FTRACE_WARN_ON(ftrace_rec_count(rec) == FTRACE_REF_MAX))
1714                                return false;
1715
1716                        /*
1717                         * If there's only a single callback registered to a
1718                         * function, and the ops has a trampoline registered
1719                         * for it, then we can call it directly.
1720                         */
1721                        if (ftrace_rec_count(rec) == 1 && ops->trampoline)
1722                                rec->flags |= FTRACE_FL_TRAMP;
1723                        else
1724                                /*
1725                                 * If we are adding another function callback
1726                                 * to this function, and the previous had a
1727                                 * custom trampoline in use, then we need to go
1728                                 * back to the default trampoline.
1729                                 */
1730                                rec->flags &= ~FTRACE_FL_TRAMP;
1731
1732                        /*
1733                         * If any ops wants regs saved for this function
1734                         * then all ops will get saved regs.
1735                         */
1736                        if (ops->flags & FTRACE_OPS_FL_SAVE_REGS)
1737                                rec->flags |= FTRACE_FL_REGS;
1738                } else {
1739                        if (FTRACE_WARN_ON(ftrace_rec_count(rec) == 0))
1740                                return false;
1741                        rec->flags--;
1742
1743                        /*
1744                         * If the rec had REGS enabled and the ops that is
1745                         * being removed had REGS set, then see if there is
1746                         * still any ops for this record that wants regs.
1747                         * If not, we can stop recording them.
1748                         */
1749                        if (ftrace_rec_count(rec) > 0 &&
1750                            rec->flags & FTRACE_FL_REGS &&
1751                            ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
1752                                if (!test_rec_ops_needs_regs(rec))
1753                                        rec->flags &= ~FTRACE_FL_REGS;
1754                        }
1755
1756                        /*
1757                         * If the rec had TRAMP enabled, then it needs to
1758                         * be cleared. As TRAMP can only be enabled iff
1759                         * there is only a single ops attached to it.
1760                         * In otherwords, always disable it on decrementing.
1761                         * In the future, we may set it if rec count is
1762                         * decremented to one, and the ops that is left
1763                         * has a trampoline.
1764                         */
1765                        rec->flags &= ~FTRACE_FL_TRAMP;
1766
1767                        /*
1768                         * flags will be cleared in ftrace_check_record()
1769                         * if rec count is zero.
1770                         */
1771                }
1772                count++;
1773
1774                /* Must match FTRACE_UPDATE_CALLS in ftrace_modify_all_code() */
1775                update |= ftrace_test_record(rec, 1) != FTRACE_UPDATE_IGNORE;
1776
1777                /* Shortcut, if we handled all records, we are done. */
1778                if (!all && count == hash->count)
1779                        return update;
1780        } while_for_each_ftrace_rec();
1781
1782        return update;
1783}
1784
1785static bool ftrace_hash_rec_disable(struct ftrace_ops *ops,
1786                                    int filter_hash)
1787{
1788        return __ftrace_hash_rec_update(ops, filter_hash, 0);
1789}
1790
1791static bool ftrace_hash_rec_enable(struct ftrace_ops *ops,
1792                                   int filter_hash)
1793{
1794        return __ftrace_hash_rec_update(ops, filter_hash, 1);
1795}
1796
1797static void ftrace_hash_rec_update_modify(struct ftrace_ops *ops,
1798                                          int filter_hash, int inc)
1799{
1800        struct ftrace_ops *op;
1801
1802        __ftrace_hash_rec_update(ops, filter_hash, inc);
1803
1804        if (ops->func_hash != &global_ops.local_hash)
1805                return;
1806
1807        /*
1808         * If the ops shares the global_ops hash, then we need to update
1809         * all ops that are enabled and use this hash.
1810         */
1811        do_for_each_ftrace_op(op, ftrace_ops_list) {
1812                /* Already done */
1813                if (op == ops)
1814                        continue;
1815                if (op->func_hash == &global_ops.local_hash)
1816                        __ftrace_hash_rec_update(op, filter_hash, inc);
1817        } while_for_each_ftrace_op(op);
1818}
1819
1820static void ftrace_hash_rec_disable_modify(struct ftrace_ops *ops,
1821                                           int filter_hash)
1822{
1823        ftrace_hash_rec_update_modify(ops, filter_hash, 0);
1824}
1825
1826static void ftrace_hash_rec_enable_modify(struct ftrace_ops *ops,
1827                                          int filter_hash)
1828{
1829        ftrace_hash_rec_update_modify(ops, filter_hash, 1);
1830}
1831
1832/*
1833 * Try to update IPMODIFY flag on each ftrace_rec. Return 0 if it is OK
1834 * or no-needed to update, -EBUSY if it detects a conflict of the flag
1835 * on a ftrace_rec, and -EINVAL if the new_hash tries to trace all recs.
1836 * Note that old_hash and new_hash has below meanings
1837 *  - If the hash is NULL, it hits all recs (if IPMODIFY is set, this is rejected)
1838 *  - If the hash is EMPTY_HASH, it hits nothing
1839 *  - Anything else hits the recs which match the hash entries.
1840 */
1841static int __ftrace_hash_update_ipmodify(struct ftrace_ops *ops,
1842                                         struct ftrace_hash *old_hash,
1843                                         struct ftrace_hash *new_hash)
1844{
1845        struct ftrace_page *pg;
1846        struct dyn_ftrace *rec, *end = NULL;
1847        int in_old, in_new;
1848
1849        /* Only update if the ops has been registered */
1850        if (!(ops->flags & FTRACE_OPS_FL_ENABLED))
1851                return 0;
1852
1853        if (!(ops->flags & FTRACE_OPS_FL_IPMODIFY))
1854                return 0;
1855
1856        /*
1857         * Since the IPMODIFY is a very address sensitive action, we do not
1858         * allow ftrace_ops to set all functions to new hash.
1859         */
1860        if (!new_hash || !old_hash)
1861                return -EINVAL;
1862
1863        /* Update rec->flags */
1864        do_for_each_ftrace_rec(pg, rec) {
1865
1866                if (rec->flags & FTRACE_FL_DISABLED)
1867                        continue;
1868
1869                /* We need to update only differences of filter_hash */
1870                in_old = !!ftrace_lookup_ip(old_hash, rec->ip);
1871                in_new = !!ftrace_lookup_ip(new_hash, rec->ip);
1872                if (in_old == in_new)
1873                        continue;
1874
1875                if (in_new) {
1876                        /* New entries must ensure no others are using it */
1877                        if (rec->flags & FTRACE_FL_IPMODIFY)
1878                                goto rollback;
1879                        rec->flags |= FTRACE_FL_IPMODIFY;
1880                } else /* Removed entry */
1881                        rec->flags &= ~FTRACE_FL_IPMODIFY;
1882        } while_for_each_ftrace_rec();
1883
1884        return 0;
1885
1886rollback:
1887        end = rec;
1888
1889        /* Roll back what we did above */
1890        do_for_each_ftrace_rec(pg, rec) {
1891
1892                if (rec->flags & FTRACE_FL_DISABLED)
1893                        continue;
1894
1895                if (rec == end)
1896                        goto err_out;
1897
1898                in_old = !!ftrace_lookup_ip(old_hash, rec->ip);
1899                in_new = !!ftrace_lookup_ip(new_hash, rec->ip);
1900                if (in_old == in_new)
1901                        continue;
1902
1903                if (in_new)
1904                        rec->flags &= ~FTRACE_FL_IPMODIFY;
1905                else
1906                        rec->flags |= FTRACE_FL_IPMODIFY;
1907        } while_for_each_ftrace_rec();
1908
1909err_out:
1910        return -EBUSY;
1911}
1912
1913static int ftrace_hash_ipmodify_enable(struct ftrace_ops *ops)
1914{
1915        struct ftrace_hash *hash = ops->func_hash->filter_hash;
1916
1917        if (ftrace_hash_empty(hash))
1918                hash = NULL;
1919
1920        return __ftrace_hash_update_ipmodify(ops, EMPTY_HASH, hash);
1921}
1922
1923/* Disabling always succeeds */
1924static void ftrace_hash_ipmodify_disable(struct ftrace_ops *ops)
1925{
1926        struct ftrace_hash *hash = ops->func_hash->filter_hash;
1927
1928        if (ftrace_hash_empty(hash))
1929                hash = NULL;
1930
1931        __ftrace_hash_update_ipmodify(ops, hash, EMPTY_HASH);
1932}
1933
1934static int ftrace_hash_ipmodify_update(struct ftrace_ops *ops,
1935                                       struct ftrace_hash *new_hash)
1936{
1937        struct ftrace_hash *old_hash = ops->func_hash->filter_hash;
1938
1939        if (ftrace_hash_empty(old_hash))
1940                old_hash = NULL;
1941
1942        if (ftrace_hash_empty(new_hash))
1943                new_hash = NULL;
1944
1945        return __ftrace_hash_update_ipmodify(ops, old_hash, new_hash);
1946}
1947
1948static void print_ip_ins(const char *fmt, const unsigned char *p)
1949{
1950        int i;
1951
1952        printk(KERN_CONT "%s", fmt);
1953
1954        for (i = 0; i < MCOUNT_INSN_SIZE; i++)
1955                printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]);
1956}
1957
1958static struct ftrace_ops *
1959ftrace_find_tramp_ops_any(struct dyn_ftrace *rec);
1960static struct ftrace_ops *
1961ftrace_find_tramp_ops_next(struct dyn_ftrace *rec, struct ftrace_ops *ops);
1962
1963enum ftrace_bug_type ftrace_bug_type;
1964const void *ftrace_expected;
1965
1966static void print_bug_type(void)
1967{
1968        switch (ftrace_bug_type) {
1969        case FTRACE_BUG_UNKNOWN:
1970                break;
1971        case FTRACE_BUG_INIT:
1972                pr_info("Initializing ftrace call sites\n");
1973                break;
1974        case FTRACE_BUG_NOP:
1975                pr_info("Setting ftrace call site to NOP\n");
1976                break;
1977        case FTRACE_BUG_CALL:
1978                pr_info("Setting ftrace call site to call ftrace function\n");
1979                break;
1980        case FTRACE_BUG_UPDATE:
1981                pr_info("Updating ftrace call site to call a different ftrace function\n");
1982                break;
1983        }
1984}
1985
1986/**
1987 * ftrace_bug - report and shutdown function tracer
1988 * @failed: The failed type (EFAULT, EINVAL, EPERM)
1989 * @rec: The record that failed
1990 *
1991 * The arch code that enables or disables the function tracing
1992 * can call ftrace_bug() when it has detected a problem in
1993 * modifying the code. @failed should be one of either:
1994 * EFAULT - if the problem happens on reading the @ip address
1995 * EINVAL - if what is read at @ip is not what was expected
1996 * EPERM - if the problem happens on writing to the @ip address
1997 */
1998void ftrace_bug(int failed, struct dyn_ftrace *rec)
1999{
2000        unsigned long ip = rec ? rec->ip : 0;
2001
2002        switch (failed) {
2003        case -EFAULT:
2004                FTRACE_WARN_ON_ONCE(1);
2005                pr_info("ftrace faulted on modifying ");
2006                print_ip_sym(ip);
2007                break;
2008        case -EINVAL:
2009                FTRACE_WARN_ON_ONCE(1);
2010                pr_info("ftrace failed to modify ");
2011                print_ip_sym(ip);
2012                print_ip_ins(" actual:   ", (unsigned char *)ip);
2013                pr_cont("\n");
2014                if (ftrace_expected) {
2015                        print_ip_ins(" expected: ", ftrace_expected);
2016                        pr_cont("\n");
2017                }
2018                break;
2019        case -EPERM:
2020                FTRACE_WARN_ON_ONCE(1);
2021                pr_info("ftrace faulted on writing ");
2022                print_ip_sym(ip);
2023                break;
2024        default:
2025                FTRACE_WARN_ON_ONCE(1);
2026                pr_info("ftrace faulted on unknown error ");
2027                print_ip_sym(ip);
2028        }
2029        print_bug_type();
2030        if (rec) {
2031                struct ftrace_ops *ops = NULL;
2032
2033                pr_info("ftrace record flags: %lx\n", rec->flags);
2034                pr_cont(" (%ld)%s", ftrace_rec_count(rec),
2035                        rec->flags & FTRACE_FL_REGS ? " R" : "  ");
2036                if (rec->flags & FTRACE_FL_TRAMP_EN) {
2037                        ops = ftrace_find_tramp_ops_any(rec);
2038                        if (ops) {
2039                                do {
2040                                        pr_cont("\ttramp: %pS (%pS)",
2041                                                (void *)ops->trampoline,
2042                                                (void *)ops->func);
2043                                        ops = ftrace_find_tramp_ops_next(rec, ops);
2044                                } while (ops);
2045                        } else
2046                                pr_cont("\ttramp: ERROR!");
2047
2048                }
2049                ip = ftrace_get_addr_curr(rec);
2050                pr_cont("\n expected tramp: %lx\n", ip);
2051        }
2052}
2053
2054static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update)
2055{
2056        unsigned long flag = 0UL;
2057
2058        ftrace_bug_type = FTRACE_BUG_UNKNOWN;
2059
2060        if (rec->flags & FTRACE_FL_DISABLED)
2061                return FTRACE_UPDATE_IGNORE;
2062
2063        /*
2064         * If we are updating calls:
2065         *
2066         *   If the record has a ref count, then we need to enable it
2067         *   because someone is using it.
2068         *
2069         *   Otherwise we make sure its disabled.
2070         *
2071         * If we are disabling calls, then disable all records that
2072         * are enabled.
2073         */
2074        if (enable && ftrace_rec_count(rec))
2075                flag = FTRACE_FL_ENABLED;
2076
2077        /*
2078         * If enabling and the REGS flag does not match the REGS_EN, or
2079         * the TRAMP flag doesn't match the TRAMP_EN, then do not ignore
2080         * this record. Set flags to fail the compare against ENABLED.
2081         */
2082        if (flag) {
2083                if (!(rec->flags & FTRACE_FL_REGS) != 
2084                    !(rec->flags & FTRACE_FL_REGS_EN))
2085                        flag |= FTRACE_FL_REGS;
2086
2087                if (!(rec->flags & FTRACE_FL_TRAMP) != 
2088                    !(rec->flags & FTRACE_FL_TRAMP_EN))
2089                        flag |= FTRACE_FL_TRAMP;
2090        }
2091
2092        /* If the state of this record hasn't changed, then do nothing */
2093        if ((rec->flags & FTRACE_FL_ENABLED) == flag)
2094                return FTRACE_UPDATE_IGNORE;
2095
2096        if (flag) {
2097                /* Save off if rec is being enabled (for return value) */
2098                flag ^= rec->flags & FTRACE_FL_ENABLED;
2099
2100                if (update) {
2101                        rec->flags |= FTRACE_FL_ENABLED;
2102                        if (flag & FTRACE_FL_REGS) {
2103                                if (rec->flags & FTRACE_FL_REGS)
2104                                        rec->flags |= FTRACE_FL_REGS_EN;
2105                                else
2106                                        rec->flags &= ~FTRACE_FL_REGS_EN;
2107                        }
2108                        if (flag & FTRACE_FL_TRAMP) {
2109                                if (rec->flags & FTRACE_FL_TRAMP)
2110                                        rec->flags |= FTRACE_FL_TRAMP_EN;
2111                                else
2112                                        rec->flags &= ~FTRACE_FL_TRAMP_EN;
2113                        }
2114                }
2115
2116                /*
2117                 * If this record is being updated from a nop, then
2118                 *   return UPDATE_MAKE_CALL.
2119                 * Otherwise,
2120                 *   return UPDATE_MODIFY_CALL to tell the caller to convert
2121                 *   from the save regs, to a non-save regs function or
2122                 *   vice versa, or from a trampoline call.
2123                 */
2124                if (flag & FTRACE_FL_ENABLED) {
2125                        ftrace_bug_type = FTRACE_BUG_CALL;
2126                        return FTRACE_UPDATE_MAKE_CALL;
2127                }
2128
2129                ftrace_bug_type = FTRACE_BUG_UPDATE;
2130                return FTRACE_UPDATE_MODIFY_CALL;
2131        }
2132
2133        if (update) {
2134                /* If there's no more users, clear all flags */
2135                if (!ftrace_rec_count(rec))
2136                        rec->flags = 0;
2137                else
2138                        /*
2139                         * Just disable the record, but keep the ops TRAMP
2140                         * and REGS states. The _EN flags must be disabled though.
2141                         */
2142                        rec->flags &= ~(FTRACE_FL_ENABLED | FTRACE_FL_TRAMP_EN |
2143                                        FTRACE_FL_REGS_EN);
2144        }
2145
2146        ftrace_bug_type = FTRACE_BUG_NOP;
2147        return FTRACE_UPDATE_MAKE_NOP;
2148}
2149
2150/**
2151 * ftrace_update_record, set a record that now is tracing or not
2152 * @rec: the record to update
2153 * @enable: set to 1 if the record is tracing, zero to force disable
2154 *
2155 * The records that represent all functions that can be traced need
2156 * to be updated when tracing has been enabled.
2157 */
2158int ftrace_update_record(struct dyn_ftrace *rec, int enable)
2159{
2160        return ftrace_check_record(rec, enable, 1);
2161}
2162
2163/**
2164 * ftrace_test_record, check if the record has been enabled or not
2165 * @rec: the record to test
2166 * @enable: set to 1 to check if enabled, 0 if it is disabled
2167 *
2168 * The arch code may need to test if a record is already set to
2169 * tracing to determine how to modify the function code that it
2170 * represents.
2171 */
2172int ftrace_test_record(struct dyn_ftrace *rec, int enable)
2173{
2174        return ftrace_check_record(rec, enable, 0);
2175}
2176
2177static struct ftrace_ops *
2178ftrace_find_tramp_ops_any(struct dyn_ftrace *rec)
2179{
2180        struct ftrace_ops *op;
2181        unsigned long ip = rec->ip;
2182
2183        do_for_each_ftrace_op(op, ftrace_ops_list) {
2184
2185                if (!op->trampoline)
2186                        continue;
2187
2188                if (hash_contains_ip(ip, op->func_hash))
2189                        return op;
2190        } while_for_each_ftrace_op(op);
2191
2192        return NULL;
2193}
2194
2195static struct ftrace_ops *
2196ftrace_find_tramp_ops_next(struct dyn_ftrace *rec,
2197                           struct ftrace_ops *op)
2198{
2199        unsigned long ip = rec->ip;
2200
2201        while_for_each_ftrace_op(op) {
2202
2203                if (!op->trampoline)
2204                        continue;
2205
2206                if (hash_contains_ip(ip, op->func_hash))
2207                        return op;
2208        } 
2209
2210        return NULL;
2211}
2212
2213static struct ftrace_ops *
2214ftrace_find_tramp_ops_curr(struct dyn_ftrace *rec)
2215{
2216        struct ftrace_ops *op;
2217        unsigned long ip = rec->ip;
2218
2219        /*
2220         * Need to check removed ops first.
2221         * If they are being removed, and this rec has a tramp,
2222         * and this rec is in the ops list, then it would be the
2223         * one with the tramp.
2224         */
2225        if (removed_ops) {
2226                if (hash_contains_ip(ip, &removed_ops->old_hash))
2227                        return removed_ops;
2228        }
2229
2230        /*
2231         * Need to find the current trampoline for a rec.
2232         * Now, a trampoline is only attached to a rec if there
2233         * was a single 'ops' attached to it. But this can be called
2234         * when we are adding another op to the rec or removing the
2235         * current one. Thus, if the op is being added, we can
2236         * ignore it because it hasn't attached itself to the rec
2237         * yet.
2238         *
2239         * If an ops is being modified (hooking to different functions)
2240         * then we don't care about the new functions that are being
2241         * added, just the old ones (that are probably being removed).
2242         *
2243         * If we are adding an ops to a function that already is using
2244         * a trampoline, it needs to be removed (trampolines are only
2245         * for single ops connected), then an ops that is not being
2246         * modified also needs to be checked.
2247         */
2248        do_for_each_ftrace_op(op, ftrace_ops_list) {
2249
2250                if (!op->trampoline)
2251                        continue;
2252
2253                /*
2254                 * If the ops is being added, it hasn't gotten to
2255                 * the point to be removed from this tree yet.
2256                 */
2257                if (op->flags & FTRACE_OPS_FL_ADDING)
2258                        continue;
2259
2260
2261                /*
2262                 * If the ops is being modified and is in the old
2263                 * hash, then it is probably being removed from this
2264                 * function.
2265                 */
2266                if ((op->flags & FTRACE_OPS_FL_MODIFYING) &&
2267                    hash_contains_ip(ip, &op->old_hash))
2268                        return op;
2269                /*
2270                 * If the ops is not being added or modified, and it's
2271                 * in its normal filter hash, then this must be the one
2272                 * we want!
2273                 */
2274                if (!(op->flags & FTRACE_OPS_FL_MODIFYING) &&
2275                    hash_contains_ip(ip, op->func_hash))
2276                        return op;
2277
2278        } while_for_each_ftrace_op(op);
2279
2280        return NULL;
2281}
2282
2283static struct ftrace_ops *
2284ftrace_find_tramp_ops_new(struct dyn_ftrace *rec)
2285{
2286        struct ftrace_ops *op;
2287        unsigned long ip = rec->ip;
2288
2289        do_for_each_ftrace_op(op, ftrace_ops_list) {
2290                /* pass rec in as regs to have non-NULL val */
2291                if (hash_contains_ip(ip, op->func_hash))
2292                        return op;
2293        } while_for_each_ftrace_op(op);
2294
2295        return NULL;
2296}
2297
2298/**
2299 * ftrace_get_addr_new - Get the call address to set to
2300 * @rec:  The ftrace record descriptor
2301 *
2302 * If the record has the FTRACE_FL_REGS set, that means that it
2303 * wants to convert to a callback that saves all regs. If FTRACE_FL_REGS
2304 * is not not set, then it wants to convert to the normal callback.
2305 *
2306 * Returns the address of the trampoline to set to
2307 */
2308unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec)
2309{
2310        struct ftrace_ops *ops;
2311
2312        /* Trampolines take precedence over regs */
2313        if (rec->flags & FTRACE_FL_TRAMP) {
2314                ops = ftrace_find_tramp_ops_new(rec);
2315                if (FTRACE_WARN_ON(!ops || !ops->trampoline)) {
2316                        pr_warn("Bad trampoline accounting at: %p (%pS) (%lx)\n",
2317                                (void *)rec->ip, (void *)rec->ip, rec->flags);
2318                        /* Ftrace is shutting down, return anything */
2319                        return (unsigned long)FTRACE_ADDR;
2320                }
2321                return ops->trampoline;
2322        }
2323
2324        if (rec->flags & FTRACE_FL_REGS)
2325                return (unsigned long)FTRACE_REGS_ADDR;
2326        else
2327                return (unsigned long)FTRACE_ADDR;
2328}
2329
2330/**
2331 * ftrace_get_addr_curr - Get the call address that is already there
2332 * @rec:  The ftrace record descriptor
2333 *
2334 * The FTRACE_FL_REGS_EN is set when the record already points to
2335 * a function that saves all the regs. Basically the '_EN' version
2336 * represents the current state of the function.
2337 *
2338 * Returns the address of the trampoline that is currently being called
2339 */
2340unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec)
2341{
2342        struct ftrace_ops *ops;
2343
2344        /* Trampolines take precedence over regs */
2345        if (rec->flags & FTRACE_FL_TRAMP_EN) {
2346                ops = ftrace_find_tramp_ops_curr(rec);
2347                if (FTRACE_WARN_ON(!ops)) {
2348                        pr_warn("Bad trampoline accounting at: %p (%pS)\n",
2349                                (void *)rec->ip, (void *)rec->ip);
2350                        /* Ftrace is shutting down, return anything */
2351                        return (unsigned long)FTRACE_ADDR;
2352                }
2353                return ops->trampoline;
2354        }
2355
2356        if (rec->flags & FTRACE_FL_REGS_EN)
2357                return (unsigned long)FTRACE_REGS_ADDR;
2358        else
2359                return (unsigned long)FTRACE_ADDR;
2360}
2361
2362static int
2363__ftrace_replace_code(struct dyn_ftrace *rec, int enable)
2364{
2365        unsigned long ftrace_old_addr;
2366        unsigned long ftrace_addr;
2367        int ret;
2368
2369        ftrace_addr = ftrace_get_addr_new(rec);
2370
2371        /* This needs to be done before we call ftrace_update_record */
2372        ftrace_old_addr = ftrace_get_addr_curr(rec);
2373
2374        ret = ftrace_update_record(rec, enable);
2375
2376        ftrace_bug_type = FTRACE_BUG_UNKNOWN;
2377
2378        switch (ret) {
2379        case FTRACE_UPDATE_IGNORE:
2380                return 0;
2381
2382        case FTRACE_UPDATE_MAKE_CALL:
2383                ftrace_bug_type = FTRACE_BUG_CALL;
2384                return ftrace_make_call(rec, ftrace_addr);
2385
2386        case FTRACE_UPDATE_MAKE_NOP:
2387                ftrace_bug_type = FTRACE_BUG_NOP;
2388                return ftrace_make_nop(NULL, rec, ftrace_old_addr);
2389
2390        case FTRACE_UPDATE_MODIFY_CALL:
2391                ftrace_bug_type = FTRACE_BUG_UPDATE;
2392                return ftrace_modify_call(rec, ftrace_old_addr, ftrace_addr);
2393        }
2394
2395        return -1; /* unknown ftrace bug */
2396}
2397
2398void __weak ftrace_replace_code(int mod_flags)
2399{
2400        struct dyn_ftrace *rec;
2401        struct ftrace_page *pg;
2402        int enable = mod_flags & FTRACE_MODIFY_ENABLE_FL;
2403        int schedulable = mod_flags & FTRACE_MODIFY_MAY_SLEEP_FL;
2404        int failed;
2405
2406        if (unlikely(ftrace_disabled))
2407                return;
2408
2409        do_for_each_ftrace_rec(pg, rec) {
2410
2411                if (rec->flags & FTRACE_FL_DISABLED)
2412                        continue;
2413
2414                failed = __ftrace_replace_code(rec, enable);
2415                if (failed) {
2416                        ftrace_bug(failed, rec);
2417                        /* Stop processing */
2418                        return;
2419                }
2420                if (schedulable)
2421                        cond_resched();
2422        } while_for_each_ftrace_rec();
2423}
2424
2425struct ftrace_rec_iter {
2426        struct ftrace_page      *pg;
2427        int                     index;
2428};
2429
2430/**
2431 * ftrace_rec_iter_start, start up iterating over traced functions
2432 *
2433 * Returns an iterator handle that is used to iterate over all
2434 * the records that represent address locations where functions
2435 * are traced.
2436 *
2437 * May return NULL if no records are available.
2438 */
2439struct ftrace_rec_iter *ftrace_rec_iter_start(void)
2440{
2441        /*
2442         * We only use a single iterator.
2443         * Protected by the ftrace_lock mutex.
2444         */
2445        static struct ftrace_rec_iter ftrace_rec_iter;
2446        struct ftrace_rec_iter *iter = &ftrace_rec_iter;
2447
2448        iter->pg = ftrace_pages_start;
2449        iter->index = 0;
2450
2451        /* Could have empty pages */
2452        while (iter->pg && !iter->pg->index)
2453                iter->pg = iter->pg->next;
2454
2455        if (!iter->pg)
2456                return NULL;
2457
2458        return iter;
2459}
2460
2461/**
2462 * ftrace_rec_iter_next, get the next record to process.
2463 * @iter: The handle to the iterator.
2464 *
2465 * Returns the next iterator after the given iterator @iter.
2466 */
2467struct ftrace_rec_iter *ftrace_rec_iter_next(struct ftrace_rec_iter *iter)
2468{
2469        iter->index++;
2470
2471        if (iter->index >= iter->pg->index) {
2472                iter->pg = iter->pg->next;
2473                iter->index = 0;
2474
2475                /* Could have empty pages */
2476                while (iter->pg && !iter->pg->index)
2477                        iter->pg = iter->pg->next;
2478        }
2479
2480        if (!iter->pg)
2481                return NULL;
2482
2483        return iter;
2484}
2485
2486/**
2487 * ftrace_rec_iter_record, get the record at the iterator location
2488 * @iter: The current iterator location
2489 *
2490 * Returns the record that the current @iter is at.
2491 */
2492struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter)
2493{
2494        return &iter->pg->records[iter->index];
2495}
2496
2497static int
2498ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
2499{
2500        int ret;
2501
2502        if (unlikely(ftrace_disabled))
2503                return 0;
2504
2505        ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
2506        if (ret) {
2507                ftrace_bug_type = FTRACE_BUG_INIT;
2508                ftrace_bug(ret, rec);
2509                return 0;
2510        }
2511        return 1;
2512}
2513
2514/*
2515 * archs can override this function if they must do something
2516 * before the modifying code is performed.
2517 */
2518int __weak ftrace_arch_code_modify_prepare(void)
2519{
2520        return 0;
2521}
2522
2523/*
2524 * archs can override this function if they must do something
2525 * after the modifying code is performed.
2526 */
2527int __weak ftrace_arch_code_modify_post_process(void)
2528{
2529        return 0;
2530}
2531
2532void ftrace_modify_all_code(int command)
2533{
2534        int update = command & FTRACE_UPDATE_TRACE_FUNC;
2535        int mod_flags = 0;
2536        int err = 0;
2537
2538        if (command & FTRACE_MAY_SLEEP)
2539                mod_flags = FTRACE_MODIFY_MAY_SLEEP_FL;
2540
2541        /*
2542         * If the ftrace_caller calls a ftrace_ops func directly,
2543         * we need to make sure that it only traces functions it
2544         * expects to trace. When doing the switch of functions,
2545         * we need to update to the ftrace_ops_list_func first
2546         * before the transition between old and new calls are set,
2547         * as the ftrace_ops_list_func will check the ops hashes
2548         * to make sure the ops are having the right functions
2549         * traced.
2550         */
2551        if (update) {
2552                err = ftrace_update_ftrace_func(ftrace_ops_list_func);
2553                if (FTRACE_WARN_ON(err))
2554                        return;
2555        }
2556
2557        if (command & FTRACE_UPDATE_CALLS)
2558                ftrace_replace_code(mod_flags | FTRACE_MODIFY_ENABLE_FL);
2559        else if (command & FTRACE_DISABLE_CALLS)
2560                ftrace_replace_code(mod_flags);
2561
2562        if (update && ftrace_trace_function != ftrace_ops_list_func) {
2563                function_trace_op = set_function_trace_op;
2564                smp_wmb();
2565                /* If irqs are disabled, we are in stop machine */
2566                if (!irqs_disabled())
2567                        smp_call_function(ftrace_sync_ipi, NULL, 1);
2568                err = ftrace_update_ftrace_func(ftrace_trace_function);
2569                if (FTRACE_WARN_ON(err))
2570                        return;
2571        }
2572
2573        if (command & FTRACE_START_FUNC_RET)
2574                err = ftrace_enable_ftrace_graph_caller();
2575        else if (command & FTRACE_STOP_FUNC_RET)
2576                err = ftrace_disable_ftrace_graph_caller();
2577        FTRACE_WARN_ON(err);
2578}
2579
2580static int __ftrace_modify_code(void *data)
2581{
2582        int *command = data;
2583
2584        ftrace_modify_all_code(*command);
2585
2586        return 0;
2587}
2588
2589/**
2590 * ftrace_run_stop_machine, go back to the stop machine method
2591 * @command: The command to tell ftrace what to do
2592 *
2593 * If an arch needs to fall back to the stop machine method, the
2594 * it can call this function.
2595 */
2596void ftrace_run_stop_machine(int command)
2597{
2598        stop_machine(__ftrace_modify_code, &command, NULL);
2599}
2600
2601/**
2602 * arch_ftrace_update_code, modify the code to trace or not trace
2603 * @command: The command that needs to be done
2604 *
2605 * Archs can override this function if it does not need to
2606 * run stop_machine() to modify code.
2607 */
2608void __weak arch_ftrace_update_code(int command)
2609{
2610        ftrace_run_stop_machine(command);
2611}
2612
2613static void ftrace_run_update_code(int command)
2614{
2615        int ret;
2616
2617        ret = ftrace_arch_code_modify_prepare();
2618        FTRACE_WARN_ON(ret);
2619        if (ret)
2620                return;
2621
2622        /*
2623         * By default we use stop_machine() to modify the code.
2624         * But archs can do what ever they want as long as it
2625         * is safe. The stop_machine() is the safest, but also
2626         * produces the most overhead.
2627         */
2628        arch_ftrace_update_code(command);
2629
2630        ret = ftrace_arch_code_modify_post_process();
2631        FTRACE_WARN_ON(ret);
2632}
2633
2634static void ftrace_run_modify_code(struct ftrace_ops *ops, int command,
2635                                   struct ftrace_ops_hash *old_hash)
2636{
2637        ops->flags |= FTRACE_OPS_FL_MODIFYING;
2638        ops->old_hash.filter_hash = old_hash->filter_hash;
2639        ops->old_hash.notrace_hash = old_hash->notrace_hash;
2640        ftrace_run_update_code(command);
2641        ops->old_hash.filter_hash = NULL;
2642        ops->old_hash.notrace_hash = NULL;
2643        ops->flags &= ~FTRACE_OPS_FL_MODIFYING;
2644}
2645
2646static ftrace_func_t saved_ftrace_func;
2647static int ftrace_start_up;
2648
2649void __weak arch_ftrace_trampoline_free(struct ftrace_ops *ops)
2650{
2651}
2652
2653static void ftrace_startup_enable(int command)
2654{
2655        if (saved_ftrace_func != ftrace_trace_function) {
2656                saved_ftrace_func = ftrace_trace_function;
2657                command |= FTRACE_UPDATE_TRACE_FUNC;
2658        }
2659
2660        if (!command || !ftrace_enabled)
2661                return;
2662
2663        ftrace_run_update_code(command);
2664}
2665
2666static void ftrace_startup_all(int command)
2667{
2668        update_all_ops = true;
2669        ftrace_startup_enable(command);
2670        update_all_ops = false;
2671}
2672
2673int ftrace_startup(struct ftrace_ops *ops, int command)
2674{
2675        int ret;
2676
2677        if (unlikely(ftrace_disabled))
2678                return -ENODEV;
2679
2680        ret = __register_ftrace_function(ops);
2681        if (ret)
2682                return ret;
2683
2684        ftrace_start_up++;
2685
2686        /*
2687         * Note that ftrace probes uses this to start up
2688         * and modify functions it will probe. But we still
2689         * set the ADDING flag for modification, as probes
2690         * do not have trampolines. If they add them in the
2691         * future, then the probes will need to distinguish
2692         * between adding and updating probes.
2693         */
2694        ops->flags |= FTRACE_OPS_FL_ENABLED | FTRACE_OPS_FL_ADDING;
2695
2696        ret = ftrace_hash_ipmodify_enable(ops);
2697        if (ret < 0) {
2698                /* Rollback registration process */
2699                __unregister_ftrace_function(ops);
2700                ftrace_start_up--;
2701                ops->flags &= ~FTRACE_OPS_FL_ENABLED;
2702                return ret;
2703        }
2704
2705        if (ftrace_hash_rec_enable(ops, 1))
2706                command |= FTRACE_UPDATE_CALLS;
2707
2708        ftrace_startup_enable(command);
2709
2710        ops->flags &= ~FTRACE_OPS_FL_ADDING;
2711
2712        return 0;
2713}
2714
2715int ftrace_shutdown(struct ftrace_ops *ops, int command)
2716{
2717        int ret;
2718
2719        if (unlikely(ftrace_disabled))
2720                return -ENODEV;
2721
2722        ret = __unregister_ftrace_function(ops);
2723        if (ret)
2724                return ret;
2725
2726        ftrace_start_up--;
2727        /*
2728         * Just warn in case of unbalance, no need to kill ftrace, it's not
2729         * critical but the ftrace_call callers may be never nopped again after
2730         * further ftrace uses.
2731         */
2732        WARN_ON_ONCE(ftrace_start_up < 0);
2733
2734        /* Disabling ipmodify never fails */
2735        ftrace_hash_ipmodify_disable(ops);
2736
2737        if (ftrace_hash_rec_disable(ops, 1))
2738                command |= FTRACE_UPDATE_CALLS;
2739
2740        ops->flags &= ~FTRACE_OPS_FL_ENABLED;
2741
2742        if (saved_ftrace_func != ftrace_trace_function) {
2743                saved_ftrace_func = ftrace_trace_function;
2744                command |= FTRACE_UPDATE_TRACE_FUNC;
2745        }
2746
2747        if (!command || !ftrace_enabled) {
2748                /*
2749                 * If these are dynamic or per_cpu ops, they still
2750                 * need their data freed. Since, function tracing is
2751                 * not currently active, we can just free them
2752                 * without synchronizing all CPUs.
2753                 */
2754                if (ops->flags & FTRACE_OPS_FL_DYNAMIC)
2755                        goto free_ops;
2756
2757                return 0;
2758        }
2759
2760        /*
2761         * If the ops uses a trampoline, then it needs to be
2762         * tested first on update.
2763         */
2764        ops->flags |= FTRACE_OPS_FL_REMOVING;
2765        removed_ops = ops;
2766
2767        /* The trampoline logic checks the old hashes */
2768        ops->old_hash.filter_hash = ops->func_hash->filter_hash;
2769        ops->old_hash.notrace_hash = ops->func_hash->notrace_hash;
2770
2771        ftrace_run_update_code(command);
2772
2773        /*
2774         * If there's no more ops registered with ftrace, run a
2775         * sanity check to make sure all rec flags are cleared.
2776         */
2777        if (rcu_dereference_protected(ftrace_ops_list,
2778                        lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) {
2779                struct ftrace_page *pg;
2780                struct dyn_ftrace *rec;
2781
2782                do_for_each_ftrace_rec(pg, rec) {
2783                        if (FTRACE_WARN_ON_ONCE(rec->flags & ~FTRACE_FL_DISABLED))
2784                                pr_warn("  %pS flags:%lx\n",
2785                                        (void *)rec->ip, rec->flags);
2786                } while_for_each_ftrace_rec();
2787        }
2788
2789        ops->old_hash.filter_hash = NULL;
2790        ops->old_hash.notrace_hash = NULL;
2791
2792        removed_ops = NULL;
2793        ops->flags &= ~FTRACE_OPS_FL_REMOVING;
2794
2795        /*
2796         * Dynamic ops may be freed, we must make sure that all
2797         * callers are done before leaving this function.
2798         * The same goes for freeing the per_cpu data of the per_cpu
2799         * ops.
2800         */
2801        if (ops->flags & FTRACE_OPS_FL_DYNAMIC) {
2802                /*
2803                 * We need to do a hard force of sched synchronization.
2804                 * This is because we use preempt_disable() to do RCU, but
2805                 * the function tracers can be called where RCU is not watching
2806                 * (like before user_exit()). We can not rely on the RCU
2807                 * infrastructure to do the synchronization, thus we must do it
2808                 * ourselves.
2809                 */
2810                schedule_on_each_cpu(ftrace_sync);
2811
2812                /*
2813                 * When the kernel is preeptive, tasks can be preempted
2814                 * while on a ftrace trampoline. Just scheduling a task on
2815                 * a CPU is not good enough to flush them. Calling
2816                 * synchornize_rcu_tasks() will wait for those tasks to
2817                 * execute and either schedule voluntarily or enter user space.
2818                 */
2819                if (IS_ENABLED(CONFIG_PREEMPT))
2820                        synchronize_rcu_tasks();
2821
2822 free_ops:
2823                arch_ftrace_trampoline_free(ops);
2824        }
2825
2826        return 0;
2827}
2828
2829static void ftrace_startup_sysctl(void)
2830{
2831        int command;
2832
2833        if (unlikely(ftrace_disabled))
2834                return;
2835
2836        /* Force update next time */
2837        saved_ftrace_func = NULL;
2838        /* ftrace_start_up is true if we want ftrace running */
2839        if (ftrace_start_up) {
2840                command = FTRACE_UPDATE_CALLS;
2841                if (ftrace_graph_active)
2842                        command |= FTRACE_START_FUNC_RET;
2843                ftrace_startup_enable(command);
2844        }
2845}
2846
2847static void ftrace_shutdown_sysctl(void)
2848{
2849        int command;
2850
2851        if (unlikely(ftrace_disabled))
2852                return;
2853
2854        /* ftrace_start_up is true if ftrace is running */
2855        if (ftrace_start_up) {
2856                command = FTRACE_DISABLE_CALLS;
2857                if (ftrace_graph_active)
2858                        command |= FTRACE_STOP_FUNC_RET;
2859                ftrace_run_update_code(command);
2860        }
2861}
2862
2863static u64              ftrace_update_time;
2864unsigned long           ftrace_update_tot_cnt;
2865
2866static inline int ops_traces_mod(struct ftrace_ops *ops)
2867{
2868        /*
2869         * Filter_hash being empty will default to trace module.
2870         * But notrace hash requires a test of individual module functions.
2871         */
2872        return ftrace_hash_empty(ops->func_hash->filter_hash) &&
2873                ftrace_hash_empty(ops->func_hash->notrace_hash);
2874}
2875
2876/*
2877 * Check if the current ops references the record.
2878 *
2879 * If the ops traces all functions, then it was already accounted for.
2880 * If the ops does not trace the current record function, skip it.
2881 * If the ops ignores the function via notrace filter, skip it.
2882 */
2883static inline bool
2884ops_references_rec(struct ftrace_ops *ops, struct dyn_ftrace *rec)
2885{
2886        /* If ops isn't enabled, ignore it */
2887        if (!(ops->flags & FTRACE_OPS_FL_ENABLED))
2888                return false;
2889
2890        /* If ops traces all then it includes this function */
2891        if (ops_traces_mod(ops))
2892                return true;
2893
2894        /* The function must be in the filter */
2895        if (!ftrace_hash_empty(ops->func_hash->filter_hash) &&
2896            !__ftrace_lookup_ip(ops->func_hash->filter_hash, rec->ip))
2897                return false;
2898
2899        /* If in notrace hash, we ignore it too */
2900        if (ftrace_lookup_ip(ops->func_hash->notrace_hash, rec->ip))
2901                return false;
2902
2903        return true;
2904}
2905
2906static int ftrace_update_code(struct module *mod, struct ftrace_page *new_pgs)
2907{
2908        struct ftrace_page *pg;
2909        struct dyn_ftrace *p;
2910        u64 start, stop;
2911        unsigned long update_cnt = 0;
2912        unsigned long rec_flags = 0;
2913        int i;
2914
2915        start = ftrace_now(raw_smp_processor_id());
2916
2917        /*
2918         * When a module is loaded, this function is called to convert
2919         * the calls to mcount in its text to nops, and also to create
2920         * an entry in the ftrace data. Now, if ftrace is activated
2921         * after this call, but before the module sets its text to
2922         * read-only, the modification of enabling ftrace can fail if
2923         * the read-only is done while ftrace is converting the calls.
2924         * To prevent this, the module's records are set as disabled
2925         * and will be enabled after the call to set the module's text
2926         * to read-only.
2927         */
2928        if (mod)
2929                rec_flags |= FTRACE_FL_DISABLED;
2930
2931        for (pg = new_pgs; pg; pg = pg->next) {
2932
2933                for (i = 0; i < pg->index; i++) {
2934
2935                        /* If something went wrong, bail without enabling anything */
2936                        if (unlikely(ftrace_disabled))
2937                                return -1;
2938
2939                        p = &pg->records[i];
2940                        p->flags = rec_flags;
2941
2942#ifndef CC_USING_NOP_MCOUNT
2943                        /*
2944                         * Do the initial record conversion from mcount jump
2945                         * to the NOP instructions.
2946                         */
2947                        if (!ftrace_code_disable(mod, p))
2948                                break;
2949#endif
2950
2951                        update_cnt++;
2952                }
2953        }
2954
2955        stop = ftrace_now(raw_smp_processor_id());
2956        ftrace_update_time = stop - start;
2957        ftrace_update_tot_cnt += update_cnt;
2958
2959        return 0;
2960}
2961
2962static int ftrace_allocate_records(struct ftrace_page *pg, int count)
2963{
2964        int order;
2965        int cnt;
2966
2967        if (WARN_ON(!count))
2968                return -EINVAL;
2969
2970        order = get_count_order(DIV_ROUND_UP(count, ENTRIES_PER_PAGE));
2971
2972        /*
2973         * We want to fill as much as possible. No more than a page
2974         * may be empty.
2975         */
2976        while ((PAGE_SIZE << order) / ENTRY_SIZE >= count + ENTRIES_PER_PAGE)
2977                order--;
2978
2979 again:
2980        pg->records = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
2981
2982        if (!pg->records) {
2983                /* if we can't allocate this size, try something smaller */
2984                if (!order)
2985                        return -ENOMEM;
2986                order >>= 1;
2987                goto again;
2988        }
2989
2990        cnt = (PAGE_SIZE << order) / ENTRY_SIZE;
2991        pg->size = cnt;
2992
2993        if (cnt > count)
2994                cnt = count;
2995
2996        return cnt;
2997}
2998
2999static struct ftrace_page *
3000ftrace_allocate_pages(unsigned long num_to_init)
3001{
3002        struct ftrace_page *start_pg;
3003        struct ftrace_page *pg;
3004        int order;
3005        int cnt;
3006
3007        if (!num_to_init)
3008                return NULL;
3009
3010        start_pg = pg = kzalloc(sizeof(*pg), GFP_KERNEL);
3011        if (!pg)
3012                return NULL;
3013
3014        /*
3015         * Try to allocate as much as possible in one continues
3016         * location that fills in all of the space. We want to
3017         * waste as little space as possible.
3018         */
3019        for (;;) {
3020                cnt = ftrace_allocate_records(pg, num_to_init);
3021                if (cnt < 0)
3022                        goto free_pages;
3023
3024                num_to_init -= cnt;
3025                if (!num_to_init)
3026                        break;
3027
3028                pg->next = kzalloc(sizeof(*pg), GFP_KERNEL);
3029                if (!pg->next)
3030                        goto free_pages;
3031
3032                pg = pg->next;
3033        }
3034
3035        return start_pg;
3036
3037 free_pages:
3038        pg = start_pg;
3039        while (pg) {
3040                order = get_count_order(pg->size / ENTRIES_PER_PAGE);
3041                free_pages((unsigned long)pg->records, order);
3042                start_pg = pg->next;
3043                kfree(pg);
3044                pg = start_pg;
3045        }
3046        pr_info("ftrace: FAILED to allocate memory for functions\n");
3047        return NULL;
3048}
3049
3050#define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */
3051
3052struct ftrace_iterator {
3053        loff_t                          pos;
3054        loff_t                          func_pos;
3055        loff_t                          mod_pos;
3056        struct ftrace_page              *pg;
3057        struct dyn_ftrace               *func;
3058        struct ftrace_func_probe        *probe;
3059        struct ftrace_func_entry        *probe_entry;
3060        struct trace_parser             parser;
3061        struct ftrace_hash              *hash;
3062        struct ftrace_ops               *ops;
3063        struct trace_array              *tr;
3064        struct list_head                *mod_list;
3065        int                             pidx;
3066        int                             idx;
3067        unsigned                        flags;
3068};
3069
3070static void *
3071t_probe_next(struct seq_file *m, loff_t *pos)
3072{
3073        struct ftrace_iterator *iter = m->private;
3074        struct trace_array *tr = iter->ops->private;
3075        struct list_head *func_probes;
3076        struct ftrace_hash *hash;
3077        struct list_head *next;
3078        struct hlist_node *hnd = NULL;
3079        struct hlist_head *hhd;
3080        int size;
3081
3082        (*pos)++;
3083        iter->pos = *pos;
3084
3085        if (!tr)
3086                return NULL;
3087
3088        func_probes = &tr->func_probes;
3089        if (list_empty(func_probes))
3090                return NULL;
3091
3092        if (!iter->probe) {
3093                next = func_probes->next;
3094                iter->probe = list_entry(next, struct ftrace_func_probe, list);
3095        }
3096
3097        if (iter->probe_entry)
3098                hnd = &iter->probe_entry->hlist;
3099
3100        hash = iter->probe->ops.func_hash->filter_hash;
3101        size = 1 << hash->size_bits;
3102
3103 retry:
3104        if (iter->pidx >= size) {
3105                if (iter->probe->list.next == func_probes)
3106                        return NULL;
3107                next = iter->probe->list.next;
3108                iter->probe = list_entry(next, struct ftrace_func_probe, list);
3109                hash = iter->probe->ops.func_hash->filter_hash;
3110                size = 1 << hash->size_bits;
3111                iter->pidx = 0;
3112        }
3113
3114        hhd = &hash->buckets[iter->pidx];
3115
3116        if (hlist_empty(hhd)) {
3117                iter->pidx++;
3118                hnd = NULL;
3119                goto retry;
3120        }
3121
3122        if (!hnd)
3123                hnd = hhd->first;
3124        else {
3125                hnd = hnd->next;
3126                if (!hnd) {
3127                        iter->pidx++;
3128                        goto retry;
3129                }
3130        }
3131
3132        if (WARN_ON_ONCE(!hnd))
3133                return NULL;
3134
3135        iter->probe_entry = hlist_entry(hnd, struct ftrace_func_entry, hlist);
3136
3137        return iter;
3138}
3139
3140static void *t_probe_start(struct seq_file *m, loff_t *pos)
3141{
3142        struct ftrace_iterator *iter = m->private;
3143        void *p = NULL;
3144        loff_t l;
3145
3146        if (!(iter->flags & FTRACE_ITER_DO_PROBES))
3147                return NULL;
3148
3149        if (iter->mod_pos > *pos)
3150                return NULL;
3151
3152        iter->probe = NULL;
3153        iter->probe_entry = NULL;
3154        iter->pidx = 0;
3155        for (l = 0; l <= (*pos - iter->mod_pos); ) {
3156                p = t_probe_next(m, &l);
3157                if (!p)
3158                        break;
3159        }
3160        if (!p)
3161                return NULL;
3162
3163        /* Only set this if we have an item */
3164        iter->flags |= FTRACE_ITER_PROBE;
3165
3166        return iter;
3167}
3168
3169static int
3170t_probe_show(struct seq_file *m, struct ftrace_iterator *iter)
3171{
3172        struct ftrace_func_entry *probe_entry;
3173        struct ftrace_probe_ops *probe_ops;
3174        struct ftrace_func_probe *probe;
3175
3176        probe = iter->probe;
3177        probe_entry = iter->probe_entry;
3178
3179        if (WARN_ON_ONCE(!probe || !probe_entry))
3180                return -EIO;
3181
3182        probe_ops = probe->probe_ops;
3183
3184        if (probe_ops->print)
3185                return probe_ops->print(m, probe_entry->ip, probe_ops, probe->data);
3186
3187        seq_printf(m, "%ps:%ps\n", (void *)probe_entry->ip,
3188                   (void *)probe_ops->func);
3189
3190        return 0;
3191}
3192
3193static void *
3194t_mod_next(struct seq_file *m, loff_t *pos)
3195{
3196        struct ftrace_iterator *iter = m->private;
3197        struct trace_array *tr = iter->tr;
3198
3199        (*pos)++;
3200        iter->pos = *pos;
3201
3202        iter->mod_list = iter->mod_list->next;
3203
3204        if (iter->mod_list == &tr->mod_trace ||
3205            iter->mod_list == &tr->mod_notrace) {
3206                iter->flags &= ~FTRACE_ITER_MOD;
3207                return NULL;
3208        }
3209
3210        iter->mod_pos = *pos;
3211
3212        return iter;
3213}
3214
3215static void *t_mod_start(struct seq_file *m, loff_t *pos)
3216{
3217        struct ftrace_iterator *iter = m->private;
3218        void *p = NULL;
3219        loff_t l;
3220
3221        if (iter->func_pos > *pos)
3222                return NULL;
3223
3224        iter->mod_pos = iter->func_pos;
3225
3226        /* probes are only available if tr is set */
3227        if (!iter->tr)
3228                return NULL;
3229
3230        for (l = 0; l <= (*pos - iter->func_pos); ) {
3231                p = t_mod_next(m, &l);
3232                if (!p)
3233                        break;
3234        }
3235        if (!p) {
3236                iter->flags &= ~FTRACE_ITER_MOD;
3237                return t_probe_start(m, pos);
3238        }
3239
3240        /* Only set this if we have an item */
3241        iter->flags |= FTRACE_ITER_MOD;
3242
3243        return iter;
3244}
3245
3246static int
3247t_mod_show(struct seq_file *m, struct ftrace_iterator *iter)
3248{
3249        struct ftrace_mod_load *ftrace_mod;
3250        struct trace_array *tr = iter->tr;
3251
3252        if (WARN_ON_ONCE(!iter->mod_list) ||
3253                         iter->mod_list == &tr->mod_trace ||
3254                         iter->mod_list == &tr->mod_notrace)
3255                return -EIO;
3256
3257        ftrace_mod = list_entry(iter->mod_list, struct ftrace_mod_load, list);
3258
3259        if (ftrace_mod->func)
3260                seq_printf(m, "%s", ftrace_mod->func);
3261        else
3262                seq_putc(m, '*');
3263
3264        seq_printf(m, ":mod:%s\n", ftrace_mod->module);
3265
3266        return 0;
3267}
3268
3269static void *
3270t_func_next(struct seq_file *m, loff_t *pos)
3271{
3272        struct ftrace_iterator *iter = m->private;
3273        struct dyn_ftrace *rec = NULL;
3274
3275        (*pos)++;
3276
3277 retry:
3278        if (iter->idx >= iter->pg->index) {
3279                if (iter->pg->next) {
3280                        iter->pg = iter->pg->next;
3281                        iter->idx = 0;
3282                        goto retry;
3283                }
3284        } else {
3285                rec = &iter->pg->records[iter->idx++];
3286                if (((iter->flags & (FTRACE_ITER_FILTER | FTRACE_ITER_NOTRACE)) &&
3287                     !ftrace_lookup_ip(iter->hash, rec->ip)) ||
3288
3289                    ((iter->flags & FTRACE_ITER_ENABLED) &&
3290                     !(rec->flags & FTRACE_FL_ENABLED))) {
3291
3292                        rec = NULL;
3293                        goto retry;
3294                }
3295        }
3296
3297        if (!rec)
3298                return NULL;
3299
3300        iter->pos = iter->func_pos = *pos;
3301        iter->func = rec;
3302
3303        return iter;
3304}
3305
3306static void *
3307t_next(struct seq_file *m, void *v, loff_t *pos)
3308{
3309        struct ftrace_iterator *iter = m->private;
3310        loff_t l = *pos; /* t_probe_start() must use original pos */
3311        void *ret;
3312
3313        if (unlikely(ftrace_disabled))
3314                return NULL;
3315
3316        if (iter->flags & FTRACE_ITER_PROBE)
3317                return t_probe_next(m, pos);
3318
3319        if (iter->flags & FTRACE_ITER_MOD)
3320                return t_mod_next(m, pos);
3321
3322        if (iter->flags & FTRACE_ITER_PRINTALL) {
3323                /* next must increment pos, and t_probe_start does not */
3324                (*pos)++;
3325                return t_mod_start(m, &l);
3326        }
3327
3328        ret = t_func_next(m, pos);
3329
3330        if (!ret)
3331                return t_mod_start(m, &l);
3332
3333        return ret;
3334}
3335
3336static void reset_iter_read(struct ftrace_iterator *iter)
3337{
3338        iter->pos = 0;
3339        iter->func_pos = 0;
3340        iter->flags &= ~(FTRACE_ITER_PRINTALL | FTRACE_ITER_PROBE | FTRACE_ITER_MOD);
3341}
3342
3343static void *t_start(struct seq_file *m, loff_t *pos)
3344{
3345        struct ftrace_iterator *iter = m->private;
3346        void *p = NULL;
3347        loff_t l;
3348
3349        mutex_lock(&ftrace_lock);
3350
3351        if (unlikely(ftrace_disabled))
3352                return NULL;
3353
3354        /*
3355         * If an lseek was done, then reset and start from beginning.
3356         */
3357        if (*pos < iter->pos)
3358                reset_iter_read(iter);
3359
3360        /*
3361         * For set_ftrace_filter reading, if we have the filter
3362         * off, we can short cut and just print out that all
3363         * functions are enabled.
3364         */
3365        if ((iter->flags & (FTRACE_ITER_FILTER | FTRACE_ITER_NOTRACE)) &&
3366            ftrace_hash_empty(iter->hash)) {
3367                iter->func_pos = 1; /* Account for the message */
3368                if (*pos > 0)
3369                        return t_mod_start(m, pos);
3370                iter->flags |= FTRACE_ITER_PRINTALL;
3371                /* reset in case of seek/pread */
3372                iter->flags &= ~FTRACE_ITER_PROBE;
3373                return iter;
3374        }
3375
3376        if (iter->flags & FTRACE_ITER_MOD)
3377                return t_mod_start(m, pos);
3378
3379        /*
3380         * Unfortunately, we need to restart at ftrace_pages_start
3381         * every time we let go of the ftrace_mutex. This is because
3382         * those pointers can change without the lock.
3383         */
3384        iter->pg = ftrace_pages_start;
3385        iter->idx = 0;
3386        for (l = 0; l <= *pos; ) {
3387                p = t_func_next(m, &l);
3388                if (!p)
3389                        break;
3390        }
3391
3392        if (!p)
3393                return t_mod_start(m, pos);
3394
3395        return iter;
3396}
3397
3398static void t_stop(struct seq_file *m, void *p)
3399{
3400        mutex_unlock(&ftrace_lock);
3401}
3402
3403void * __weak
3404arch_ftrace_trampoline_func(struct ftrace_ops *ops, struct dyn_ftrace *rec)
3405{
3406        return NULL;
3407}
3408
3409static void add_trampoline_func(struct seq_file *m, struct ftrace_ops *ops,
3410                                struct dyn_ftrace *rec)
3411{
3412        void *ptr;
3413
3414        ptr = arch_ftrace_trampoline_func(ops, rec);
3415        if (ptr)
3416                seq_printf(m, " ->%pS", ptr);
3417}
3418
3419static int t_show(struct seq_file *m, void *v)
3420{
3421        struct ftrace_iterator *iter = m->private;
3422        struct dyn_ftrace *rec;
3423
3424        if (iter->flags & FTRACE_ITER_PROBE)
3425                return t_probe_show(m, iter);
3426
3427        if (iter->flags & FTRACE_ITER_MOD)
3428                return t_mod_show(m, iter);
3429
3430        if (iter->flags & FTRACE_ITER_PRINTALL) {
3431                if (iter->flags & FTRACE_ITER_NOTRACE)
3432                        seq_puts(m, "#### no functions disabled ####\n");
3433                else
3434                        seq_puts(m, "#### all functions enabled ####\n");
3435                return 0;
3436        }
3437
3438        rec = iter->func;
3439
3440        if (!rec)
3441                return 0;
3442
3443        seq_printf(m, "%ps", (void *)rec->ip);
3444        if (iter->flags & FTRACE_ITER_ENABLED) {
3445                struct ftrace_ops *ops;
3446
3447                seq_printf(m, " (%ld)%s%s",
3448                           ftrace_rec_count(rec),
3449                           rec->flags & FTRACE_FL_REGS ? " R" : "  ",
3450                           rec->flags & FTRACE_FL_IPMODIFY ? " I" : "  ");
3451                if (rec->flags & FTRACE_FL_TRAMP_EN) {
3452                        ops = ftrace_find_tramp_ops_any(rec);
3453                        if (ops) {
3454                                do {
3455                                        seq_printf(m, "\ttramp: %pS (%pS)",
3456                                                   (void *)ops->trampoline,
3457                                                   (void *)ops->func);
3458                                        add_trampoline_func(m, ops, rec);
3459                                        ops = ftrace_find_tramp_ops_next(rec, ops);
3460                                } while (ops);
3461                        } else
3462                                seq_puts(m, "\ttramp: ERROR!");
3463                } else {
3464                        add_trampoline_func(m, NULL, rec);
3465                }
3466        }       
3467
3468        seq_putc(m, '\n');
3469
3470        return 0;
3471}
3472
3473static const struct seq_operations show_ftrace_seq_ops = {
3474        .start = t_start,
3475        .next = t_next,
3476        .stop = t_stop,
3477        .show = t_show,
3478};
3479
3480static int
3481ftrace_avail_open(struct inode *inode, struct file *file)
3482{
3483        struct ftrace_iterator *iter;
3484
3485        if (unlikely(ftrace_disabled))
3486                return -ENODEV;
3487
3488        iter = __seq_open_private(file, &show_ftrace_seq_ops, sizeof(*iter));
3489        if (!iter)
3490                return -ENOMEM;
3491
3492        iter->pg = ftrace_pages_start;
3493        iter->ops = &global_ops;
3494
3495        return 0;
3496}
3497
3498static int
3499ftrace_enabled_open(struct inode *inode, struct file *file)
3500{
3501        struct ftrace_iterator *iter;
3502
3503        iter = __seq_open_private(file, &show_ftrace_seq_ops, sizeof(*iter));
3504        if (!iter)
3505                return -ENOMEM;
3506
3507        iter->pg = ftrace_pages_start;
3508        iter->flags = FTRACE_ITER_ENABLED;
3509        iter->ops = &global_ops;
3510
3511        return 0;
3512}
3513
3514/**
3515 * ftrace_regex_open - initialize function tracer filter files
3516 * @ops: The ftrace_ops that hold the hash filters
3517 * @flag: The type of filter to process
3518 * @inode: The inode, usually passed in to your open routine
3519 * @file: The file, usually passed in to your open routine
3520 *
3521 * ftrace_regex_open() initializes the filter files for the
3522 * @ops. Depending on @flag it may process the filter hash or
3523 * the notrace hash of @ops. With this called from the open
3524 * routine, you can use ftrace_filter_write() for the write
3525 * routine if @flag has FTRACE_ITER_FILTER set, or
3526 * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set.
3527 * tracing_lseek() should be used as the lseek routine, and
3528 * release must call ftrace_regex_release().
3529 */
3530int
3531ftrace_regex_open(struct ftrace_ops *ops, int flag,
3532                  struct inode *inode, struct file *file)
3533{
3534        struct ftrace_iterator *iter;
3535        struct ftrace_hash *hash;
3536        struct list_head *mod_head;
3537        struct trace_array *tr = ops->private;
3538        int ret = 0;
3539
3540        ftrace_ops_init(ops);
3541
3542        if (unlikely(ftrace_disabled))
3543                return -ENODEV;
3544
3545        iter = kzalloc(sizeof(*iter), GFP_KERNEL);
3546        if (!iter)
3547                return -ENOMEM;
3548
3549        if (trace_parser_get_init(&iter->parser, FTRACE_BUFF_MAX)) {
3550                kfree(iter);
3551                return -ENOMEM;
3552        }
3553
3554        iter->ops = ops;
3555        iter->flags = flag;
3556        iter->tr = tr;
3557
3558        mutex_lock(&ops->func_hash->regex_lock);
3559
3560        if (flag & FTRACE_ITER_NOTRACE) {
3561                hash = ops->func_hash->notrace_hash;
3562                mod_head = tr ? &tr->mod_notrace : NULL;
3563        } else {
3564                hash = ops->func_hash->filter_hash;
3565                mod_head = tr ? &tr->mod_trace : NULL;
3566        }
3567
3568        iter->mod_list = mod_head;
3569
3570        if (file->f_mode & FMODE_WRITE) {
3571                const int size_bits = FTRACE_HASH_DEFAULT_BITS;
3572
3573                if (file->f_flags & O_TRUNC) {
3574                        iter->hash = alloc_ftrace_hash(size_bits);
3575                        clear_ftrace_mod_list(mod_head);
3576                } else {
3577                        iter->hash = alloc_and_copy_ftrace_hash(size_bits, hash);
3578                }
3579
3580                if (!iter->hash) {
3581                        trace_parser_put(&iter->parser);
3582                        kfree(iter);
3583                        ret = -ENOMEM;
3584                        goto out_unlock;
3585                }
3586        } else
3587                iter->hash = hash;
3588
3589        if (file->f_mode & FMODE_READ) {
3590                iter->pg = ftrace_pages_start;
3591
3592                ret = seq_open(file, &show_ftrace_seq_ops);
3593                if (!ret) {
3594                        struct seq_file *m = file->private_data;
3595                        m->private = iter;
3596                } else {
3597                        /* Failed */
3598                        free_ftrace_hash(iter->hash);
3599                        trace_parser_put(&iter->parser);
3600                        kfree(iter);
3601                }
3602        } else
3603                file->private_data = iter;
3604
3605 out_unlock:
3606        mutex_unlock(&ops->func_hash->regex_lock);
3607
3608        return ret;
3609}
3610
3611static int
3612ftrace_filter_open(struct inode *inode, struct file *file)
3613{
3614        struct ftrace_ops *ops = inode->i_private;
3615
3616        return ftrace_regex_open(ops,
3617                        FTRACE_ITER_FILTER | FTRACE_ITER_DO_PROBES,
3618                        inode, file);
3619}
3620
3621static int
3622ftrace_notrace_open(struct inode *inode, struct file *file)
3623{
3624        struct ftrace_ops *ops = inode->i_private;
3625
3626        return ftrace_regex_open(ops, FTRACE_ITER_NOTRACE,
3627                                 inode, file);
3628}
3629
3630/* Type for quick search ftrace basic regexes (globs) from filter_parse_regex */
3631struct ftrace_glob {
3632        char *search;
3633        unsigned len;
3634        int type;
3635};
3636
3637/*
3638 * If symbols in an architecture don't correspond exactly to the user-visible
3639 * name of what they represent, it is possible to define this function to
3640 * perform the necessary adjustments.
3641*/
3642char * __weak arch_ftrace_match_adjust(char *str, const char *search)
3643{
3644        return str;
3645}
3646
3647static int ftrace_match(char *str, struct ftrace_glob *g)
3648{
3649        int matched = 0;
3650        int slen;
3651
3652        str = arch_ftrace_match_adjust(str, g->search);
3653
3654        switch (g->type) {
3655        case MATCH_FULL:
3656                if (strcmp(str, g->search) == 0)
3657                        matched = 1;
3658                break;
3659        case MATCH_FRONT_ONLY:
3660                if (strncmp(str, g->search, g->len) == 0)
3661                        matched = 1;
3662                break;
3663        case MATCH_MIDDLE_ONLY:
3664                if (strstr(str, g->search))
3665                        matched = 1;
3666                break;
3667        case MATCH_END_ONLY:
3668                slen = strlen(str);
3669                if (slen >= g->len &&
3670                    memcmp(str + slen - g->len, g->search, g->len) == 0)
3671                        matched = 1;
3672                break;
3673        case MATCH_GLOB:
3674                if (glob_match(g->search, str))
3675                        matched = 1;
3676                break;
3677        }
3678
3679        return matched;
3680}
3681
3682static int
3683enter_record(struct ftrace_hash *hash, struct dyn_ftrace *rec, int clear_filter)
3684{
3685        struct ftrace_func_entry *entry;
3686        int ret = 0;
3687
3688        entry = ftrace_lookup_ip(hash, rec->ip);
3689        if (clear_filter) {
3690                /* Do nothing if it doesn't exist */
3691                if (!entry)
3692                        return 0;
3693
3694                free_hash_entry(hash, entry);
3695        } else {
3696                /* Do nothing if it exists */
3697                if (entry)
3698                        return 0;
3699
3700                ret = add_hash_entry(hash, rec->ip);
3701        }
3702        return ret;
3703}
3704
3705static int
3706add_rec_by_index(struct ftrace_hash *hash, struct ftrace_glob *func_g,
3707                 int clear_filter)
3708{
3709        long index = simple_strtoul(func_g->search, NULL, 0);
3710        struct ftrace_page *pg;
3711        struct dyn_ftrace *rec;
3712
3713        /* The index starts at 1 */
3714        if (--index < 0)
3715                return 0;
3716
3717        do_for_each_ftrace_rec(pg, rec) {
3718                if (pg->index <= index) {
3719                        index -= pg->index;
3720                        /* this is a double loop, break goes to the next page */
3721                        break;
3722                }
3723                rec = &pg->records[index];
3724                enter_record(hash, rec, clear_filter);
3725                return 1;
3726        } while_for_each_ftrace_rec();
3727        return 0;
3728}
3729
3730static int
3731ftrace_match_record(struct dyn_ftrace *rec, struct ftrace_glob *func_g,
3732                struct ftrace_glob *mod_g, int exclude_mod)
3733{
3734        char str[KSYM_SYMBOL_LEN];
3735        char *modname;
3736
3737        kallsyms_lookup(rec->ip, NULL, NULL, &modname, str);
3738
3739        if (mod_g) {
3740                int mod_matches = (modname) ? ftrace_match(modname, mod_g) : 0;
3741
3742                /* blank module name to match all modules */
3743                if (!mod_g->len) {
3744                        /* blank module globbing: modname xor exclude_mod */
3745                        if (!exclude_mod != !modname)
3746                                goto func_match;
3747                        return 0;
3748                }
3749
3750                /*
3751                 * exclude_mod is set to trace everything but the given
3752                 * module. If it is set and the module matches, then
3753                 * return 0. If it is not set, and the module doesn't match
3754                 * also return 0. Otherwise, check the function to see if
3755                 * that matches.
3756                 */
3757                if (!mod_matches == !exclude_mod)
3758                        return 0;
3759func_match:
3760                /* blank search means to match all funcs in the mod */
3761                if (!func_g->len)
3762                        return 1;
3763        }
3764
3765        return ftrace_match(str, func_g);
3766}
3767
3768static int
3769match_records(struct ftrace_hash *hash, char *func, int len, char *mod)
3770{
3771        struct ftrace_page *pg;
3772        struct dyn_ftrace *rec;
3773        struct ftrace_glob func_g = { .type = MATCH_FULL };
3774        struct ftrace_glob mod_g = { .type = MATCH_FULL };
3775        struct ftrace_glob *mod_match = (mod) ? &mod_g : NULL;
3776        int exclude_mod = 0;
3777        int found = 0;
3778        int ret;
3779        int clear_filter = 0;
3780
3781        if (func) {
3782                func_g.type = filter_parse_regex(func, len, &func_g.search,
3783                                                 &clear_filter);
3784                func_g.len = strlen(func_g.search);
3785        }
3786
3787        if (mod) {
3788                mod_g.type = filter_parse_regex(mod, strlen(mod),
3789                                &mod_g.search, &exclude_mod);
3790                mod_g.len = strlen(mod_g.search);
3791        }
3792
3793        mutex_lock(&ftrace_lock);
3794
3795        if (unlikely(ftrace_disabled))
3796                goto out_unlock;
3797
3798        if (func_g.type == MATCH_INDEX) {
3799                found = add_rec_by_index(hash, &func_g, clear_filter);
3800                goto out_unlock;
3801        }
3802
3803        do_for_each_ftrace_rec(pg, rec) {
3804
3805                if (rec->flags & FTRACE_FL_DISABLED)
3806                        continue;
3807
3808                if (ftrace_match_record(rec, &func_g, mod_match, exclude_mod)) {
3809                        ret = enter_record(hash, rec, clear_filter);
3810                        if (ret < 0) {
3811                                found = ret;
3812                                goto out_unlock;
3813                        }
3814                        found = 1;
3815                }
3816        } while_for_each_ftrace_rec();
3817 out_unlock:
3818        mutex_unlock(&ftrace_lock);
3819
3820        return found;
3821}
3822
3823static int
3824ftrace_match_records(struct ftrace_hash *hash, char *buff, int len)
3825{
3826        return match_records(hash, buff, len, NULL);
3827}
3828
3829static void ftrace_ops_update_code(struct ftrace_ops *ops,
3830                                   struct ftrace_ops_hash *old_hash)
3831{
3832        struct ftrace_ops *op;
3833
3834        if (!ftrace_enabled)
3835                return;
3836
3837        if (ops->flags & FTRACE_OPS_FL_ENABLED) {
3838                ftrace_run_modify_code(ops, FTRACE_UPDATE_CALLS, old_hash);
3839                return;
3840        }
3841
3842        /*
3843         * If this is the shared global_ops filter, then we need to
3844         * check if there is another ops that shares it, is enabled.
3845         * If so, we still need to run the modify code.
3846         */
3847        if (ops->func_hash != &global_ops.local_hash)
3848                return;
3849
3850        do_for_each_ftrace_op(op, ftrace_ops_list) {
3851                if (op->func_hash == &global_ops.local_hash &&
3852                    op->flags & FTRACE_OPS_FL_ENABLED) {
3853                        ftrace_run_modify_code(op, FTRACE_UPDATE_CALLS, old_hash);
3854                        /* Only need to do this once */
3855                        return;
3856                }
3857        } while_for_each_ftrace_op(op);
3858}
3859
3860static int ftrace_hash_move_and_update_ops(struct ftrace_ops *ops,
3861                                           struct ftrace_hash **orig_hash,
3862                                           struct ftrace_hash *hash,
3863                                           int enable)
3864{
3865        struct ftrace_ops_hash old_hash_ops;
3866        struct ftrace_hash *old_hash;
3867        int ret;
3868
3869        old_hash = *orig_hash;
3870        old_hash_ops.filter_hash = ops->func_hash->filter_hash;
3871        old_hash_ops.notrace_hash = ops->func_hash->notrace_hash;
3872        ret = ftrace_hash_move(ops, enable, orig_hash, hash);
3873        if (!ret) {
3874                ftrace_ops_update_code(ops, &old_hash_ops);
3875                free_ftrace_hash_rcu(old_hash);
3876        }
3877        return ret;
3878}
3879
3880static bool module_exists(const char *module)
3881{
3882        /* All modules have the symbol __this_module */
3883        const char this_mod[] = "__this_module";
3884        char modname[MAX_PARAM_PREFIX_LEN + sizeof(this_mod) + 2];
3885        unsigned long val;
3886        int n;
3887
3888        n = snprintf(modname, sizeof(modname), "%s:%s", module, this_mod);
3889
3890        if (n > sizeof(modname) - 1)
3891                return false;
3892
3893        val = module_kallsyms_lookup_name(modname);
3894        return val != 0;
3895}
3896
3897static int cache_mod(struct trace_array *tr,
3898                     const char *func, char *module, int enable)
3899{
3900        struct ftrace_mod_load *ftrace_mod, *n;
3901        struct list_head *head = enable ? &tr->mod_trace : &tr->mod_notrace;
3902        int ret;
3903
3904        mutex_lock(&ftrace_lock);
3905
3906        /* We do not cache inverse filters */
3907        if (func[0] == '!') {
3908                func++;
3909                ret = -EINVAL;
3910
3911                /* Look to remove this hash */
3912                list_for_each_entry_safe(ftrace_mod, n, head, list) {
3913                        if (strcmp(ftrace_mod->module, module) != 0)
3914                                continue;
3915
3916                        /* no func matches all */
3917                        if (strcmp(func, "*") == 0 ||
3918                            (ftrace_mod->func &&
3919                             strcmp(ftrace_mod->func, func) == 0)) {
3920                                ret = 0;
3921                                free_ftrace_mod(ftrace_mod);
3922                                continue;
3923                        }
3924                }
3925                goto out;
3926        }
3927
3928        ret = -EINVAL;
3929        /* We only care about modules that have not been loaded yet */
3930        if (module_exists(module))
3931                goto out;
3932
3933        /* Save this string off, and execute it when the module is loaded */
3934        ret = ftrace_add_mod(tr, func, module, enable);
3935 out:
3936        mutex_unlock(&ftrace_lock);
3937
3938        return ret;
3939}
3940
3941static int
3942ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
3943                 int reset, int enable);
3944
3945#ifdef CONFIG_MODULES
3946static void process_mod_list(struct list_head *head, struct ftrace_ops *ops,
3947                             char *mod, bool enable)
3948{
3949        struct ftrace_mod_load *ftrace_mod, *n;
3950        struct ftrace_hash **orig_hash, *new_hash;
3951        LIST_HEAD(process_mods);
3952        char *func;
3953        int ret;
3954
3955        mutex_lock(&ops->func_hash->regex_lock);
3956
3957        if (enable)
3958                orig_hash = &ops->func_hash->filter_hash;
3959        else
3960                orig_hash = &ops->func_hash->notrace_hash;
3961
3962        new_hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS,
3963                                              *orig_hash);
3964        if (!new_hash)
3965                goto out; /* warn? */
3966
3967        mutex_lock(&ftrace_lock);
3968
3969        list_for_each_entry_safe(ftrace_mod, n, head, list) {
3970
3971                if (strcmp(ftrace_mod->module, mod) != 0)
3972                        continue;
3973
3974                if (ftrace_mod->func)
3975                        func = kstrdup(ftrace_mod->func, GFP_KERNEL);
3976                else
3977                        func = kstrdup("*", GFP_KERNEL);
3978
3979                if (!func) /* warn? */
3980                        continue;
3981
3982                list_del(&ftrace_mod->list);
3983                list_add(&ftrace_mod->list, &process_mods);
3984
3985                /* Use the newly allocated func, as it may be "*" */
3986                kfree(ftrace_mod->func);
3987                ftrace_mod->func = func;
3988        }
3989
3990        mutex_unlock(&ftrace_lock);
3991
3992        list_for_each_entry_safe(ftrace_mod, n, &process_mods, list) {
3993
3994                func = ftrace_mod->func;
3995
3996                /* Grabs ftrace_lock, which is why we have this extra step */
3997                match_records(new_hash, func, strlen(func), mod);
3998                free_ftrace_mod(ftrace_mod);
3999        }
4000
4001        if (enable && list_empty(head))
4002                new_hash->flags &= ~FTRACE_HASH_FL_MOD;
4003
4004        mutex_lock(&ftrace_lock);
4005
4006        ret = ftrace_hash_move_and_update_ops(ops, orig_hash,
4007                                              new_hash, enable);
4008        mutex_unlock(&ftrace_lock);
4009
4010 out:
4011        mutex_unlock(&ops->func_hash->regex_lock);
4012
4013        free_ftrace_hash(new_hash);
4014}
4015
4016static void process_cached_mods(const char *mod_name)
4017{
4018        struct trace_array *tr;
4019        char *mod;
4020
4021        mod = kstrdup(mod_name, GFP_KERNEL);
4022        if (!mod)
4023                return;
4024
4025        mutex_lock(&trace_types_lock);
4026        list_for_each_entry(tr, &ftrace_trace_arrays, list) {
4027                if (!list_empty(&tr->mod_trace))
4028                        process_mod_list(&tr->mod_trace, tr->ops, mod, true);
4029                if (!list_empty(&tr->mod_notrace))
4030                        process_mod_list(&tr->mod_notrace, tr->ops, mod, false);
4031        }
4032        mutex_unlock(&trace_types_lock);
4033
4034        kfree(mod);
4035}
4036#endif
4037
4038/*
4039 * We register the module command as a template to show others how
4040 * to register the a command as well.
4041 */
4042
4043static int
4044ftrace_mod_callback(struct trace_array *tr, struct ftrace_hash *hash,
4045                    char *func_orig, char *cmd, char *module, int enable)
4046{
4047        char *func;
4048        int ret;
4049
4050        /* match_records() modifies func, and we need the original */
4051        func = kstrdup(func_orig, GFP_KERNEL);
4052        if (!func)
4053                return -ENOMEM;
4054
4055        /*
4056         * cmd == 'mod' because we only registered this func
4057         * for the 'mod' ftrace_func_command.
4058         * But if you register one func with multiple commands,
4059         * you can tell which command was used by the cmd
4060         * parameter.
4061         */
4062        ret = match_records(hash, func, strlen(func), module);
4063        kfree(func);
4064
4065        if (!ret)
4066                return cache_mod(tr, func_orig, module, enable);
4067        if (ret < 0)
4068                return ret;
4069        return 0;
4070}
4071
4072static struct ftrace_func_command ftrace_mod_cmd = {
4073        .name                   = "mod",
4074        .func                   = ftrace_mod_callback,
4075};
4076
4077static int __init ftrace_mod_cmd_init(void)
4078{
4079        return register_ftrace_command(&ftrace_mod_cmd);
4080}
4081core_initcall(ftrace_mod_cmd_init);
4082
4083static void function_trace_probe_call(unsigned long ip, unsigned long parent_ip,
4084                                      struct ftrace_ops *op, struct pt_regs *pt_regs)
4085{
4086        struct ftrace_probe_ops *probe_ops;
4087        struct ftrace_func_probe *probe;
4088
4089        probe = container_of(op, struct ftrace_func_probe, ops);
4090        probe_ops = probe->probe_ops;
4091
4092        /*
4093         * Disable preemption for these calls to prevent a RCU grace
4094         * period. This syncs the hash iteration and freeing of items
4095         * on the hash. rcu_read_lock is too dangerous here.
4096         */
4097        preempt_disable_notrace();
4098        probe_ops->func(ip, parent_ip, probe->tr, probe_ops, probe->data);
4099        preempt_enable_notrace();
4100}
4101
4102struct ftrace_func_map {
4103        struct ftrace_func_entry        entry;
4104        void                            *data;
4105};
4106
4107struct ftrace_func_mapper {
4108        struct ftrace_hash              hash;
4109};
4110
4111/**
4112 * allocate_ftrace_func_mapper - allocate a new ftrace_func_mapper
4113 *
4114 * Returns a ftrace_func_mapper descriptor that can be used to map ips to data.
4115 */
4116struct ftrace_func_mapper *allocate_ftrace_func_mapper(void)
4117{
4118        struct ftrace_hash *hash;
4119
4120        /*
4121         * The mapper is simply a ftrace_hash, but since the entries
4122         * in the hash are not ftrace_func_entry type, we define it
4123         * as a separate structure.
4124         */
4125        hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS);
4126        return (struct ftrace_func_mapper *)hash;
4127}
4128
4129/**
4130 * ftrace_func_mapper_find_ip - Find some data mapped to an ip
4131 * @mapper: The mapper that has the ip maps
4132 * @ip: the instruction pointer to find the data for
4133 *
4134 * Returns the data mapped to @ip if found otherwise NULL. The return
4135 * is actually the address of the mapper data pointer. The address is
4136 * returned for use cases where the data is no bigger than a long, and
4137 * the user can use the data pointer as its data instead of having to
4138 * allocate more memory for the reference.
4139 */
4140void **ftrace_func_mapper_find_ip(struct ftrace_func_mapper *mapper,
4141                                  unsigned long ip)
4142{
4143        struct ftrace_func_entry *entry;
4144        struct ftrace_func_map *map;
4145
4146        entry = ftrace_lookup_ip(&mapper->hash, ip);
4147        if (!entry)
4148                return NULL;
4149
4150        map = (struct ftrace_func_map *)entry;
4151        return &map->data;
4152}
4153
4154/**
4155 * ftrace_func_mapper_add_ip - Map some data to an ip
4156 * @mapper: The mapper that has the ip maps
4157 * @ip: The instruction pointer address to map @data to
4158 * @data: The data to map to @ip
4159 *
4160 * Returns 0 on succes otherwise an error.
4161 */
4162int ftrace_func_mapper_add_ip(struct ftrace_func_mapper *mapper,
4163                              unsigned long ip, void *data)
4164{
4165        struct ftrace_func_entry *entry;
4166        struct ftrace_func_map *map;
4167
4168        entry = ftrace_lookup_ip(&mapper->hash, ip);
4169        if (entry)
4170                return -EBUSY;
4171
4172        map = kmalloc(sizeof(*map), GFP_KERNEL);
4173        if (!map)
4174                return -ENOMEM;
4175
4176        map->entry.ip = ip;
4177        map->data = data;
4178
4179        __add_hash_entry(&mapper->hash, &map->entry);
4180
4181        return 0;
4182}
4183
4184/**
4185 * ftrace_func_mapper_remove_ip - Remove an ip from the mapping
4186 * @mapper: The mapper that has the ip maps
4187 * @ip: The instruction pointer address to remove the data from
4188 *
4189 * Returns the data if it is found, otherwise NULL.
4190 * Note, if the data pointer is used as the data itself, (see 
4191 * ftrace_func_mapper_find_ip(), then the return value may be meaningless,
4192 * if the data pointer was set to zero.
4193 */
4194void *ftrace_func_mapper_remove_ip(struct ftrace_func_mapper *mapper,
4195                                   unsigned long ip)
4196{
4197        struct ftrace_func_entry *entry;
4198        struct ftrace_func_map *map;
4199        void *data;
4200
4201        entry = ftrace_lookup_ip(&mapper->hash, ip);
4202        if (!entry)
4203                return NULL;
4204
4205        map = (struct ftrace_func_map *)entry;
4206        data = map->data;
4207
4208        remove_hash_entry(&mapper->hash, entry);
4209        kfree(entry);
4210
4211        return data;
4212}
4213
4214/**
4215 * free_ftrace_func_mapper - free a mapping of ips and data
4216 * @mapper: The mapper that has the ip maps
4217 * @free_func: A function to be called on each data item.
4218 *
4219 * This is used to free the function mapper. The @free_func is optional
4220 * and can be used if the data needs to be freed as well.
4221 */
4222void free_ftrace_func_mapper(struct ftrace_func_mapper *mapper,
4223                             ftrace_mapper_func free_func)
4224{
4225        struct ftrace_func_entry *entry;
4226        struct ftrace_func_map *map;
4227        struct hlist_head *hhd;
4228        int size = 1 << mapper->hash.size_bits;
4229        int i;
4230
4231        if (free_func && mapper->hash.count) {
4232                for (i = 0; i < size; i++) {
4233                        hhd = &mapper->hash.buckets[i];
4234                        hlist_for_each_entry(entry, hhd, hlist) {
4235                                map = (struct ftrace_func_map *)entry;
4236                                free_func(map);
4237                        }
4238                }
4239        }
4240        free_ftrace_hash(&mapper->hash);
4241}
4242
4243static void release_probe(struct ftrace_func_probe *probe)
4244{
4245        struct ftrace_probe_ops *probe_ops;
4246
4247        mutex_lock(&ftrace_lock);
4248
4249        WARN_ON(probe->ref <= 0);
4250
4251        /* Subtract the ref that was used to protect this instance */
4252        probe->ref--;
4253
4254        if (!probe->ref) {
4255                probe_ops = probe->probe_ops;
4256                /*
4257                 * Sending zero as ip tells probe_ops to free
4258                 * the probe->data itself
4259                 */
4260                if (probe_ops->free)
4261                        probe_ops->free(probe_ops, probe->tr, 0, probe->data);
4262                list_del(&probe->list);
4263                kfree(probe);
4264        }
4265        mutex_unlock(&ftrace_lock);
4266}
4267
4268static void acquire_probe_locked(struct ftrace_func_probe *probe)
4269{
4270        /*
4271         * Add one ref to keep it from being freed when releasing the
4272         * ftrace_lock mutex.
4273         */
4274        probe->ref++;
4275}
4276
4277int
4278register_ftrace_function_probe(char *glob, struct trace_array *tr,
4279                               struct ftrace_probe_ops *probe_ops,
4280                               void *data)
4281{
4282        struct ftrace_func_entry *entry;
4283        struct ftrace_func_probe *probe;
4284        struct ftrace_hash **orig_hash;
4285        struct ftrace_hash *old_hash;
4286        struct ftrace_hash *hash;
4287        int count = 0;
4288        int size;
4289        int ret;
4290        int i;
4291
4292        if (WARN_ON(!tr))
4293                return -EINVAL;
4294
4295        /* We do not support '!' for function probes */
4296        if (WARN_ON(glob[0] == '!'))
4297                return -EINVAL;
4298
4299
4300        mutex_lock(&ftrace_lock);
4301        /* Check if the probe_ops is already registered */
4302        list_for_each_entry(probe, &tr->func_probes, list) {
4303                if (probe->probe_ops == probe_ops)
4304                        break;
4305        }
4306        if (&probe->list == &tr->func_probes) {
4307                probe = kzalloc(sizeof(*probe), GFP_KERNEL);
4308                if (!probe) {
4309                        mutex_unlock(&ftrace_lock);
4310                        return -ENOMEM;
4311                }
4312                probe->probe_ops = probe_ops;
4313                probe->ops.func = function_trace_probe_call;
4314                probe->tr = tr;
4315                ftrace_ops_init(&probe->ops);
4316                list_add(&probe->list, &tr->func_probes);
4317        }
4318
4319        acquire_probe_locked(probe);
4320
4321        mutex_unlock(&ftrace_lock);
4322
4323        mutex_lock(&probe->ops.func_hash->regex_lock);
4324
4325        orig_hash = &probe->ops.func_hash->filter_hash;
4326        old_hash = *orig_hash;
4327        hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, old_hash);
4328
4329        ret = ftrace_match_records(hash, glob, strlen(glob));
4330
4331        /* Nothing found? */
4332        if (!ret)
4333                ret = -EINVAL;
4334
4335        if (ret < 0)
4336                goto out;
4337
4338        size = 1 << hash->size_bits;
4339        for (i = 0; i < size; i++) {
4340                hlist_for_each_entry(entry, &hash->buckets[i], hlist) {
4341                        if (ftrace_lookup_ip(old_hash, entry->ip))
4342                                continue;
4343                        /*
4344                         * The caller might want to do something special
4345                         * for each function we find. We call the callback
4346                         * to give the caller an opportunity to do so.
4347                         */
4348                        if (probe_ops->init) {
4349                                ret = probe_ops->init(probe_ops, tr,
4350                                                      entry->ip, data,
4351                                                      &probe->data);
4352                                if (ret < 0) {
4353                                        if (probe_ops->free && count)
4354                                                probe_ops->free(probe_ops, tr,
4355                                                                0, probe->data);
4356                                        probe->data = NULL;
4357                                        goto out;
4358                                }
4359                        }
4360                        count++;
4361                }
4362        }
4363
4364        mutex_lock(&ftrace_lock);
4365
4366        if (!count) {
4367                /* Nothing was added? */
4368                ret = -EINVAL;
4369                goto out_unlock;
4370        }
4371
4372        ret = ftrace_hash_move_and_update_ops(&probe->ops, orig_hash,
4373                                              hash, 1);
4374        if (ret < 0)
4375                goto err_unlock;
4376
4377        /* One ref for each new function traced */
4378        probe->ref += count;
4379
4380        if (!(probe->ops.flags & FTRACE_OPS_FL_ENABLED))
4381                ret = ftrace_startup(&probe->ops, 0);
4382
4383 out_unlock:
4384        mutex_unlock(&ftrace_lock);
4385
4386        if (!ret)
4387                ret = count;
4388 out:
4389        mutex_unlock(&probe->ops.func_hash->regex_lock);
4390        free_ftrace_hash(hash);
4391
4392        release_probe(probe);
4393
4394        return ret;
4395
4396 err_unlock:
4397        if (!probe_ops->free || !count)
4398                goto out_unlock;
4399
4400        /* Failed to do the move, need to call the free functions */
4401        for (i = 0; i < size; i++) {
4402                hlist_for_each_entry(entry, &hash->buckets[i], hlist) {
4403                        if (ftrace_lookup_ip(old_hash, entry->ip))
4404                                continue;
4405                        probe_ops->free(probe_ops, tr, entry->ip, probe->data);
4406                }
4407        }
4408        goto out_unlock;
4409}
4410
4411int
4412unregister_ftrace_function_probe_func(char *glob, struct trace_array *tr,
4413                                      struct ftrace_probe_ops *probe_ops)
4414{
4415        struct ftrace_ops_hash old_hash_ops;
4416        struct ftrace_func_entry *entry;
4417        struct ftrace_func_probe *probe;
4418        struct ftrace_glob func_g;
4419        struct ftrace_hash **orig_hash;
4420        struct ftrace_hash *old_hash;
4421        struct ftrace_hash *hash = NULL;
4422        struct hlist_node *tmp;
4423        struct hlist_head hhd;
4424        char str[KSYM_SYMBOL_LEN];
4425        int count = 0;
4426        int i, ret = -ENODEV;
4427        int size;
4428
4429        if (!glob || !strlen(glob) || !strcmp(glob, "*"))
4430                func_g.search = NULL;
4431        else {
4432                int not;
4433
4434                func_g.type = filter_parse_regex(glob, strlen(glob),
4435                                                 &func_g.search, &not);
4436                func_g.len = strlen(func_g.search);
4437
4438                /* we do not support '!' for function probes */
4439                if (WARN_ON(not))
4440                        return -EINVAL;
4441        }
4442
4443        mutex_lock(&ftrace_lock);
4444        /* Check if the probe_ops is already registered */
4445        list_for_each_entry(probe, &tr->func_probes, list) {
4446                if (probe->probe_ops == probe_ops)
4447                        break;
4448        }
4449        if (&probe->list == &tr->func_probes)
4450                goto err_unlock_ftrace;
4451
4452        ret = -EINVAL;
4453        if (!(probe->ops.flags & FTRACE_OPS_FL_INITIALIZED))
4454                goto err_unlock_ftrace;
4455
4456        acquire_probe_locked(probe);
4457
4458        mutex_unlock(&ftrace_lock);
4459
4460        mutex_lock(&probe->ops.func_hash->regex_lock);
4461
4462        orig_hash = &probe->ops.func_hash->filter_hash;
4463        old_hash = *orig_hash;
4464
4465        if (ftrace_hash_empty(old_hash))
4466                goto out_unlock;
4467
4468        old_hash_ops.filter_hash = old_hash;
4469        /* Probes only have filters */
4470        old_hash_ops.notrace_hash = NULL;
4471
4472        ret = -ENOMEM;
4473        hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, old_hash);
4474        if (!hash)
4475                goto out_unlock;
4476
4477        INIT_HLIST_HEAD(&hhd);
4478
4479        size = 1 << hash->size_bits;
4480        for (i = 0; i < size; i++) {
4481                hlist_for_each_entry_safe(entry, tmp, &hash->buckets[i], hlist) {
4482
4483                        if (func_g.search) {
4484                                kallsyms_lookup(entry->ip, NULL, NULL,
4485                                                NULL, str);
4486                                if (!ftrace_match(str, &func_g))
4487                                        continue;
4488                        }
4489                        count++;
4490                        remove_hash_entry(hash, entry);
4491                        hlist_add_head(&entry->hlist, &hhd);
4492                }
4493        }
4494
4495        /* Nothing found? */
4496        if (!count) {
4497                ret = -EINVAL;
4498                goto out_unlock;
4499        }
4500
4501        mutex_lock(&ftrace_lock);
4502
4503        WARN_ON(probe->ref < count);
4504
4505        probe->ref -= count;
4506
4507        if (ftrace_hash_empty(hash))
4508                ftrace_shutdown(&probe->ops, 0);
4509
4510        ret = ftrace_hash_move_and_update_ops(&probe->ops, orig_hash,
4511                                              hash, 1);
4512
4513        /* still need to update the function call sites */
4514        if (ftrace_enabled && !ftrace_hash_empty(hash))
4515                ftrace_run_modify_code(&probe->ops, FTRACE_UPDATE_CALLS,
4516                                       &old_hash_ops);
4517        synchronize_rcu();
4518
4519        hlist_for_each_entry_safe(entry, tmp, &hhd, hlist) {
4520                hlist_del(&entry->hlist);
4521                if (probe_ops->free)
4522                        probe_ops->free(probe_ops, tr, entry->ip, probe->data);
4523                kfree(entry);
4524        }
4525        mutex_unlock(&ftrace_lock);
4526
4527 out_unlock:
4528        mutex_unlock(&probe->ops.func_hash->regex_lock);
4529        free_ftrace_hash(hash);
4530
4531        release_probe(probe);
4532
4533        return ret;
4534
4535 err_unlock_ftrace:
4536        mutex_unlock(&ftrace_lock);
4537        return ret;
4538}
4539
4540void clear_ftrace_function_probes(struct trace_array *tr)
4541{
4542        struct ftrace_func_probe *probe, *n;
4543
4544        list_for_each_entry_safe(probe, n, &tr->func_probes, list)
4545                unregister_ftrace_function_probe_func(NULL, tr, probe->probe_ops);
4546}
4547
4548static LIST_HEAD(ftrace_commands);
4549static DEFINE_MUTEX(ftrace_cmd_mutex);
4550
4551/*
4552 * Currently we only register ftrace commands from __init, so mark this
4553 * __init too.
4554 */
4555__init int register_ftrace_command(struct ftrace_func_command *cmd)
4556{
4557        struct ftrace_func_command *p;
4558        int ret = 0;
4559
4560        mutex_lock(&ftrace_cmd_mutex);
4561        list_for_each_entry(p, &ftrace_commands, list) {
4562                if (strcmp(cmd->name, p->name) == 0) {
4563                        ret = -EBUSY;
4564                        goto out_unlock;
4565                }
4566        }
4567        list_add(&cmd->list, &ftrace_commands);
4568 out_unlock:
4569        mutex_unlock(&ftrace_cmd_mutex);
4570
4571        return ret;
4572}
4573
4574/*
4575 * Currently we only unregister ftrace commands from __init, so mark
4576 * this __init too.
4577 */
4578__init int unregister_ftrace_command(struct ftrace_func_command *cmd)
4579{
4580        struct ftrace_func_command *p, *n;
4581        int ret = -ENODEV;
4582
4583        mutex_lock(&ftrace_cmd_mutex);
4584        list_for_each_entry_safe(p, n, &ftrace_commands, list) {
4585                if (strcmp(cmd->name, p->name) == 0) {
4586                        ret = 0;
4587                        list_del_init(&p->list);
4588                        goto out_unlock;
4589                }
4590        }
4591 out_unlock:
4592        mutex_unlock(&ftrace_cmd_mutex);
4593
4594        return ret;
4595}
4596
4597static int ftrace_process_regex(struct ftrace_iterator *iter,
4598                                char *buff, int len, int enable)
4599{
4600        struct ftrace_hash *hash = iter->hash;
4601        struct trace_array *tr = iter->ops->private;
4602        char *func, *command, *next = buff;
4603        struct ftrace_func_command *p;
4604        int ret = -EINVAL;
4605
4606        func = strsep(&next, ":");
4607
4608        if (!next) {
4609                ret = ftrace_match_records(hash, func, len);
4610                if (!ret)
4611                        ret = -EINVAL;
4612                if (ret < 0)
4613                        return ret;
4614                return 0;
4615        }
4616
4617        /* command found */
4618
4619        command = strsep(&next, ":");
4620
4621        mutex_lock(&ftrace_cmd_mutex);
4622        list_for_each_entry(p, &ftrace_commands, list) {
4623                if (strcmp(p->name, command) == 0) {
4624                        ret = p->func(tr, hash, func, command, next, enable);
4625                        goto out_unlock;
4626                }
4627        }
4628 out_unlock:
4629        mutex_unlock(&ftrace_cmd_mutex);
4630
4631        return ret;
4632}
4633
4634static ssize_t
4635ftrace_regex_write(struct file *file, const char __user *ubuf,
4636                   size_t cnt, loff_t *ppos, int enable)
4637{
4638        struct ftrace_iterator *iter;
4639        struct trace_parser *parser;
4640        ssize_t ret, read;
4641
4642        if (!cnt)
4643                return 0;
4644
4645        if (file->f_mode & FMODE_READ) {
4646                struct seq_file *m = file->private_data;
4647                iter = m->private;
4648        } else
4649                iter = file->private_data;
4650
4651        if (unlikely(ftrace_disabled))
4652                return -ENODEV;
4653
4654        /* iter->hash is a local copy, so we don't need regex_lock */
4655
4656        parser = &iter->parser;
4657        read = trace_get_user(parser, ubuf, cnt, ppos);
4658
4659        if (read >= 0 && trace_parser_loaded(parser) &&
4660            !trace_parser_cont(parser)) {
4661                ret = ftrace_process_regex(iter, parser->buffer,
4662                                           parser->idx, enable);
4663                trace_parser_clear(parser);
4664                if (ret < 0)
4665                        goto out;
4666        }
4667
4668        ret = read;
4669 out:
4670        return ret;
4671}
4672
4673ssize_t
4674ftrace_filter_write(struct file *file, const char __user *ubuf,
4675                    size_t cnt, loff_t *ppos)
4676{
4677        return ftrace_regex_write(file, ubuf, cnt, ppos, 1);
4678}
4679
4680ssize_t
4681ftrace_notrace_write(struct file *file, const char __user *ubuf,
4682                     size_t cnt, loff_t *ppos)
4683{
4684        return ftrace_regex_write(file, ubuf, cnt, ppos, 0);
4685}
4686
4687static int
4688ftrace_match_addr(struct ftrace_hash *hash, unsigned long ip, int remove)
4689{
4690        struct ftrace_func_entry *entry;
4691
4692        if (!ftrace_location(ip))
4693                return -EINVAL;
4694
4695        if (remove) {
4696                entry = ftrace_lookup_ip(hash, ip);
4697                if (!entry)
4698                        return -ENOENT;
4699                free_hash_entry(hash, entry);
4700                return 0;
4701        }
4702
4703        return add_hash_entry(hash, ip);
4704}
4705
4706static int
4707ftrace_set_hash(struct ftrace_ops *ops, unsigned char *buf, int len,
4708                unsigned long ip, int remove, int reset, int enable)
4709{
4710        struct ftrace_hash **orig_hash;
4711        struct ftrace_hash *hash;
4712        int ret;
4713
4714        if (unlikely(ftrace_disabled))
4715                return -ENODEV;
4716
4717        mutex_lock(&ops->func_hash->regex_lock);
4718
4719        if (enable)
4720                orig_hash = &ops->func_hash->filter_hash;
4721        else
4722                orig_hash = &ops->func_hash->notrace_hash;
4723
4724        if (reset)
4725                hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS);
4726        else
4727                hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, *orig_hash);
4728
4729        if (!hash) {
4730                ret = -ENOMEM;
4731                goto out_regex_unlock;
4732        }
4733
4734        if (buf && !ftrace_match_records(hash, buf, len)) {
4735                ret = -EINVAL;
4736                goto out_regex_unlock;
4737        }
4738        if (ip) {
4739                ret = ftrace_match_addr(hash, ip, remove);
4740                if (ret < 0)
4741                        goto out_regex_unlock;
4742        }
4743
4744        mutex_lock(&ftrace_lock);
4745        ret = ftrace_hash_move_and_update_ops(ops, orig_hash, hash, enable);
4746        mutex_unlock(&ftrace_lock);
4747
4748 out_regex_unlock:
4749        mutex_unlock(&ops->func_hash->regex_lock);
4750
4751        free_ftrace_hash(hash);
4752        return ret;
4753}
4754
4755static int
4756ftrace_set_addr(struct ftrace_ops *ops, unsigned long ip, int remove,
4757                int reset, int enable)
4758{
4759        return ftrace_set_hash(ops, NULL, 0, ip, remove, reset, enable);
4760}
4761
4762/**
4763 * ftrace_set_filter_ip - set a function to filter on in ftrace by address
4764 * @ops - the ops to set the filter with
4765 * @ip - the address to add to or remove from the filter.
4766 * @remove - non zero to remove the ip from the filter
4767 * @reset - non zero to reset all filters before applying this filter.
4768 *
4769 * Filters denote which functions should be enabled when tracing is enabled
4770 * If @ip is NULL, it failes to update filter.
4771 */
4772int ftrace_set_filter_ip(struct ftrace_ops *ops, unsigned long ip,
4773                         int remove, int reset)
4774{
4775        ftrace_ops_init(ops);
4776        return ftrace_set_addr(ops, ip, remove, reset, 1);
4777}
4778EXPORT_SYMBOL_GPL(ftrace_set_filter_ip);
4779
4780/**
4781 * ftrace_ops_set_global_filter - setup ops to use global filters
4782 * @ops - the ops which will use the global filters
4783 *
4784 * ftrace users who need global function trace filtering should call this.
4785 * It can set the global filter only if ops were not initialized before.
4786 */
4787void ftrace_ops_set_global_filter(struct ftrace_ops *ops)
4788{
4789        if (ops->flags & FTRACE_OPS_FL_INITIALIZED)
4790                return;
4791
4792        ftrace_ops_init(ops);
4793        ops->func_hash = &global_ops.local_hash;
4794}
4795EXPORT_SYMBOL_GPL(ftrace_ops_set_global_filter);
4796
4797static int
4798ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
4799                 int reset, int enable)
4800{
4801        return ftrace_set_hash(ops, buf, len, 0, 0, reset, enable);
4802}
4803
4804/**
4805 * ftrace_set_filter - set a function to filter on in ftrace
4806 * @ops - the ops to set the filter with
4807 * @buf - the string that holds the function filter text.
4808 * @len - the length of the string.
4809 * @reset - non zero to reset all filters before applying this filter.
4810 *
4811 * Filters denote which functions should be enabled when tracing is enabled.
4812 * If @buf is NULL and reset is set, all functions will be enabled for tracing.
4813 */
4814int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
4815                       int len, int reset)
4816{
4817        ftrace_ops_init(ops);
4818        return ftrace_set_regex(ops, buf, len, reset, 1);
4819}
4820EXPORT_SYMBOL_GPL(ftrace_set_filter);
4821
4822/**
4823 * ftrace_set_notrace - set a function to not trace in ftrace
4824 * @ops - the ops to set the notrace filter with
4825 * @buf - the string that holds the function notrace text.
4826 * @len - the length of the string.
4827 * @reset - non zero to reset all filters before applying this filter.
4828 *
4829 * Notrace Filters denote which functions should not be enabled when tracing
4830 * is enabled. If @buf is NULL and reset is set, all functions will be enabled
4831 * for tracing.
4832 */
4833int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
4834                        int len, int reset)
4835{
4836        ftrace_ops_init(ops);
4837        return ftrace_set_regex(ops, buf, len, reset, 0);
4838}
4839EXPORT_SYMBOL_GPL(ftrace_set_notrace);
4840/**
4841 * ftrace_set_global_filter - set a function to filter on with global tracers
4842 * @buf - the string that holds the function filter text.
4843 * @len - the length of the string.
4844 * @reset - non zero to reset all filters before applying this filter.
4845 *
4846 * Filters denote which functions should be enabled when tracing is enabled.
4847 * If @buf is NULL and reset is set, all functions will be enabled for tracing.
4848 */
4849void ftrace_set_global_filter(unsigned char *buf, int len, int reset)
4850{
4851        ftrace_set_regex(&global_ops, buf, len, reset, 1);
4852}
4853EXPORT_SYMBOL_GPL(ftrace_set_global_filter);
4854
4855/**
4856 * ftrace_set_global_notrace - set a function to not trace with global tracers
4857 * @buf - the string that holds the function notrace text.
4858 * @len - the length of the string.
4859 * @reset - non zero to reset all filters before applying this filter.
4860 *
4861 * Notrace Filters denote which functions should not be enabled when tracing
4862 * is enabled. If @buf is NULL and reset is set, all functions will be enabled
4863 * for tracing.
4864 */
4865void ftrace_set_global_notrace(unsigned char *buf, int len, int reset)
4866{
4867        ftrace_set_regex(&global_ops, buf, len, reset, 0);
4868}
4869EXPORT_SYMBOL_GPL(ftrace_set_global_notrace);
4870
4871/*
4872 * command line interface to allow users to set filters on boot up.
4873 */
4874#define FTRACE_FILTER_SIZE              COMMAND_LINE_SIZE
4875static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata;
4876static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata;
4877
4878/* Used by function selftest to not test if filter is set */
4879bool ftrace_filter_param __initdata;
4880
4881static int __init set_ftrace_notrace(char *str)
4882{
4883        ftrace_filter_param = true;
4884        strlcpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE);
4885        return 1;
4886}
4887__setup("ftrace_notrace=", set_ftrace_notrace);
4888
4889static int __init set_ftrace_filter(char *str)
4890{
4891        ftrace_filter_param = true;
4892        strlcpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE);
4893        return 1;
4894}
4895__setup("ftrace_filter=", set_ftrace_filter);
4896
4897#ifdef CONFIG_FUNCTION_GRAPH_TRACER
4898static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata;
4899static char ftrace_graph_notrace_buf[FTRACE_FILTER_SIZE] __initdata;
4900static int ftrace_graph_set_hash(struct ftrace_hash *hash, char *buffer);
4901
4902static int __init set_graph_function(char *str)
4903{
4904        strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE);
4905        return 1;
4906}
4907__setup("ftrace_graph_filter=", set_graph_function);
4908
4909static int __init set_graph_notrace_function(char *str)
4910{
4911        strlcpy(ftrace_graph_notrace_buf, str, FTRACE_FILTER_SIZE);
4912        return 1;
4913}
4914__setup("ftrace_graph_notrace=", set_graph_notrace_function);
4915
4916static int __init set_graph_max_depth_function(char *str)
4917{
4918        if (!str)
4919                return 0;
4920        fgraph_max_depth = simple_strtoul(str, NULL, 0);
4921        return 1;
4922}
4923__setup("ftrace_graph_max_depth=", set_graph_max_depth_function);
4924
4925static void __init set_ftrace_early_graph(char *buf, int enable)
4926{
4927        int ret;
4928        char *func;
4929        struct ftrace_hash *hash;
4930
4931        hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS);
4932        if (WARN_ON(!hash))
4933                return;
4934
4935        while (buf) {
4936                func = strsep(&buf, ",");
4937                /* we allow only one expression at a time */
4938                ret = ftrace_graph_set_hash(hash, func);
4939                if (ret)
4940                        printk(KERN_DEBUG "ftrace: function %s not "
4941                                          "traceable\n", func);
4942        }
4943
4944        if (enable)
4945                ftrace_graph_hash = hash;
4946        else
4947                ftrace_graph_notrace_hash = hash;
4948}
4949#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
4950
4951void __init
4952ftrace_set_early_filter(struct ftrace_ops *ops, char *buf, int enable)
4953{
4954        char *func;
4955
4956        ftrace_ops_init(ops);
4957
4958        while (buf) {
4959                func = strsep(&buf, ",");
4960                ftrace_set_regex(ops, func, strlen(func), 0, enable);
4961        }
4962}
4963
4964static void __init set_ftrace_early_filters(void)
4965{
4966        if (ftrace_filter_buf[0])
4967                ftrace_set_early_filter(&global_ops, ftrace_filter_buf, 1);
4968        if (ftrace_notrace_buf[0])
4969                ftrace_set_early_filter(&global_ops, ftrace_notrace_buf, 0);
4970#ifdef CONFIG_FUNCTION_GRAPH_TRACER
4971        if (ftrace_graph_buf[0])
4972                set_ftrace_early_graph(ftrace_graph_buf, 1);
4973        if (ftrace_graph_notrace_buf[0])
4974                set_ftrace_early_graph(ftrace_graph_notrace_buf, 0);
4975#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
4976}
4977
4978int ftrace_regex_release(struct inode *inode, struct file *file)
4979{
4980        struct seq_file *m = (struct seq_file *)file->private_data;
4981        struct ftrace_iterator *iter;
4982        struct ftrace_hash **orig_hash;
4983        struct trace_parser *parser;
4984        int filter_hash;
4985        int ret;
4986
4987        if (file->f_mode & FMODE_READ) {
4988                iter = m->private;
4989                seq_release(inode, file);
4990        } else
4991                iter = file->private_data;
4992
4993        parser = &iter->parser;
4994        if (trace_parser_loaded(parser)) {
4995                ftrace_match_records(iter->hash, parser->buffer, parser->idx);
4996        }
4997
4998        trace_parser_put(parser);
4999
5000        mutex_lock(&iter->ops->func_hash->regex_lock);
5001
5002        if (file->f_mode & FMODE_WRITE) {
5003                filter_hash = !!(iter->flags & FTRACE_ITER_FILTER);
5004
5005                if (filter_hash) {
5006                        orig_hash = &iter->ops->func_hash->filter_hash;
5007                        if (iter->tr && !list_empty(&iter->tr->mod_trace))
5008                                iter->hash->flags |= FTRACE_HASH_FL_MOD;
5009                } else
5010                        orig_hash = &iter->ops->func_hash->notrace_hash;
5011
5012                mutex_lock(&ftrace_lock);
5013                ret = ftrace_hash_move_and_update_ops(iter->ops, orig_hash,
5014                                                      iter->hash, filter_hash);
5015                mutex_unlock(&ftrace_lock);
5016        } else {
5017                /* For read only, the hash is the ops hash */
5018                iter->hash = NULL;
5019        }
5020
5021        mutex_unlock(&iter->ops->func_hash->regex_lock);
5022        free_ftrace_hash(iter->hash);
5023        kfree(iter);
5024
5025        return 0;
5026}
5027
5028static const struct file_operations ftrace_avail_fops = {
5029        .open = ftrace_avail_open,
5030        .read = seq_read,
5031        .llseek = seq_lseek,
5032        .release = seq_release_private,
5033};
5034
5035static const struct file_operations ftrace_enabled_fops = {
5036        .open = ftrace_enabled_open,
5037        .read = seq_read,
5038        .llseek = seq_lseek,
5039        .release = seq_release_private,
5040};
5041
5042static const struct file_operations ftrace_filter_fops = {
5043        .open = ftrace_filter_open,
5044        .read = seq_read,
5045        .write = ftrace_filter_write,
5046        .llseek = tracing_lseek,
5047        .release = ftrace_regex_release,
5048};
5049
5050static const struct file_operations ftrace_notrace_fops = {
5051        .open = ftrace_notrace_open,
5052        .read = seq_read,
5053        .write = ftrace_notrace_write,
5054        .llseek = tracing_lseek,
5055        .release = ftrace_regex_release,
5056};
5057
5058#ifdef CONFIG_FUNCTION_GRAPH_TRACER
5059
5060static DEFINE_MUTEX(graph_lock);
5061
5062struct ftrace_hash *ftrace_graph_hash = EMPTY_HASH;
5063struct ftrace_hash *ftrace_graph_notrace_hash = EMPTY_HASH;
5064
5065enum graph_filter_type {
5066        GRAPH_FILTER_NOTRACE    = 0,
5067        GRAPH_FILTER_FUNCTION,
5068};
5069
5070#define FTRACE_GRAPH_EMPTY      ((void *)1)
5071
5072struct ftrace_graph_data {
5073        struct ftrace_hash              *hash;
5074        struct ftrace_func_entry        *entry;
5075        int                             idx;   /* for hash table iteration */
5076        enum graph_filter_type          type;
5077        struct ftrace_hash              *new_hash;
5078        const struct seq_operations     *seq_ops;
5079        struct trace_parser             parser;
5080};
5081
5082static void *
5083__g_next(struct seq_file *m, loff_t *pos)
5084{
5085        struct ftrace_graph_data *fgd = m->private;
5086        struct ftrace_func_entry *entry = fgd->entry;
5087        struct hlist_head *head;
5088        int i, idx = fgd->idx;
5089
5090        if (*pos >= fgd->hash->count)
5091                return NULL;
5092
5093        if (entry) {
5094                hlist_for_each_entry_continue(entry, hlist) {
5095                        fgd->entry = entry;
5096                        return entry;
5097                }
5098
5099                idx++;
5100        }
5101
5102        for (i = idx; i < 1 << fgd->hash->size_bits; i++) {
5103                head = &fgd->hash->buckets[i];
5104                hlist_for_each_entry(entry, head, hlist) {
5105                        fgd->entry = entry;
5106                        fgd->idx = i;
5107                        return entry;
5108                }
5109        }
5110        return NULL;
5111}
5112
5113static void *
5114g_next(struct seq_file *m, void *v, loff_t *pos)
5115{
5116        (*pos)++;
5117        return __g_next(m, pos);
5118}
5119
5120static void *g_start(struct seq_file *m, loff_t *pos)
5121{
5122        struct ftrace_graph_data *fgd = m->private;
5123
5124        mutex_lock(&graph_lock);
5125
5126        if (fgd->type == GRAPH_FILTER_FUNCTION)
5127                fgd->hash = rcu_dereference_protected(ftrace_graph_hash,
5128                                        lockdep_is_held(&graph_lock));
5129        else
5130                fgd->hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
5131                                        lockdep_is_held(&graph_lock));
5132
5133        /* Nothing, tell g_show to print all functions are enabled */
5134        if (ftrace_hash_empty(fgd->hash) && !*pos)
5135                return FTRACE_GRAPH_EMPTY;
5136
5137        fgd->idx = 0;
5138        fgd->entry = NULL;
5139        return __g_next(m, pos);
5140}
5141
5142static void g_stop(struct seq_file *m, void *p)
5143{
5144        mutex_unlock(&graph_lock);
5145}
5146
5147static int g_show(struct seq_file *m, void *v)
5148{
5149        struct ftrace_func_entry *entry = v;
5150
5151        if (!entry)
5152                return 0;
5153
5154        if (entry == FTRACE_GRAPH_EMPTY) {
5155                struct ftrace_graph_data *fgd = m->private;
5156
5157                if (fgd->type == GRAPH_FILTER_FUNCTION)
5158                        seq_puts(m, "#### all functions enabled ####\n");
5159                else
5160                        seq_puts(m, "#### no functions disabled ####\n");
5161                return 0;
5162        }
5163
5164        seq_printf(m, "%ps\n", (void *)entry->ip);
5165
5166        return 0;
5167}
5168
5169static const struct seq_operations ftrace_graph_seq_ops = {
5170        .start = g_start,
5171        .next = g_next,
5172        .stop = g_stop,
5173        .show = g_show,
5174};
5175
5176static int
5177__ftrace_graph_open(struct inode *inode, struct file *file,
5178                    struct ftrace_graph_data *fgd)
5179{
5180        int ret = 0;
5181        struct ftrace_hash *new_hash = NULL;
5182
5183        if (file->f_mode & FMODE_WRITE) {
5184                const int size_bits = FTRACE_HASH_DEFAULT_BITS;
5185
5186                if (trace_parser_get_init(&fgd->parser, FTRACE_BUFF_MAX))
5187                        return -ENOMEM;
5188
5189                if (file->f_flags & O_TRUNC)
5190                        new_hash = alloc_ftrace_hash(size_bits);
5191                else
5192                        new_hash = alloc_and_copy_ftrace_hash(size_bits,
5193                                                              fgd->hash);
5194                if (!new_hash) {
5195                        ret = -ENOMEM;
5196                        goto out;
5197                }
5198        }
5199
5200        if (file->f_mode & FMODE_READ) {
5201                ret = seq_open(file, &ftrace_graph_seq_ops);
5202                if (!ret) {
5203                        struct seq_file *m = file->private_data;
5204                        m->private = fgd;
5205                } else {
5206                        /* Failed */
5207                        free_ftrace_hash(new_hash);
5208                        new_hash = NULL;
5209                }
5210        } else
5211                file->private_data = fgd;
5212
5213out:
5214        if (ret < 0 && file->f_mode & FMODE_WRITE)
5215                trace_parser_put(&fgd->parser);
5216
5217        fgd->new_hash = new_hash;
5218
5219        /*
5220         * All uses of fgd->hash must be taken with the graph_lock
5221         * held. The graph_lock is going to be released, so force
5222         * fgd->hash to be reinitialized when it is taken again.
5223         */
5224        fgd->hash = NULL;
5225
5226        return ret;
5227}
5228
5229static int
5230ftrace_graph_open(struct inode *inode, struct file *file)
5231{
5232        struct ftrace_graph_data *fgd;
5233        int ret;
5234
5235        if (unlikely(ftrace_disabled))
5236                return -ENODEV;
5237
5238        fgd = kmalloc(sizeof(*fgd), GFP_KERNEL);
5239        if (fgd == NULL)
5240                return -ENOMEM;
5241
5242        mutex_lock(&graph_lock);
5243
5244        fgd->hash = rcu_dereference_protected(ftrace_graph_hash,
5245                                        lockdep_is_held(&graph_lock));
5246        fgd->type = GRAPH_FILTER_FUNCTION;
5247        fgd->seq_ops = &ftrace_graph_seq_ops;
5248
5249        ret = __ftrace_graph_open(inode, file, fgd);
5250        if (ret < 0)
5251                kfree(fgd);
5252
5253        mutex_unlock(&graph_lock);
5254        return ret;
5255}
5256
5257static int
5258ftrace_graph_notrace_open(struct inode *inode, struct file *file)
5259{
5260        struct ftrace_graph_data *fgd;
5261        int ret;
5262
5263        if (unlikely(ftrace_disabled))
5264                return -ENODEV;
5265
5266        fgd = kmalloc(sizeof(*fgd), GFP_KERNEL);
5267        if (fgd == NULL)
5268                return -ENOMEM;
5269
5270        mutex_lock(&graph_lock);
5271
5272        fgd->hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
5273                                        lockdep_is_held(&graph_lock));
5274        fgd->type = GRAPH_FILTER_NOTRACE;
5275        fgd->seq_ops = &ftrace_graph_seq_ops;
5276
5277        ret = __ftrace_graph_open(inode, file, fgd);
5278        if (ret < 0)
5279                kfree(fgd);
5280
5281        mutex_unlock(&graph_lock);
5282        return ret;
5283}
5284
5285static int
5286ftrace_graph_release(struct inode *inode, struct file *file)
5287{
5288        struct ftrace_graph_data *fgd;
5289        struct ftrace_hash *old_hash, *new_hash;
5290        struct trace_parser *parser;
5291        int ret = 0;
5292
5293        if (file->f_mode & FMODE_READ) {
5294                struct seq_file *m = file->private_data;
5295
5296                fgd = m->private;
5297                seq_release(inode, file);
5298        } else {
5299                fgd = file->private_data;
5300        }
5301
5302
5303        if (file->f_mode & FMODE_WRITE) {
5304
5305                parser = &fgd->parser;
5306
5307                if (trace_parser_loaded((parser))) {
5308                        ret = ftrace_graph_set_hash(fgd->new_hash,
5309                                                    parser->buffer);
5310                }
5311
5312                trace_parser_put(parser);
5313
5314                new_hash = __ftrace_hash_move(fgd->new_hash);
5315                if (!new_hash) {
5316                        ret = -ENOMEM;
5317                        goto out;
5318                }
5319
5320                mutex_lock(&graph_lock);
5321
5322                if (fgd->type == GRAPH_FILTER_FUNCTION) {
5323                        old_hash = rcu_dereference_protected(ftrace_graph_hash,
5324                                        lockdep_is_held(&graph_lock));
5325                        rcu_assign_pointer(ftrace_graph_hash, new_hash);
5326                } else {
5327                        old_hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
5328                                        lockdep_is_held(&graph_lock));
5329                        rcu_assign_pointer(ftrace_graph_notrace_hash, new_hash);
5330                }
5331
5332                mutex_unlock(&graph_lock);
5333
5334                /* Wait till all users are no longer using the old hash */
5335                synchronize_rcu();
5336
5337                free_ftrace_hash(old_hash);
5338        }
5339
5340 out:
5341        free_ftrace_hash(fgd->new_hash);
5342        kfree(fgd);
5343
5344        return ret;
5345}
5346
5347static int
5348ftrace_graph_set_hash(struct ftrace_hash *hash, char *buffer)
5349{
5350        struct ftrace_glob func_g;
5351        struct dyn_ftrace *rec;
5352        struct ftrace_page *pg;
5353        struct ftrace_func_entry *entry;
5354        int fail = 1;
5355        int not;
5356
5357        /* decode regex */
5358        func_g.type = filter_parse_regex(buffer, strlen(buffer),
5359                                         &func_g.search, &not);
5360
5361        func_g.len = strlen(func_g.search);
5362
5363        mutex_lock(&ftrace_lock);
5364
5365        if (unlikely(ftrace_disabled)) {
5366                mutex_unlock(&ftrace_lock);
5367                return -ENODEV;
5368        }
5369
5370        do_for_each_ftrace_rec(pg, rec) {
5371
5372                if (rec->flags & FTRACE_FL_DISABLED)
5373                        continue;
5374
5375                if (ftrace_match_record(rec, &func_g, NULL, 0)) {
5376                        entry = ftrace_lookup_ip(hash, rec->ip);
5377
5378                        if (!not) {
5379                                fail = 0;
5380
5381                                if (entry)
5382                                        continue;
5383                                if (add_hash_entry(hash, rec->ip) < 0)
5384                                        goto out;
5385                        } else {
5386                                if (entry) {
5387                                        free_hash_entry(hash, entry);
5388                                        fail = 0;
5389                                }
5390                        }
5391                }
5392        } while_for_each_ftrace_rec();
5393out:
5394        mutex_unlock(&ftrace_lock);
5395
5396        if (fail)
5397                return -EINVAL;
5398
5399        return 0;
5400}
5401
5402static ssize_t
5403ftrace_graph_write(struct file *file, const char __user *ubuf,
5404                   size_t cnt, loff_t *ppos)
5405{
5406        ssize_t read, ret = 0;
5407        struct ftrace_graph_data *fgd = file->private_data;
5408        struct trace_parser *parser;
5409
5410        if (!cnt)
5411                return 0;
5412
5413        /* Read mode uses seq functions */
5414        if (file->f_mode & FMODE_READ) {
5415                struct seq_file *m = file->private_data;
5416                fgd = m->private;
5417        }
5418
5419        parser = &fgd->parser;
5420
5421        read = trace_get_user(parser, ubuf, cnt, ppos);
5422
5423        if (read >= 0 && trace_parser_loaded(parser) &&
5424            !trace_parser_cont(parser)) {
5425
5426                ret = ftrace_graph_set_hash(fgd->new_hash,
5427                                            parser->buffer);
5428                trace_parser_clear(parser);
5429        }
5430
5431        if (!ret)
5432                ret = read;
5433
5434        return ret;
5435}
5436
5437static const struct file_operations ftrace_graph_fops = {
5438        .open           = ftrace_graph_open,
5439        .read           = seq_read,
5440        .write          = ftrace_graph_write,
5441        .llseek         = tracing_lseek,
5442        .release        = ftrace_graph_release,
5443};
5444
5445static const struct file_operations ftrace_graph_notrace_fops = {
5446        .open           = ftrace_graph_notrace_open,
5447        .read           = seq_read,
5448        .write          = ftrace_graph_write,
5449        .llseek         = tracing_lseek,
5450        .release        = ftrace_graph_release,
5451};
5452#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
5453
5454void ftrace_create_filter_files(struct ftrace_ops *ops,
5455                                struct dentry *parent)
5456{
5457
5458        trace_create_file("set_ftrace_filter", 0644, parent,
5459                          ops, &ftrace_filter_fops);
5460
5461        trace_create_file("set_ftrace_notrace", 0644, parent,
5462                          ops, &ftrace_notrace_fops);
5463}
5464
5465/*
5466 * The name "destroy_filter_files" is really a misnomer. Although
5467 * in the future, it may actually delete the files, but this is
5468 * really intended to make sure the ops passed in are disabled
5469 * and that when this function returns, the caller is free to
5470 * free the ops.
5471 *
5472 * The "destroy" name is only to match the "create" name that this
5473 * should be paired with.
5474 */
5475void ftrace_destroy_filter_files(struct ftrace_ops *ops)
5476{
5477        mutex_lock(&ftrace_lock);
5478        if (ops->flags & FTRACE_OPS_FL_ENABLED)
5479                ftrace_shutdown(ops, 0);
5480        ops->flags |= FTRACE_OPS_FL_DELETED;
5481        ftrace_free_filter(ops);
5482        mutex_unlock(&ftrace_lock);
5483}
5484
5485static __init int ftrace_init_dyn_tracefs(struct dentry *d_tracer)
5486{
5487
5488        trace_create_file("available_filter_functions", 0444,
5489                        d_tracer, NULL, &ftrace_avail_fops);
5490
5491        trace_create_file("enabled_functions", 0444,
5492                        d_tracer, NULL, &ftrace_enabled_fops);
5493
5494        ftrace_create_filter_files(&global_ops, d_tracer);
5495
5496#ifdef CONFIG_FUNCTION_GRAPH_TRACER
5497        trace_create_file("set_graph_function", 0644, d_tracer,
5498                                    NULL,
5499                                    &ftrace_graph_fops);
5500        trace_create_file("set_graph_notrace", 0644, d_tracer,
5501                                    NULL,
5502                                    &ftrace_graph_notrace_fops);
5503#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
5504
5505        return 0;
5506}
5507
5508static int ftrace_cmp_ips(const void *a, const void *b)
5509{
5510        const unsigned long *ipa = a;
5511        const unsigned long *ipb = b;
5512
5513        if (*ipa > *ipb)
5514                return 1;
5515        if (*ipa < *ipb)
5516                return -1;
5517        return 0;
5518}
5519
5520static int ftrace_process_locs(struct module *mod,
5521                               unsigned long *start,
5522                               unsigned long *end)
5523{
5524        struct ftrace_page *start_pg;
5525        struct ftrace_page *pg;
5526        struct dyn_ftrace *rec;
5527        unsigned long count;
5528        unsigned long *p;
5529        unsigned long addr;
5530        unsigned long flags = 0; /* Shut up gcc */
5531        int ret = -ENOMEM;
5532
5533        count = end - start;
5534
5535        if (!count)
5536                return 0;
5537
5538        sort(start, count, sizeof(*start),
5539             ftrace_cmp_ips, NULL);
5540
5541        start_pg = ftrace_allocate_pages(count);
5542        if (!start_pg)
5543                return -ENOMEM;
5544
5545        mutex_lock(&ftrace_lock);
5546
5547        /*
5548         * Core and each module needs their own pages, as
5549         * modules will free them when they are removed.
5550         * Force a new page to be allocated for modules.
5551         */
5552        if (!mod) {
5553                WARN_ON(ftrace_pages || ftrace_pages_start);
5554                /* First initialization */
5555                ftrace_pages = ftrace_pages_start = start_pg;
5556        } else {
5557                if (!ftrace_pages)
5558                        goto out;
5559
5560                if (WARN_ON(ftrace_pages->next)) {
5561                        /* Hmm, we have free pages? */
5562                        while (ftrace_pages->next)
5563                                ftrace_pages = ftrace_pages->next;
5564                }
5565
5566                ftrace_pages->next = start_pg;
5567        }
5568
5569        p = start;
5570        pg = start_pg;
5571        while (p < end) {
5572                addr = ftrace_call_adjust(*p++);
5573                /*
5574                 * Some architecture linkers will pad between
5575                 * the different mcount_loc sections of different
5576                 * object files to satisfy alignments.
5577                 * Skip any NULL pointers.
5578                 */
5579                if (!addr)
5580                        continue;
5581
5582                if (pg->index == pg->size) {
5583                        /* We should have allocated enough */
5584                        if (WARN_ON(!pg->next))
5585                                break;
5586                        pg = pg->next;
5587                }
5588
5589                rec = &pg->records[pg->index++];
5590                rec->ip = addr;
5591        }
5592
5593        /* We should have used all pages */
5594        WARN_ON(pg->next);
5595
5596        /* Assign the last page to ftrace_pages */
5597        ftrace_pages = pg;
5598
5599        /*
5600         * We only need to disable interrupts on start up
5601         * because we are modifying code that an interrupt
5602         * may execute, and the modification is not atomic.
5603         * But for modules, nothing runs the code we modify
5604         * until we are finished with it, and there's no
5605         * reason to cause large interrupt latencies while we do it.
5606         */
5607        if (!mod)
5608                local_irq_save(flags);
5609        ftrace_update_code(mod, start_pg);
5610        if (!mod)
5611                local_irq_restore(flags);
5612        ret = 0;
5613 out:
5614        mutex_unlock(&ftrace_lock);
5615
5616        return ret;
5617}
5618
5619struct ftrace_mod_func {
5620        struct list_head        list;
5621        char                    *name;
5622        unsigned long           ip;
5623        unsigned int            size;
5624};
5625
5626struct ftrace_mod_map {
5627        struct rcu_head         rcu;
5628        struct list_head        list;
5629        struct module           *mod;
5630        unsigned long           start_addr;
5631        unsigned long           end_addr;
5632        struct list_head        funcs;
5633        unsigned int            num_funcs;
5634};
5635
5636#ifdef CONFIG_MODULES
5637
5638#define next_to_ftrace_page(p) container_of(p, struct ftrace_page, next)
5639
5640static LIST_HEAD(ftrace_mod_maps);
5641
5642static int referenced_filters(struct dyn_ftrace *rec)
5643{
5644        struct ftrace_ops *ops;
5645        int cnt = 0;
5646
5647        for (ops = ftrace_ops_list; ops != &ftrace_list_end; ops = ops->next) {
5648                if (ops_references_rec(ops, rec))
5649                    cnt++;
5650        }
5651
5652        return cnt;
5653}
5654
5655static void
5656clear_mod_from_hash(struct ftrace_page *pg, struct ftrace_hash *hash)
5657{
5658        struct ftrace_func_entry *entry;
5659        struct dyn_ftrace *rec;
5660        int i;
5661
5662        if (ftrace_hash_empty(hash))
5663                return;
5664
5665        for (i = 0; i < pg->index; i++) {
5666                rec = &pg->records[i];
5667                entry = __ftrace_lookup_ip(hash, rec->ip);
5668                /*
5669                 * Do not allow this rec to match again.
5670                 * Yeah, it may waste some memory, but will be removed
5671                 * if/when the hash is modified again.
5672                 */
5673                if (entry)
5674                        entry->ip = 0;
5675        }
5676}
5677
5678/* Clear any records from hashs */
5679static void clear_mod_from_hashes(struct ftrace_page *pg)
5680{
5681        struct trace_array *tr;
5682
5683        mutex_lock(&trace_types_lock);
5684        list_for_each_entry(tr, &ftrace_trace_arrays, list) {
5685                if (!tr->ops || !tr->ops->func_hash)
5686                        continue;
5687                mutex_lock(&tr->ops->func_hash->regex_lock);
5688                clear_mod_from_hash(pg, tr->ops->func_hash->filter_hash);
5689                clear_mod_from_hash(pg, tr->ops->func_hash->notrace_hash);
5690                mutex_unlock(&tr->ops->func_hash->regex_lock);
5691        }
5692        mutex_unlock(&trace_types_lock);
5693}
5694
5695static void ftrace_free_mod_map(struct rcu_head *rcu)
5696{
5697        struct ftrace_mod_map *mod_map = container_of(rcu, struct ftrace_mod_map, rcu);
5698        struct ftrace_mod_func *mod_func;
5699        struct ftrace_mod_func *n;
5700
5701        /* All the contents of mod_map are now not visible to readers */
5702        list_for_each_entry_safe(mod_func, n, &mod_map->funcs, list) {
5703                kfree(mod_func->name);
5704                list_del(&mod_func->list);
5705                kfree(mod_func);
5706        }
5707
5708        kfree(mod_map);
5709}
5710
5711void ftrace_release_mod(struct module *mod)
5712{
5713        struct ftrace_mod_map *mod_map;
5714        struct ftrace_mod_map *n;
5715        struct dyn_ftrace *rec;
5716        struct ftrace_page **last_pg;
5717        struct ftrace_page *tmp_page = NULL;
5718        struct ftrace_page *pg;
5719        int order;
5720
5721        mutex_lock(&ftrace_lock);
5722
5723        if (ftrace_disabled)
5724                goto out_unlock;
5725
5726        list_for_each_entry_safe(mod_map, n, &ftrace_mod_maps, list) {
5727                if (mod_map->mod == mod) {
5728                        list_del_rcu(&mod_map->list);
5729                        call_rcu(&mod_map->rcu, ftrace_free_mod_map);
5730                        break;
5731                }
5732        }
5733
5734        /*
5735         * Each module has its own ftrace_pages, remove
5736         * them from the list.
5737         */
5738        last_pg = &ftrace_pages_start;
5739        for (pg = ftrace_pages_start; pg; pg = *last_pg) {
5740                rec = &pg->records[0];
5741                if (within_module_core(rec->ip, mod) ||
5742                    within_module_init(rec->ip, mod)) {
5743                        /*
5744                         * As core pages are first, the first
5745                         * page should never be a module page.
5746                         */
5747                        if (WARN_ON(pg == ftrace_pages_start))
5748                                goto out_unlock;
5749
5750                        /* Check if we are deleting the last page */
5751                        if (pg == ftrace_pages)
5752                                ftrace_pages = next_to_ftrace_page(last_pg);
5753
5754                        ftrace_update_tot_cnt -= pg->index;
5755                        *last_pg = pg->next;
5756
5757                        pg->next = tmp_page;
5758                        tmp_page = pg;
5759                } else
5760                        last_pg = &pg->next;
5761        }
5762 out_unlock:
5763        mutex_unlock(&ftrace_lock);
5764
5765        for (pg = tmp_page; pg; pg = tmp_page) {
5766
5767                /* Needs to be called outside of ftrace_lock */
5768                clear_mod_from_hashes(pg);
5769
5770                order = get_count_order(pg->size / ENTRIES_PER_PAGE);
5771                free_pages((unsigned long)pg->records, order);
5772                tmp_page = pg->next;
5773                kfree(pg);
5774        }
5775}
5776
5777void ftrace_module_enable(struct module *mod)
5778{
5779        struct dyn_ftrace *rec;
5780        struct ftrace_page *pg;
5781
5782        mutex_lock(&ftrace_lock);
5783
5784        if (ftrace_disabled)
5785                goto out_unlock;
5786
5787        /*
5788         * If the tracing is enabled, go ahead and enable the record.
5789         *
5790         * The reason not to enable the record immediately is the
5791         * inherent check of ftrace_make_nop/ftrace_make_call for
5792         * correct previous instructions.  Making first the NOP
5793         * conversion puts the module to the correct state, thus
5794         * passing the ftrace_make_call check.
5795         *
5796         * We also delay this to after the module code already set the
5797         * text to read-only, as we now need to set it back to read-write
5798         * so that we can modify the text.
5799         */
5800        if (ftrace_start_up)
5801                ftrace_arch_code_modify_prepare();
5802
5803        do_for_each_ftrace_rec(pg, rec) {
5804                int cnt;
5805                /*
5806                 * do_for_each_ftrace_rec() is a double loop.
5807                 * module text shares the pg. If a record is
5808                 * not part of this module, then skip this pg,
5809                 * which the "break" will do.
5810                 */
5811                if (!within_module_core(rec->ip, mod) &&
5812                    !within_module_init(rec->ip, mod))
5813                        break;
5814
5815                cnt = 0;
5816
5817                /*
5818                 * When adding a module, we need to check if tracers are
5819                 * currently enabled and if they are, and can trace this record,
5820                 * we need to enable the module functions as well as update the
5821                 * reference counts for those function records.
5822                 */
5823                if (ftrace_start_up)
5824                        cnt += referenced_filters(rec);
5825
5826                /* This clears FTRACE_FL_DISABLED */
5827                rec->flags = cnt;
5828
5829                if (ftrace_start_up && cnt) {
5830                        int failed = __ftrace_replace_code(rec, 1);
5831                        if (failed) {
5832                                ftrace_bug(failed, rec);
5833                                goto out_loop;
5834                        }
5835                }
5836
5837        } while_for_each_ftrace_rec();
5838
5839 out_loop:
5840        if (ftrace_start_up)
5841                ftrace_arch_code_modify_post_process();
5842
5843 out_unlock:
5844        mutex_unlock(&ftrace_lock);
5845
5846        process_cached_mods(mod->name);
5847}
5848
5849void ftrace_module_init(struct module *mod)
5850{
5851        if (ftrace_disabled || !mod->num_ftrace_callsites)
5852                return;
5853
5854        ftrace_process_locs(mod, mod->ftrace_callsites,
5855                            mod->ftrace_callsites + mod->num_ftrace_callsites);
5856}
5857
5858static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map,
5859                                struct dyn_ftrace *rec)
5860{
5861        struct ftrace_mod_func *mod_func;
5862        unsigned long symsize;
5863        unsigned long offset;
5864        char str[KSYM_SYMBOL_LEN];
5865        char *modname;
5866        const char *ret;
5867
5868        ret = kallsyms_lookup(rec->ip, &symsize, &offset, &modname, str);
5869        if (!ret)
5870                return;
5871
5872        mod_func = kmalloc(sizeof(*mod_func), GFP_KERNEL);
5873        if (!mod_func)
5874                return;
5875
5876        mod_func->name = kstrdup(str, GFP_KERNEL);
5877        if (!mod_func->name) {
5878                kfree(mod_func);
5879                return;
5880        }
5881
5882        mod_func->ip = rec->ip - offset;
5883        mod_func->size = symsize;
5884
5885        mod_map->num_funcs++;
5886
5887        list_add_rcu(&mod_func->list, &mod_map->funcs);
5888}
5889
5890static struct ftrace_mod_map *
5891allocate_ftrace_mod_map(struct module *mod,
5892                        unsigned long start, unsigned long end)
5893{
5894        struct ftrace_mod_map *mod_map;
5895
5896        mod_map = kmalloc(sizeof(*mod_map), GFP_KERNEL);
5897        if (!mod_map)
5898                return NULL;
5899
5900        mod_map->mod = mod;
5901        mod_map->start_addr = start;
5902        mod_map->end_addr = end;
5903        mod_map->num_funcs = 0;
5904
5905        INIT_LIST_HEAD_RCU(&mod_map->funcs);
5906
5907        list_add_rcu(&mod_map->list, &ftrace_mod_maps);
5908
5909        return mod_map;
5910}
5911
5912static const char *
5913ftrace_func_address_lookup(struct ftrace_mod_map *mod_map,
5914                           unsigned long addr, unsigned long *size,
5915                           unsigned long *off, char *sym)
5916{
5917        struct ftrace_mod_func *found_func =  NULL;
5918        struct ftrace_mod_func *mod_func;
5919
5920        list_for_each_entry_rcu(mod_func, &mod_map->funcs, list) {
5921                if (addr >= mod_func->ip &&
5922                    addr < mod_func->ip + mod_func->size) {
5923                        found_func = mod_func;
5924                        break;
5925                }
5926        }
5927
5928        if (found_func) {
5929                if (size)
5930                        *size = found_func->size;
5931                if (off)
5932                        *off = addr - found_func->ip;
5933                if (sym)
5934                        strlcpy(sym, found_func->name, KSYM_NAME_LEN);
5935
5936                return found_func->name;
5937        }
5938
5939        return NULL;
5940}
5941
5942const char *
5943ftrace_mod_address_lookup(unsigned long addr, unsigned long *size,
5944                   unsigned long *off, char **modname, char *sym)
5945{
5946        struct ftrace_mod_map *mod_map;
5947        const char *ret = NULL;
5948
5949        /* mod_map is freed via call_rcu() */
5950        preempt_disable();
5951        list_for_each_entry_rcu(mod_map, &ftrace_mod_maps, list) {
5952                ret = ftrace_func_address_lookup(mod_map, addr, size, off, sym);
5953                if (ret) {
5954                        if (modname)
5955                                *modname = mod_map->mod->name;
5956                        break;
5957                }
5958        }
5959        preempt_enable();
5960
5961        return ret;
5962}
5963
5964int ftrace_mod_get_kallsym(unsigned int symnum, unsigned long *value,
5965                           char *type, char *name,
5966                           char *module_name, int *exported)
5967{
5968        struct ftrace_mod_map *mod_map;
5969        struct ftrace_mod_func *mod_func;
5970
5971        preempt_disable();
5972        list_for_each_entry_rcu(mod_map, &ftrace_mod_maps, list) {
5973
5974                if (symnum >= mod_map->num_funcs) {
5975                        symnum -= mod_map->num_funcs;
5976                        continue;
5977                }
5978
5979                list_for_each_entry_rcu(mod_func, &mod_map->funcs, list) {
5980                        if (symnum > 1) {
5981                                symnum--;
5982                                continue;
5983                        }
5984
5985                        *value = mod_func->ip;
5986                        *type = 'T';
5987                        strlcpy(name, mod_func->name, KSYM_NAME_LEN);
5988                        strlcpy(module_name, mod_map->mod->name, MODULE_NAME_LEN);
5989                        *exported = 1;
5990                        preempt_enable();
5991                        return 0;
5992                }
5993                WARN_ON(1);
5994                break;
5995        }
5996        preempt_enable();
5997        return -ERANGE;
5998}
5999
6000#else
6001static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map,
6002                                struct dyn_ftrace *rec) { }
6003static inline struct ftrace_mod_map *
6004allocate_ftrace_mod_map(struct module *mod,
6005                        unsigned long start, unsigned long end)
6006{
6007        return NULL;
6008}
6009#endif /* CONFIG_MODULES */
6010
6011struct ftrace_init_func {
6012        struct list_head list;
6013        unsigned long ip;
6014};
6015
6016/* Clear any init ips from hashes */
6017static void
6018clear_func_from_hash(struct ftrace_init_func *func, struct ftrace_hash *hash)
6019{
6020        struct ftrace_func_entry *entry;
6021
6022        if (ftrace_hash_empty(hash))
6023                return;
6024
6025        entry = __ftrace_lookup_ip(hash, func->ip);
6026
6027        /*
6028         * Do not allow this rec to match again.
6029         * Yeah, it may waste some memory, but will be removed
6030         * if/when the hash is modified again.
6031         */
6032        if (entry)
6033                entry->ip = 0;
6034}
6035
6036static void
6037clear_func_from_hashes(struct ftrace_init_func *func)
6038{
6039        struct trace_array *tr;
6040
6041        mutex_lock(&trace_types_lock);
6042        list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6043                if (!tr->ops || !tr->ops->func_hash)
6044                        continue;
6045                mutex_lock(&tr->ops->func_hash->regex_lock);
6046                clear_func_from_hash(func, tr->ops->func_hash->filter_hash);
6047                clear_func_from_hash(func, tr->ops->func_hash->notrace_hash);
6048                mutex_unlock(&tr->ops->func_hash->regex_lock);
6049        }
6050        mutex_unlock(&trace_types_lock);
6051}
6052
6053static void add_to_clear_hash_list(struct list_head *clear_list,
6054                                   struct dyn_ftrace *rec)
6055{
6056        struct ftrace_init_func *func;
6057
6058        func = kmalloc(sizeof(*func), GFP_KERNEL);
6059        if (!func) {
6060                WARN_ONCE(1, "alloc failure, ftrace filter could be stale\n");
6061                return;
6062        }
6063
6064        func->ip = rec->ip;
6065        list_add(&func->list, clear_list);
6066}
6067
6068void ftrace_free_mem(struct module *mod, void *start_ptr, void *end_ptr)
6069{
6070        unsigned long start = (unsigned long)(start_ptr);
6071        unsigned long end = (unsigned long)(end_ptr);
6072        struct ftrace_page **last_pg = &ftrace_pages_start;
6073        struct ftrace_page *pg;
6074        struct dyn_ftrace *rec;
6075        struct dyn_ftrace key;
6076        struct ftrace_mod_map *mod_map = NULL;
6077        struct ftrace_init_func *func, *func_next;
6078        struct list_head clear_hash;
6079        int order;
6080
6081        INIT_LIST_HEAD(&clear_hash);
6082
6083        key.ip = start;
6084        key.flags = end;        /* overload flags, as it is unsigned long */
6085
6086        mutex_lock(&ftrace_lock);
6087
6088        /*
6089         * If we are freeing module init memory, then check if
6090         * any tracer is active. If so, we need to save a mapping of
6091         * the module functions being freed with the address.
6092         */
6093        if (mod && ftrace_ops_list != &ftrace_list_end)
6094                mod_map = allocate_ftrace_mod_map(mod, start, end);
6095
6096        for (pg = ftrace_pages_start; pg; last_pg = &pg->next, pg = *last_pg) {
6097                if (end < pg->records[0].ip ||
6098                    start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE))
6099                        continue;
6100 again:
6101                rec = bsearch(&key, pg->records, pg->index,
6102                              sizeof(struct dyn_ftrace),
6103                              ftrace_cmp_recs);
6104                if (!rec)
6105                        continue;
6106
6107                /* rec will be cleared from hashes after ftrace_lock unlock */
6108                add_to_clear_hash_list(&clear_hash, rec);
6109
6110                if (mod_map)
6111                        save_ftrace_mod_rec(mod_map, rec);
6112
6113                pg->index--;
6114                ftrace_update_tot_cnt--;
6115                if (!pg->index) {
6116                        *last_pg = pg->next;
6117                        order = get_count_order(pg->size / ENTRIES_PER_PAGE);
6118                        free_pages((unsigned long)pg->records, order);
6119                        kfree(pg);
6120                        pg = container_of(last_pg, struct ftrace_page, next);
6121                        if (!(*last_pg))
6122                                ftrace_pages = pg;
6123                        continue;
6124                }
6125                memmove(rec, rec + 1,
6126                        (pg->index - (rec - pg->records)) * sizeof(*rec));
6127                /* More than one function may be in this block */
6128                goto again;
6129        }
6130        mutex_unlock(&ftrace_lock);
6131
6132        list_for_each_entry_safe(func, func_next, &clear_hash, list) {
6133                clear_func_from_hashes(func);
6134                kfree(func);
6135        }
6136}
6137
6138void __init ftrace_free_init_mem(void)
6139{
6140        void *start = (void *)(&__init_begin);
6141        void *end = (void *)(&__init_end);
6142
6143        ftrace_free_mem(NULL, start, end);
6144}
6145
6146void __init ftrace_init(void)
6147{
6148        extern unsigned long __start_mcount_loc[];
6149        extern unsigned long __stop_mcount_loc[];
6150        unsigned long count, flags;
6151        int ret;
6152
6153        local_irq_save(flags);
6154        ret = ftrace_dyn_arch_init();
6155        local_irq_restore(flags);
6156        if (ret)
6157                goto failed;
6158
6159        count = __stop_mcount_loc - __start_mcount_loc;
6160        if (!count) {
6161                pr_info("ftrace: No functions to be traced?\n");
6162                goto failed;
6163        }
6164
6165        pr_info("ftrace: allocating %ld entries in %ld pages\n",
6166                count, count / ENTRIES_PER_PAGE + 1);
6167
6168        last_ftrace_enabled = ftrace_enabled = 1;
6169
6170        ret = ftrace_process_locs(NULL,
6171                                  __start_mcount_loc,
6172                                  __stop_mcount_loc);
6173
6174        set_ftrace_early_filters();
6175
6176        return;
6177 failed:
6178        ftrace_disabled = 1;
6179}
6180
6181/* Do nothing if arch does not support this */
6182void __weak arch_ftrace_update_trampoline(struct ftrace_ops *ops)
6183{
6184}
6185
6186static void ftrace_update_trampoline(struct ftrace_ops *ops)
6187{
6188        arch_ftrace_update_trampoline(ops);
6189}
6190
6191void ftrace_init_trace_array(struct trace_array *tr)
6192{
6193        INIT_LIST_HEAD(&tr->func_probes);
6194        INIT_LIST_HEAD(&tr->mod_trace);
6195        INIT_LIST_HEAD(&tr->mod_notrace);
6196}
6197#else
6198
6199struct ftrace_ops global_ops = {
6200        .func                   = ftrace_stub,
6201        .flags                  = FTRACE_OPS_FL_RECURSION_SAFE |
6202                                  FTRACE_OPS_FL_INITIALIZED |
6203                                  FTRACE_OPS_FL_PID,
6204};
6205
6206static int __init ftrace_nodyn_init(void)
6207{
6208        ftrace_enabled = 1;
6209        return 0;
6210}
6211core_initcall(ftrace_nodyn_init);
6212
6213static inline int ftrace_init_dyn_tracefs(struct dentry *d_tracer) { return 0; }
6214static inline void ftrace_startup_enable(int command) { }
6215static inline void ftrace_startup_all(int command) { }
6216
6217# define ftrace_startup_sysctl()        do { } while (0)
6218# define ftrace_shutdown_sysctl()       do { } while (0)
6219
6220static void ftrace_update_trampoline(struct ftrace_ops *ops)
6221{
6222}
6223
6224#endif /* CONFIG_DYNAMIC_FTRACE */
6225
6226__init void ftrace_init_global_array_ops(struct trace_array *tr)
6227{
6228        tr->ops = &global_ops;
6229        tr->ops->private = tr;
6230        ftrace_init_trace_array(tr);
6231}
6232
6233void ftrace_init_array_ops(struct trace_array *tr, ftrace_func_t func)
6234{
6235        /* If we filter on pids, update to use the pid function */
6236        if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {
6237                if (WARN_ON(tr->ops->func != ftrace_stub))
6238                        printk("ftrace ops had %pS for function\n",
6239                               tr->ops->func);
6240        }
6241        tr->ops->func = func;
6242        tr->ops->private = tr;
6243}
6244
6245void ftrace_reset_array_ops(struct trace_array *tr)
6246{
6247        tr->ops->func = ftrace_stub;
6248}
6249
6250static nokprobe_inline void
6251__ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
6252                       struct ftrace_ops *ignored, struct pt_regs *regs)
6253{
6254        struct ftrace_ops *op;
6255        int bit;
6256
6257        bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
6258        if (bit < 0)
6259                return;
6260
6261        /*
6262         * Some of the ops may be dynamically allocated,
6263         * they must be freed after a synchronize_rcu().
6264         */
6265        preempt_disable_notrace();
6266
6267        do_for_each_ftrace_op(op, ftrace_ops_list) {
6268                /*
6269                 * Check the following for each ops before calling their func:
6270                 *  if RCU flag is set, then rcu_is_watching() must be true
6271                 *  if PER_CPU is set, then ftrace_function_local_disable()
6272                 *                          must be false
6273                 *  Otherwise test if the ip matches the ops filter
6274                 *
6275                 * If any of the above fails then the op->func() is not executed.
6276                 */
6277                if ((!(op->flags & FTRACE_OPS_FL_RCU) || rcu_is_watching()) &&
6278                    ftrace_ops_test(op, ip, regs)) {
6279                        if (FTRACE_WARN_ON(!op->func)) {
6280                                pr_warn("op=%p %pS\n", op, op);
6281                                goto out;
6282                        }
6283                        op->func(ip, parent_ip, op, regs);
6284                }
6285        } while_for_each_ftrace_op(op);
6286out:
6287        preempt_enable_notrace();
6288        trace_clear_recursion(bit);
6289}
6290
6291/*
6292 * Some archs only support passing ip and parent_ip. Even though
6293 * the list function ignores the op parameter, we do not want any
6294 * C side effects, where a function is called without the caller
6295 * sending a third parameter.
6296 * Archs are to support both the regs and ftrace_ops at the same time.
6297 * If they support ftrace_ops, it is assumed they support regs.
6298 * If call backs want to use regs, they must either check for regs
6299 * being NULL, or CONFIG_DYNAMIC_FTRACE_WITH_REGS.
6300 * Note, CONFIG_DYNAMIC_FTRACE_WITH_REGS expects a full regs to be saved.
6301 * An architecture can pass partial regs with ftrace_ops and still
6302 * set the ARCH_SUPPORTS_FTRACE_OPS.
6303 */
6304#if ARCH_SUPPORTS_FTRACE_OPS
6305static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
6306                                 struct ftrace_ops *op, struct pt_regs *regs)
6307{
6308        __ftrace_ops_list_func(ip, parent_ip, NULL, regs);
6309}
6310NOKPROBE_SYMBOL(ftrace_ops_list_func);
6311#else
6312static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)
6313{
6314        __ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
6315}
6316NOKPROBE_SYMBOL(ftrace_ops_no_ops);
6317#endif
6318
6319/*
6320 * If there's only one function registered but it does not support
6321 * recursion, needs RCU protection and/or requires per cpu handling, then
6322 * this function will be called by the mcount trampoline.
6323 */
6324static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip,
6325                                   struct ftrace_ops *op, struct pt_regs *regs)
6326{
6327        int bit;
6328
6329        if ((op->flags & FTRACE_OPS_FL_RCU) && !rcu_is_watching())
6330                return;
6331
6332        bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
6333        if (bit < 0)
6334                return;
6335
6336        preempt_disable_notrace();
6337
6338        op->func(ip, parent_ip, op, regs);
6339
6340        preempt_enable_notrace();
6341        trace_clear_recursion(bit);
6342}
6343NOKPROBE_SYMBOL(ftrace_ops_assist_func);
6344
6345/**
6346 * ftrace_ops_get_func - get the function a trampoline should call
6347 * @ops: the ops to get the function for
6348 *
6349 * Normally the mcount trampoline will call the ops->func, but there
6350 * are times that it should not. For example, if the ops does not
6351 * have its own recursion protection, then it should call the
6352 * ftrace_ops_assist_func() instead.
6353 *
6354 * Returns the function that the trampoline should call for @ops.
6355 */
6356ftrace_func_t ftrace_ops_get_func(struct ftrace_ops *ops)
6357{
6358        /*
6359         * If the function does not handle recursion, needs to be RCU safe,
6360         * or does per cpu logic, then we need to call the assist handler.
6361         */
6362        if (!(ops->flags & FTRACE_OPS_FL_RECURSION_SAFE) ||
6363            ops->flags & FTRACE_OPS_FL_RCU)
6364                return ftrace_ops_assist_func;
6365
6366        return ops->func;
6367}
6368
6369static void
6370ftrace_filter_pid_sched_switch_probe(void *data, bool preempt,
6371                    struct task_struct *prev, struct task_struct *next)
6372{
6373        struct trace_array *tr = data;
6374        struct trace_pid_list *pid_list;
6375
6376        pid_list = rcu_dereference_sched(tr->function_pids);
6377
6378        this_cpu_write(tr->trace_buffer.data->ftrace_ignore_pid,
6379                       trace_ignore_this_task(pid_list, next));
6380}
6381
6382static void
6383ftrace_pid_follow_sched_process_fork(void *data,
6384                                     struct task_struct *self,
6385                                     struct task_struct *task)
6386{
6387        struct trace_pid_list *pid_list;
6388        struct trace_array *tr = data;
6389
6390        pid_list = rcu_dereference_sched(tr->function_pids);
6391        trace_filter_add_remove_task(pid_list, self, task);
6392}
6393
6394static void
6395ftrace_pid_follow_sched_process_exit(void *data, struct task_struct *task)
6396{
6397        struct trace_pid_list *pid_list;
6398        struct trace_array *tr = data;
6399
6400        pid_list = rcu_dereference_sched(tr->function_pids);
6401        trace_filter_add_remove_task(pid_list, NULL, task);
6402}
6403
6404void ftrace_pid_follow_fork(struct trace_array *tr, bool enable)
6405{
6406        if (enable) {
6407                register_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork,
6408                                                  tr);
6409                register_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit,
6410                                                  tr);
6411        } else {
6412                unregister_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork,
6413                                                    tr);
6414                unregister_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit,
6415                                                    tr);
6416        }
6417}
6418
6419static void clear_ftrace_pids(struct trace_array *tr)
6420{
6421        struct trace_pid_list *pid_list;
6422        int cpu;
6423
6424        pid_list = rcu_dereference_protected(tr->function_pids,
6425                                             lockdep_is_held(&ftrace_lock));
6426        if (!pid_list)
6427                return;
6428
6429        unregister_trace_sched_switch(ftrace_filter_pid_sched_switch_probe, tr);
6430
6431        for_each_possible_cpu(cpu)
6432                per_cpu_ptr(tr->trace_buffer.data, cpu)->ftrace_ignore_pid = false;
6433
6434        rcu_assign_pointer(tr->function_pids, NULL);
6435
6436        /* Wait till all users are no longer using pid filtering */
6437        synchronize_rcu();
6438
6439        trace_free_pid_list(pid_list);
6440}
6441
6442void ftrace_clear_pids(struct trace_array *tr)
6443{
6444        mutex_lock(&ftrace_lock);
6445
6446        clear_ftrace_pids(tr);
6447
6448        mutex_unlock(&ftrace_lock);
6449}
6450
6451static void ftrace_pid_reset(struct trace_array *tr)
6452{
6453        mutex_lock(&ftrace_lock);
6454        clear_ftrace_pids(tr);
6455
6456        ftrace_update_pid_func();
6457        ftrace_startup_all(0);
6458
6459        mutex_unlock(&ftrace_lock);
6460}
6461
6462/* Greater than any max PID */
6463#define FTRACE_NO_PIDS          (void *)(PID_MAX_LIMIT + 1)
6464
6465static void *fpid_start(struct seq_file *m, loff_t *pos)
6466        __acquires(RCU)
6467{
6468        struct trace_pid_list *pid_list;
6469        struct trace_array *tr = m->private;
6470
6471        mutex_lock(&ftrace_lock);
6472        rcu_read_lock_sched();
6473
6474        pid_list = rcu_dereference_sched(tr->function_pids);
6475
6476        if (!pid_list)
6477                return !(*pos) ? FTRACE_NO_PIDS : NULL;
6478
6479        return trace_pid_start(pid_list, pos);
6480}
6481
6482static void *fpid_next(struct seq_file *m, void *v, loff_t *pos)
6483{
6484        struct trace_array *tr = m->private;
6485        struct trace_pid_list *pid_list = rcu_dereference_sched(tr->function_pids);
6486
6487        if (v == FTRACE_NO_PIDS)
6488                return NULL;
6489
6490        return trace_pid_next(pid_list, v, pos);
6491}
6492
6493static void fpid_stop(struct seq_file *m, void *p)
6494        __releases(RCU)
6495{
6496        rcu_read_unlock_sched();
6497        mutex_unlock(&ftrace_lock);
6498}
6499
6500static int fpid_show(struct seq_file *m, void *v)
6501{
6502        if (v == FTRACE_NO_PIDS) {
6503                seq_puts(m, "no pid\n");
6504                return 0;
6505        }
6506
6507        return trace_pid_show(m, v);
6508}
6509
6510static const struct seq_operations ftrace_pid_sops = {
6511        .start = fpid_start,
6512        .next = fpid_next,
6513        .stop = fpid_stop,
6514        .show = fpid_show,
6515};
6516
6517static int
6518ftrace_pid_open(struct inode *inode, struct file *file)
6519{
6520        struct trace_array *tr = inode->i_private;
6521        struct seq_file *m;
6522        int ret = 0;
6523
6524        if (trace_array_get(tr) < 0)
6525                return -ENODEV;
6526
6527        if ((file->f_mode & FMODE_WRITE) &&
6528            (file->f_flags & O_TRUNC))
6529                ftrace_pid_reset(tr);
6530
6531        ret = seq_open(file, &ftrace_pid_sops);
6532        if (ret < 0) {
6533                trace_array_put(tr);
6534        } else {
6535                m = file->private_data;
6536                /* copy tr over to seq ops */
6537                m->private = tr;
6538        }
6539
6540        return ret;
6541}
6542
6543static void ignore_task_cpu(void *data)
6544{
6545        struct trace_array *tr = data;
6546        struct trace_pid_list *pid_list;
6547
6548        /*
6549         * This function is called by on_each_cpu() while the
6550         * event_mutex is held.
6551         */
6552        pid_list = rcu_dereference_protected(tr->function_pids,
6553                                             mutex_is_locked(&ftrace_lock));
6554
6555        this_cpu_write(tr->trace_buffer.data->ftrace_ignore_pid,
6556                       trace_ignore_this_task(pid_list, current));
6557}
6558
6559static ssize_t
6560ftrace_pid_write(struct file *filp, const char __user *ubuf,
6561                   size_t cnt, loff_t *ppos)
6562{
6563        struct seq_file *m = filp->private_data;
6564        struct trace_array *tr = m->private;
6565        struct trace_pid_list *filtered_pids = NULL;
6566        struct trace_pid_list *pid_list;
6567        ssize_t ret;
6568
6569        if (!cnt)
6570                return 0;
6571
6572        mutex_lock(&ftrace_lock);
6573
6574        filtered_pids = rcu_dereference_protected(tr->function_pids,
6575                                             lockdep_is_held(&ftrace_lock));
6576
6577        ret = trace_pid_write(filtered_pids, &pid_list, ubuf, cnt);
6578        if (ret < 0)
6579                goto out;
6580
6581        rcu_assign_pointer(tr->function_pids, pid_list);
6582
6583        if (filtered_pids) {
6584                synchronize_rcu();
6585                trace_free_pid_list(filtered_pids);
6586        } else if (pid_list) {
6587                /* Register a probe to set whether to ignore the tracing of a task */
6588                register_trace_sched_switch(ftrace_filter_pid_sched_switch_probe, tr);
6589        }
6590
6591        /*
6592         * Ignoring of pids is done at task switch. But we have to
6593         * check for those tasks that are currently running.
6594         * Always do this in case a pid was appended or removed.
6595         */
6596        on_each_cpu(ignore_task_cpu, tr, 1);
6597
6598        ftrace_update_pid_func();
6599        ftrace_startup_all(0);
6600 out:
6601        mutex_unlock(&ftrace_lock);
6602
6603        if (ret > 0)
6604                *ppos += ret;
6605
6606        return ret;
6607}
6608
6609static int
6610ftrace_pid_release(struct inode *inode, struct file *file)
6611{
6612        struct trace_array *tr = inode->i_private;
6613
6614        trace_array_put(tr);
6615
6616        return seq_release(inode, file);
6617}
6618
6619static const struct file_operations ftrace_pid_fops = {
6620        .open           = ftrace_pid_open,
6621        .write          = ftrace_pid_write,
6622        .read           = seq_read,
6623        .llseek         = tracing_lseek,
6624        .release        = ftrace_pid_release,
6625};
6626
6627void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d_tracer)
6628{
6629        trace_create_file("set_ftrace_pid", 0644, d_tracer,
6630                            tr, &ftrace_pid_fops);
6631}
6632
6633void __init ftrace_init_tracefs_toplevel(struct trace_array *tr,
6634                                         struct dentry *d_tracer)
6635{
6636        /* Only the top level directory has the dyn_tracefs and profile */
6637        WARN_ON(!(tr->flags & TRACE_ARRAY_FL_GLOBAL));
6638
6639        ftrace_init_dyn_tracefs(d_tracer);
6640        ftrace_profile_tracefs(d_tracer);
6641}
6642
6643/**
6644 * ftrace_kill - kill ftrace
6645 *
6646 * This function should be used by panic code. It stops ftrace
6647 * but in a not so nice way. If you need to simply kill ftrace
6648 * from a non-atomic section, use ftrace_kill.
6649 */
6650void ftrace_kill(void)
6651{
6652        ftrace_disabled = 1;
6653        ftrace_enabled = 0;
6654        ftrace_trace_function = ftrace_stub;
6655}
6656
6657/**
6658 * Test if ftrace is dead or not.
6659 */
6660int ftrace_is_dead(void)
6661{
6662        return ftrace_disabled;
6663}
6664
6665/**
6666 * register_ftrace_function - register a function for profiling
6667 * @ops - ops structure that holds the function for profiling.
6668 *
6669 * Register a function to be called by all functions in the
6670 * kernel.
6671 *
6672 * Note: @ops->func and all the functions it calls must be labeled
6673 *       with "notrace", otherwise it will go into a
6674 *       recursive loop.
6675 */
6676int register_ftrace_function(struct ftrace_ops *ops)
6677{
6678        int ret = -1;
6679
6680        ftrace_ops_init(ops);
6681
6682        mutex_lock(&ftrace_lock);
6683
6684        ret = ftrace_startup(ops, 0);
6685
6686        mutex_unlock(&ftrace_lock);
6687
6688        return ret;
6689}
6690EXPORT_SYMBOL_GPL(register_ftrace_function);
6691
6692/**
6693 * unregister_ftrace_function - unregister a function for profiling.
6694 * @ops - ops structure that holds the function to unregister
6695 *
6696 * Unregister a function that was added to be called by ftrace profiling.
6697 */
6698int unregister_ftrace_function(struct ftrace_ops *ops)
6699{
6700        int ret;
6701
6702        mutex_lock(&ftrace_lock);
6703        ret = ftrace_shutdown(ops, 0);
6704        mutex_unlock(&ftrace_lock);
6705
6706        return ret;
6707}
6708EXPORT_SYMBOL_GPL(unregister_ftrace_function);
6709
6710int
6711ftrace_enable_sysctl(struct ctl_table *table, int write,
6712                     void __user *buffer, size_t *lenp,
6713                     loff_t *ppos)
6714{
6715        int ret = -ENODEV;
6716
6717        mutex_lock(&ftrace_lock);
6718
6719        if (unlikely(ftrace_disabled))
6720                goto out;
6721
6722        ret = proc_dointvec(table, write, buffer, lenp, ppos);
6723
6724        if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled))
6725                goto out;
6726
6727        last_ftrace_enabled = !!ftrace_enabled;
6728
6729        if (ftrace_enabled) {
6730
6731                /* we are starting ftrace again */
6732                if (rcu_dereference_protected(ftrace_ops_list,
6733                        lockdep_is_held(&ftrace_lock)) != &ftrace_list_end)
6734                        update_ftrace_function();
6735
6736                ftrace_startup_sysctl();
6737
6738        } else {
6739                /* stopping ftrace calls (just send to ftrace_stub) */
6740                ftrace_trace_function = ftrace_stub;
6741
6742                ftrace_shutdown_sysctl();
6743        }
6744
6745 out:
6746        mutex_unlock(&ftrace_lock);
6747        return ret;
6748}
6749