Merge tag 'trace-4.1-tracefs' of git://git.kernel.org/pub/scm/linux/kernel/git/rosted...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 14 Apr 2015 17:22:29 +0000 (10:22 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 14 Apr 2015 17:22:29 +0000 (10:22 -0700)
Pull tracefs from Steven Rostedt:
 "This adds the new tracefs file system.

  This has been in linux-next for more than one release, as I had it
  ready for the 4.0 merge window, but a last minute thing that needed to
  go into Linux first had to be done.  That was that perf hard coded the
  file system number when reading /sys/kernel/debugfs/tracing directory
  making sure that the path had the debugfs mount # before it would
  parse the tracing file.  This broke other use cases of perf, and the
  check is removed.

  Now when mounting /sys/kernel/debug, tracefs is automatically mounted
  in /sys/kernel/debug/tracing such that old tools will still see that
  path as expected.  But now system admins can mount tracefs directly
  and not need to mount debugfs, which can expose security issues.  A
  new directory is created when tracefs is configured such that system
  admins can now mount it separately (/sys/kernel/tracing)"

* tag 'trace-4.1-tracefs' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Have mkdir and rmdir be part of tracefs
  tracefs: Add directory /sys/kernel/tracing
  tracing: Automatically mount tracefs on debugfs/tracing
  tracing: Convert the tracing facility over to use tracefs
  tracefs: Add new tracefs file system
  tracing: Create cmdline tracer options on tracing fs init
  tracing: Only create tracer options files if directory exists
  debugfs: Provide a file creation function that also takes an initial size

1  2 
fs/Makefile
kernel/trace/ftrace.c
kernel/trace/trace.c
kernel/trace/trace_kprobe.c

diff --combined fs/Makefile
index a88ac4838c9e2b89cffae17a72aa36d195356518,d244b8d973ac1c8c0209108919c91d77c1bbc540..cb92fd4c31729cc5cf799a3278c57ad3c1af6314
@@@ -28,7 -28,6 +28,7 @@@ obj-$(CONFIG_SIGNALFD)                += signalfd.
  obj-$(CONFIG_TIMERFD)         += timerfd.o
  obj-$(CONFIG_EVENTFD)         += eventfd.o
  obj-$(CONFIG_AIO)               += aio.o
 +obj-$(CONFIG_FS_DAX)          += dax.o
  obj-$(CONFIG_FILE_LOCKING)      += locks.o
  obj-$(CONFIG_COMPAT)          += compat.o compat_ioctl.o
  obj-$(CONFIG_BINFMT_AOUT)     += binfmt_aout.o
@@@ -38,6 -37,7 +38,6 @@@ obj-$(CONFIG_BINFMT_SCRIPT)   += binfmt_s
  obj-$(CONFIG_BINFMT_ELF)      += binfmt_elf.o
  obj-$(CONFIG_COMPAT_BINFMT_ELF)       += compat_binfmt_elf.o
  obj-$(CONFIG_BINFMT_ELF_FDPIC)        += binfmt_elf_fdpic.o
 -obj-$(CONFIG_BINFMT_SOM)      += binfmt_som.o
  obj-$(CONFIG_BINFMT_FLAT)     += binfmt_flat.o
  
  obj-$(CONFIG_FS_MBCACHE)      += mbcache.o
@@@ -118,6 -118,7 +118,7 @@@ obj-$(CONFIG_HOSTFS)               += hostfs
  obj-$(CONFIG_HPPFS)           += hppfs/
  obj-$(CONFIG_CACHEFILES)      += cachefiles/
  obj-$(CONFIG_DEBUG_FS)                += debugfs/
+ obj-$(CONFIG_TRACING)         += tracefs/
  obj-$(CONFIG_OCFS2_FS)                += ocfs2/
  obj-$(CONFIG_BTRFS_FS)                += btrfs/
  obj-$(CONFIG_GFS2_FS)           += gfs2/
diff --combined kernel/trace/ftrace.c
index 4f228024055b119d93279705ec4c42d7475c72f7,fcc0e7052a79de9c6c921e0a17db37be126f6e9c..5a2e0b53af307ae02bb437166989f0cece1bdb3a
@@@ -18,7 -18,7 +18,7 @@@
  #include <linux/kallsyms.h>
  #include <linux/seq_file.h>
  #include <linux/suspend.h>
