]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/trace/trace_event_profile.c
Merge branch 'nfs-for-2.6.33'
[mirror_ubuntu-bionic-kernel.git] / kernel / trace / trace_event_profile.c
index 8d5c171cc9987d924f9fcfd3328fcb966288b9a0..d9c60f80aa0d20958c647a86310b29701b4bcdcc 100644 (file)
@@ -8,17 +8,14 @@
 #include <linux/module.h>
 #include "trace.h"
 
-/*
- * We can't use a size but a type in alloc_percpu()
- * So let's create a dummy type that matches the desired size
- */
-typedef struct {char buf[FTRACE_MAX_PROFILE_SIZE];} profile_buf_t;
 
-char           *trace_profile_buf;
-EXPORT_SYMBOL_GPL(trace_profile_buf);
+char *perf_trace_buf;
+EXPORT_SYMBOL_GPL(perf_trace_buf);
+
+char *perf_trace_buf_nmi;
+EXPORT_SYMBOL_GPL(perf_trace_buf_nmi);
 
-char           *trace_profile_buf_nmi;
-EXPORT_SYMBOL_GPL(trace_profile_buf_nmi);
+typedef typeof(char [FTRACE_MAX_PROFILE_SIZE]) perf_trace_t ;
 
 /* Count the events in use (per event id, not per instance) */
 static int     total_profile_count;
@@ -32,20 +29,20 @@ static int ftrace_profile_enable_event(struct ftrace_event_call *event)
                return 0;
 
        if (!total_profile_count) {
-               buf = (char *)alloc_percpu(profile_buf_t);
+               buf = (char *)alloc_percpu(perf_trace_t);
                if (!buf)
                        goto fail_buf;
 
-               rcu_assign_pointer(trace_profile_buf, buf);
+               rcu_assign_pointer(perf_trace_buf, buf);
 
-               buf = (char *)alloc_percpu(profile_buf_t);
+               buf = (char *)alloc_percpu(perf_trace_t);
                if (!buf)
                        goto fail_buf_nmi;
 
-               rcu_assign_pointer(trace_profile_buf_nmi, buf);
+               rcu_assign_pointer(perf_trace_buf_nmi, buf);
        }
 
-       ret = event->profile_enable();
+       ret = event->profile_enable(event);
        if (!ret) {
                total_profile_count++;
                return 0;
@@ -53,10 +50,10 @@ static int ftrace_profile_enable_event(struct ftrace_event_call *event)
 
 fail_buf_nmi:
        if (!total_profile_count) {
-               free_percpu(trace_profile_buf_nmi);
-               free_percpu(trace_profile_buf);
-               trace_profile_buf_nmi = NULL;
-               trace_profile_buf = NULL;
+               free_percpu(perf_trace_buf_nmi);
+               free_percpu(perf_trace_buf);
+               perf_trace_buf_nmi = NULL;
+               perf_trace_buf = NULL;
        }
 fail_buf:
        atomic_dec(&event->profile_count);
@@ -89,14 +86,14 @@ static void ftrace_profile_disable_event(struct ftrace_event_call *event)
        if (!atomic_add_negative(-1, &event->profile_count))
                return;
 
-       event->profile_disable();
+       event->profile_disable(event);
 
        if (!--total_profile_count) {
-               buf = trace_profile_buf;
-               rcu_assign_pointer(trace_profile_buf, NULL);
+               buf = perf_trace_buf;
+               rcu_assign_pointer(perf_trace_buf, NULL);
 
-               nmi_buf = trace_profile_buf_nmi;
-               rcu_assign_pointer(trace_profile_buf_nmi, NULL);
+               nmi_buf = perf_trace_buf_nmi;
+               rcu_assign_pointer(perf_trace_buf_nmi, NULL);
 
                /*
                 * Ensure every events in profiling have finished before