Merge tag 'trace-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[sfrench/cifs-2.6.git] / kernel / trace / trace_events.c
index d387b774ceeb6ea9324d73df54c4ec929c5e86da..a3563afd412dc3bc386e6279b4a56009ff57fc74 100644 (file)
@@ -258,22 +258,19 @@ void *trace_event_buffer_reserve(struct trace_event_buffer *fbuffer,
            trace_event_ignore_this_pid(trace_file))
                return NULL;
 
-       local_save_flags(fbuffer->flags);
-       fbuffer->pc = preempt_count();
        /*
         * If CONFIG_PREEMPTION is enabled, then the tracepoint itself disables
         * preemption (adding one to the preempt_count). Since we are
         * interested in the preempt_count at the time the tracepoint was
         * hit, we need to subtract one to offset the increment.
         */
-       if (IS_ENABLED(CONFIG_PREEMPTION))
-               fbuffer->pc--;
+       fbuffer->trace_ctx = tracing_gen_ctx_dec();
        fbuffer->trace_file = trace_file;
 
        fbuffer->event =
                trace_event_buffer_lock_reserve(&fbuffer->buffer, trace_file,
                                                event_call->event.type, len,
-                                               fbuffer->flags, fbuffer->pc);
+                                               fbuffer->trace_ctx);
        if (!fbuffer->event)
                return NULL;
 
@@ -2101,16 +2098,20 @@ event_subsystem_dir(struct trace_array *tr, const char *name,
        dir->subsystem = system;
        file->system = dir;
 
-       entry = tracefs_create_file("filter", 0644, dir->entry, dir,
-                                   &ftrace_subsystem_filter_fops);
-       if (!entry) {
-               kfree(system->filter);
-               system->filter = NULL;
-               pr_warn("Could not create tracefs '%s/filter' entry\n", name);
-       }
+       /* the ftrace system is special, do not create enable or filter files */
+       if (strcmp(name, "ftrace") != 0) {
 
-       trace_create_file("enable", 0644, dir->entry, dir,
-                         &ftrace_system_enable_fops);
+               entry = tracefs_create_file("filter", 0644, dir->entry, dir,
+                                           &ftrace_subsystem_filter_fops);
+               if (!entry) {
+                       kfree(system->filter);
+                       system->filter = NULL;
+                       pr_warn("Could not create tracefs '%s/filter' entry\n", name);
+               }
+
+               trace_create_file("enable", 0644, dir->entry, dir,
+                                 &ftrace_system_enable_fops);
+       }
 
        list_add(&dir->list, &tr->systems);
 
@@ -3679,12 +3680,11 @@ function_test_events_call(unsigned long ip, unsigned long parent_ip,
        struct trace_buffer *buffer;
        struct ring_buffer_event *event;
        struct ftrace_entry *entry;
-       unsigned long flags;
+       unsigned int trace_ctx;
        long disabled;
        int cpu;
-       int pc;
 
-       pc = preempt_count();
+       trace_ctx = tracing_gen_ctx();
        preempt_disable_notrace();
        cpu = raw_smp_processor_id();
        disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu));
@@ -3692,11 +3692,9 @@ function_test_events_call(unsigned long ip, unsigned long parent_ip,
        if (disabled != 1)
                goto out;
 
-       local_save_flags(flags);
-
        event = trace_event_buffer_lock_reserve(&buffer, &event_trace_file,
                                                TRACE_FN, sizeof(*entry),
-                                               flags, pc);
+                                               trace_ctx);
        if (!event)
                goto out;
        entry   = ring_buffer_event_data(event);
@@ -3704,7 +3702,7 @@ function_test_events_call(unsigned long ip, unsigned long parent_ip,
        entry->parent_ip                = parent_ip;
 
        event_trigger_unlock_commit(&event_trace_file, buffer, event,
-                                   entry, flags, pc);
+                                   entry, trace_ctx);
  out:
        atomic_dec(&per_cpu(ftrace_test_event_disable, cpu));
        preempt_enable_notrace();