- #include <linux/debugfs.h>
+ #include <linux/tracefs.h>
  #include <linux/hardirq.h>
  #include <linux/kthread.h>
  #include <linux/uaccess.h>
@@@ -1008,7 -1008,7 +1008,7 @@@ static struct tracer_stat function_stat
        .stat_show      = function_stat_show
  };
  
- static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
+ static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
  {
        struct ftrace_profile_stat *stat;
        struct dentry *entry;
                }
        }
  
-       entry = debugfs_create_file("function_profile_enabled", 0644,
+       entry = tracefs_create_file("function_profile_enabled", 0644,
                                    d_tracer, NULL, &ftrace_profile_fops);
        if (!entry)
-               pr_warning("Could not create debugfs "
+               pr_warning("Could not create tracefs "
                           "'function_profile_enabled' entry\n");
  }
  
  #else /* CONFIG_FUNCTION_PROFILER */
- static __init void ftrace_profile_debugfs(struct dentry *d_tracer)
+ static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
  {
  }
  #endif /* CONFIG_FUNCTION_PROFILER */
  
  static struct pid * const ftrace_swapper_pid = &init_struct_pid;
  
 +#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 +static int ftrace_graph_active;
 +#else
 +# define ftrace_graph_active 0
 +#endif
 +
  #ifdef CONFIG_DYNAMIC_FTRACE
  
  static struct ftrace_ops *removed_ops;
@@@ -2047,12 -2041,8 +2047,12 @@@ static int ftrace_check_record(struct d
                if (!ftrace_rec_count(rec))
                        rec->flags = 0;
                else
 -                      /* Just disable the record (keep REGS state) */
 -                      rec->flags &= ~FTRACE_FL_ENABLED;
 +                      /*
 +                       * Just disable the record, but keep the ops TRAMP
 +                       * and REGS states. The _EN flags must be disabled though.
 +                       */
 +                      rec->flags &= ~(FTRACE_FL_ENABLED | FTRACE_FL_TRAMP_EN |
 +                                      FTRACE_FL_REGS_EN);
        }
  
        return FTRACE_UPDATE_MAKE_NOP;
@@@ -2698,36 -2688,24 +2698,36 @@@ static int ftrace_shutdown(struct ftrac
  
  static void ftrace_startup_sysctl(void)
  {
 +      int command;
 +
        if (unlikely(ftrace_disabled))
                return;
  
        /* Force update next time */
        saved_ftrace_func = NULL;
        /* ftrace_start_up is true if we want ftrace running */
 -      if (ftrace_start_up)
 -              ftrace_run_update_code(FTRACE_UPDATE_CALLS);
 +      if (ftrace_start_up) {
 +              command = FTRACE_UPDATE_CALLS;
 +              if (ftrace_graph_active)
 +                      command |= FTRACE_START_FUNC_RET;
 +              ftrace_startup_enable(command);
 +      }
  }
  
  static void ftrace_shutdown_sysctl(void)
  {
 +      int command;
 +
        if (unlikely(ftrace_disabled))
                return;
  
        /* ftrace_start_up is true if ftrace is running */
 -      if (ftrace_start_up)
 -              ftrace_run_update_code(FTRACE_DISABLE_CALLS);
 +      if (ftrace_start_up) {
 +              command = FTRACE_DISABLE_CALLS;
 +              if (ftrace_graph_active)
 +                      command |= FTRACE_STOP_FUNC_RET;
 +              ftrace_run_update_code(command);
 +      }
  }
  
  static cycle_t                ftrace_update_time;
@@@ -4712,7 -4690,7 +4712,7 @@@ void ftrace_destroy_filter_files(struc
        mutex_unlock(&ftrace_lock);
  }
  
- static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer)
+ static __init int ftrace_init_dyn_tracefs(struct dentry *d_tracer)
  {
  
        trace_create_file("available_filter_functions", 0444,
@@@ -5020,7 -4998,7 +5020,7 @@@ static int __init ftrace_nodyn_init(voi
  }
  core_initcall(ftrace_nodyn_init);
  
- static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; }
+ static inline int ftrace_init_dyn_tracefs(struct dentry *d_tracer) { return 0; }
  static inline void ftrace_startup_enable(int command) { }
  static inline void ftrace_startup_all(int command) { }
  /* Keep as macros so we do not need to define the commands */
@@@ -5473,7 -5451,7 +5473,7 @@@ static const struct file_operations ftr
        .release        = ftrace_pid_release,
  };
  
- static __init int ftrace_init_debugfs(void)
+ static __init int ftrace_init_tracefs(void)
  {
        struct dentry *d_tracer;
  
        if (IS_ERR(d_tracer))
                return 0;
  
-       ftrace_init_dyn_debugfs(d_tracer);
+       ftrace_init_dyn_tracefs(d_tracer);
  
        trace_create_file("set_ftrace_pid", 0644, d_tracer,
                            NULL, &ftrace_pid_fops);
  
-       ftrace_profile_debugfs(d_tracer);
+       ftrace_profile_tracefs(d_tracer);
  
        return 0;
  }
- fs_initcall(ftrace_init_debugfs);
+ fs_initcall(ftrace_init_tracefs);
  
  /**
   * ftrace_kill - kill ftrace
@@@ -5580,12 -5558,12 +5580,12 @@@ ftrace_enable_sysctl(struct ctl_table *
  
        if (ftrace_enabled) {
  
 -              ftrace_startup_sysctl();
 -
                /* we are starting ftrace again */
                if (ftrace_ops_list != &ftrace_list_end)
                        update_ftrace_function();
  
 +              ftrace_startup_sysctl();
 +
        } else {
                /* stopping ftrace calls (just send to ftrace_stub) */
                ftrace_trace_function = ftrace_stub;
@@@ -5612,6 -5590,8 +5612,6 @@@ static struct ftrace_ops graph_ops = 
        ASSIGN_OPS_HASH(graph_ops, &global_ops.local_hash)
  };
  
 -static int ftrace_graph_active;
 -
  int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
  {
        return 0;
diff --combined kernel/trace/trace.c
index 62c6506d663fa11e79128759bd03103d12ed7c0f,3c8913bac2043044f65bdd5817b8ee04a8bce1f9..bcfa2add6dda9ef171cda714f444917c2e8a4f03
@@@ -20,6 -20,7 +20,7 @@@
  #include <linux/notifier.h>
  #include <linux/irqflags.h>
  #include <linux/debugfs.h>
+ #include <linux/tracefs.h>
  #include <linux/pagemap.h>
  #include <linux/hardirq.h>
  #include <linux/linkage.h>
@@@ -31,6 -32,7 +32,7 @@@
  #include <linux/splice.h>
  #include <linux/kdebug.h>
  #include <linux/string.h>
+ #include <linux/mount.h>
  #include <linux/rwsem.h>
  #include <linux/slab.h>
  #include <linux/ctype.h>
@@@ -3353,12 -3355,12 +3355,12 @@@ tracing_cpumask_read(struct file *filp
  
        mutex_lock(&tracing_cpumask_update_lock);
  
 -      len = cpumask_scnprintf(mask_str, count, tr->tracing_cpumask);
 -      if (count - len < 2) {
 +      len = snprintf(mask_str, count, "%*pb\n",
 +                     cpumask_pr_args(tr->tracing_cpumask));
 +      if (len >= count) {
                count = -EINVAL;
                goto out_err;
        }
 -      len += sprintf(mask_str + len, "\n");
        count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
  
  out_err:
@@@ -4105,9 -4107,24 +4107,24 @@@ static void tracing_set_nop(struct trac
        tr->current_trace = &nop_trace;
  }
  
- static int tracing_set_tracer(struct trace_array *tr, const char *buf)
+ static void update_tracer_options(struct trace_array *tr, struct tracer *t)
  {
        static struct trace_option_dentry *topts;
+       /* Only enable if the directory has been created already. */
+       if (!tr->dir)
+               return;
+       /* Currently, only the top instance has options */
+       if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL))
+               return;
+       destroy_trace_option_files(topts);
+       topts = create_trace_option_files(tr, t);
+ }
+ static int tracing_set_tracer(struct trace_array *tr, const char *buf)
+ {
        struct tracer *t;
  #ifdef CONFIG_TRACER_MAX_TRACE
        bool had_max_tr;
                free_snapshot(tr);
        }
  #endif
-       /* Currently, only the top instance has options */
-       if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {
-               destroy_trace_option_files(topts);
-               topts = create_trace_option_files(tr, t);
-       }
+       update_tracer_options(tr, t);
  
  #ifdef CONFIG_TRACER_MAX_TRACE
        if (t->use_max_tr && !had_max_tr) {
@@@ -4928,7 -4941,7 +4941,7 @@@ tracing_mark_write(struct file *filp, c
        *fpos += written;
  
   out_unlock:
 -      for (i = 0; i < nr_pages; i++){
 +      for (i = nr_pages - 1; i >= 0; i--) {
                kunmap_atomic(map_page[i]);
                put_page(pages[i]);
        }
@@@ -5817,6 -5830,14 +5830,14 @@@ static inline __init int register_snaps
  
  static struct dentry *tracing_get_dentry(struct trace_array *tr)
  {
+       if (WARN_ON(!tr->dir))
+               return ERR_PTR(-ENODEV);
+       /* Top directory uses NULL as the parent */
+       if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
+               return NULL;
+       /* All sub buffers have a descriptor */
        return tr->dir;
  }
  
@@@ -5831,10 -5852,10 +5852,10 @@@ static struct dentry *tracing_dentry_pe
        if (IS_ERR(d_tracer))
                return NULL;
  
-       tr->percpu_dir = debugfs_create_dir("per_cpu", d_tracer);
+       tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
  
        WARN_ONCE(!tr->percpu_dir,
-                 "Could not create debugfs directory 'per_cpu/%d'\n", cpu);
+                 "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
  
        return tr->percpu_dir;
  }
@@@ -5851,7 -5872,7 +5872,7 @@@ trace_create_cpu_file(const char *name
  }
  
  static void
- tracing_init_debugfs_percpu(struct trace_array *tr, long cpu)
+ tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
  {
        struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
        struct dentry *d_cpu;
                return;
  
        snprintf(cpu_dir, 30, "cpu%ld", cpu);
-       d_cpu = debugfs_create_dir(cpu_dir, d_percpu);
+       d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
        if (!d_cpu) {
-               pr_warning("Could not create debugfs '%s' entry\n", cpu_dir);
+               pr_warning("Could not create tracefs '%s' entry\n", cpu_dir);
                return;
        }
  
@@@ -6015,9 -6036,9 +6036,9 @@@ struct dentry *trace_create_file(const 
  {
        struct dentry *ret;
  
-       ret = debugfs_create_file(name, mode, parent, data, fops);
+       ret = tracefs_create_file(name, mode, parent, data, fops);
        if (!ret)
-               pr_warning("Could not create debugfs '%s' entry\n", name);
+               pr_warning("Could not create tracefs '%s' entry\n", name);
  
        return ret;
  }
@@@ -6034,9 -6055,9 +6055,9 @@@ static struct dentry *trace_options_ini
        if (IS_ERR(d_tracer))
                return NULL;
  
-       tr->options = debugfs_create_dir("options", d_tracer);
+       tr->options = tracefs_create_dir("options", d_tracer);
        if (!tr->options) {
-               pr_warning("Could not create debugfs directory 'options'\n");
+               pr_warning("Could not create tracefs directory 'options'\n");
                return NULL;
        }
  
@@@ -6105,7 -6126,7 +6126,7 @@@ destroy_trace_option_files(struct trace
                return;
  
        for (cnt = 0; topts[cnt].opt; cnt++)
-               debugfs_remove(topts[cnt].entry);
+               tracefs_remove(topts[cnt].entry);
  
        kfree(topts);
  }
@@@ -6194,7 -6215,7 +6215,7 @@@ static const struct file_operations rb_
  struct dentry *trace_instance_dir;
  
  static void
- init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer);
+ init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
  
  static int
  allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
@@@ -6271,7 -6292,7 +6292,7 @@@ static void free_trace_buffers(struct t
  #endif
  }
  
- static int new_instance_create(const char *name)
+ static int instance_mkdir(const char *name)
  {
        struct trace_array *tr;
        int ret;
        if (allocate_trace_buffers(tr, trace_buf_size) < 0)
                goto out_free_tr;
  
-       tr->dir = debugfs_create_dir(name, trace_instance_dir);
+       tr->dir = tracefs_create_dir(name, trace_instance_dir);
        if (!tr->dir)
                goto out_free_tr;
  
        ret = event_trace_add_tracer(tr->dir, tr);
        if (ret) {
-               debugfs_remove_recursive(tr->dir);
+               tracefs_remove_recursive(tr->dir);
                goto out_free_tr;
        }
  
-       init_tracer_debugfs(tr, tr->dir);
+       init_tracer_tracefs(tr, tr->dir);
  
        list_add(&tr->list, &ftrace_trace_arrays);
  
  
  }
  
- static int instance_delete(const char *name)
+ static int instance_rmdir(const char *name)
  {
        struct trace_array *tr;
        int found = 0;
        return ret;
  }
  
- static int instance_mkdir (struct inode *inode, struct dentry *dentry, umode_t mode)
- {
-       struct dentry *parent;
-       int ret;
-       /* Paranoid: Make sure the parent is the "instances" directory */
-       parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
-       if (WARN_ON_ONCE(parent != trace_instance_dir))
-               return -ENOENT;
-       /*
-        * The inode mutex is locked, but debugfs_create_dir() will also
-        * take the mutex. As the instances directory can not be destroyed
-        * or changed in any other way, it is safe to unlock it, and
-        * let the dentry try. If two users try to make the same dir at
-        * the same time, then the new_instance_create() will determine the
-        * winner.
-        */
-       mutex_unlock(&inode->i_mutex);
-       ret = new_instance_create(dentry->d_iname);
-       mutex_lock(&inode->i_mutex);
-       return ret;
- }
- static int instance_rmdir(struct inode *inode, struct dentry *dentry)
- {
-       struct dentry *parent;
-       int ret;
-       /* Paranoid: Make sure the parent is the "instances" directory */
-       parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
-       if (WARN_ON_ONCE(parent != trace_instance_dir))
-               return -ENOENT;
-       /* The caller did a dget() on dentry */
-       mutex_unlock(&dentry->d_inode->i_mutex);
-       /*
-        * The inode mutex is locked, but debugfs_create_dir() will also
-        * take the mutex. As the instances directory can not be destroyed
-        * or changed in any other way, it is safe to unlock it, and
-        * let the dentry try. If two users try to make the same dir at
-        * the same time, then the instance_delete() will determine the
-        * winner.
-        */
-       mutex_unlock(&inode->i_mutex);
-       ret = instance_delete(dentry->d_iname);
-       mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
-       mutex_lock(&dentry->d_inode->i_mutex);
-       return ret;
- }
- static const struct inode_operations instance_dir_inode_operations = {
-       .lookup         = simple_lookup,
-       .mkdir          = instance_mkdir,
-       .rmdir          = instance_rmdir,
- };
  static __init void create_trace_instances(struct dentry *d_tracer)
  {
-       trace_instance_dir = debugfs_create_dir("instances", d_tracer);
+       trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
+                                                        instance_mkdir,
+                                                        instance_rmdir);
        if (WARN_ON(!trace_instance_dir))
                return;
-       /* Hijack the dir inode operations, to allow mkdir */
-       trace_instance_dir->d_inode->i_op = &instance_dir_inode_operations;
  }
  
  static void
- init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
+ init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
  {
        int cpu;
  
  #endif
  
        for_each_tracing_cpu(cpu)
-               tracing_init_debugfs_percpu(tr, cpu);
+               tracing_init_tracefs_percpu(tr, cpu);
  
  }
  
+ static struct vfsmount *trace_automount(void *ingore)
+ {
+       struct vfsmount *mnt;
+       struct file_system_type *type;
+       /*
+        * To maintain backward compatibility for tools that mount
+        * debugfs to get to the tracing facility, tracefs is automatically
+        * mounted to the debugfs/tracing directory.
+        */
+       type = get_fs_type("tracefs");
+       if (!type)
+               return NULL;
+       mnt = vfs_kern_mount(type, 0, "tracefs", NULL);
+       put_filesystem(type);
+       if (IS_ERR(mnt))
+               return NULL;
+       mntget(mnt);
+       return mnt;
+ }
  /**
   * tracing_init_dentry - initialize top level trace array
   *
@@@ -6526,23 -6504,30 +6504,30 @@@ struct dentry *tracing_init_dentry(void
  {
        struct trace_array *tr = &global_trace;
  
+       /* The top level trace array uses  NULL as parent */
        if (tr->dir)
-               return tr->dir;
+               return NULL;
  
        if (WARN_ON(!debugfs_initialized()))
                return ERR_PTR(-ENODEV);
  
-       tr->dir = debugfs_create_dir("tracing", NULL);
+       /*
+        * As there may still be users that expect the tracing
+        * files to exist in debugfs/tracing, we must automount
+        * the tracefs file system there, so older tools still
+        * work with the newer kerenl.
+        */
+       tr->dir = debugfs_create_automount("tracing", NULL,
+                                          trace_automount, NULL);
        if (!tr->dir) {
                pr_warn_once("Could not create debugfs directory 'tracing'\n");
                return ERR_PTR(-ENOMEM);
        }
  
-       return tr->dir;
+       return NULL;
  }
  
- static __init int tracer_init_debugfs(void)
+ static __init int tracer_init_tracefs(void)
  {
        struct dentry *d_tracer;
  
        if (IS_ERR(d_tracer))
                return 0;
  
-       init_tracer_debugfs(&global_trace, d_tracer);
+       init_tracer_tracefs(&global_trace, d_tracer);
  
        trace_create_file("tracing_thresh", 0644, d_tracer,
                        &global_trace, &tracing_thresh_fops);
  
        create_trace_options_dir(&global_trace);
  
+       /* If the tracer was started via cmdline, create options for it here */
+       if (global_trace.current_trace != &nop_trace)
+               update_tracer_options(&global_trace, global_trace.current_trace);
        return 0;
  }
  
@@@ -6910,5 -6899,5 +6899,5 @@@ __init static int clear_boot_tracer(voi
        return 0;
  }
  
- fs_initcall(tracer_init_debugfs);
+ fs_initcall(tracer_init_tracefs);
  late_initcall(clear_boot_tracer);
index d73f565b4e062127789bce243dc9c2e365dbb175,c1c6655847c8a4af01eda670dd51c9170be72bac..ed998fbf09ced408c5fe003430a00ea2430b5fa6
@@@ -1148,7 -1148,7 +1148,7 @@@ kprobe_perf_func(struct trace_kprobe *t
        size = ALIGN(__size + sizeof(u32), sizeof(u64));
        size -= sizeof(u32);
  
 -      entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx);
 +      entry = perf_trace_buf_prepare(size, call->event.type, NULL, &rctx);
        if (!entry)
                return;
  
@@@ -1179,7 -1179,7 +1179,7 @@@ kretprobe_perf_func(struct trace_kprob
        size = ALIGN(__size + sizeof(u32), sizeof(u64));
        size -= sizeof(u32);
  
 -      entry = perf_trace_buf_prepare(size, call->event.type, regs, &rctx);
 +      entry = perf_trace_buf_prepare(size, call->event.type, NULL, &rctx);
        if (!entry)
                return;
  
@@@ -1310,7 -1310,7 +1310,7 @@@ static int unregister_kprobe_event(stru
        return ret;
  }
  
- /* Make a debugfs interface for controlling probe points */
+ /* Make a tracefs interface for controlling probe points */
  static __init int init_kprobe_trace(void)
  {
        struct dentry *d_tracer;
        if (IS_ERR(d_tracer))
                return 0;
  
-       entry = debugfs_create_file("kprobe_events", 0644, d_tracer,
+       entry = tracefs_create_file("kprobe_events", 0644, d_tracer,
                                    NULL, &kprobe_events_ops);
  
        /* Event list interface */
        if (!entry)
-               pr_warning("Could not create debugfs "
+               pr_warning("Could not create tracefs "
                           "'kprobe_events' entry\n");
  
        /* Profile interface */
-       entry = debugfs_create_file("kprobe_profile", 0444, d_tracer,
+       entry = tracefs_create_file("kprobe_profile", 0444, d_tracer,
                                    NULL, &kprobe_profile_ops);
  
        if (!entry)
-               pr_warning("Could not create debugfs "
+               pr_warning("Could not create tracefs "
                           "'kprobe_profile' entry\n");
        return 0;
  }