diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 60de37bd0f75..484337d33959 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -950,6 +950,8 @@ void tracing_start(void) | |||
950 | goto out; | 950 | goto out; |
951 | } | 951 | } |
952 | 952 | ||
953 | /* Prevent the buffers from switching */ | ||
954 | arch_spin_lock(&ftrace_max_lock); | ||
953 | 955 | ||
954 | buffer = global_trace.buffer; | 956 | buffer = global_trace.buffer; |
955 | if (buffer) | 957 | if (buffer) |
@@ -959,6 +961,8 @@ void tracing_start(void) | |||
959 | if (buffer) | 961 | if (buffer) |
960 | ring_buffer_record_enable(buffer); | 962 | ring_buffer_record_enable(buffer); |
961 | 963 | ||
964 | arch_spin_unlock(&ftrace_max_lock); | ||
965 | |||
962 | ftrace_start(); | 966 | ftrace_start(); |
963 | out: | 967 | out: |
964 | spin_unlock_irqrestore(&tracing_start_lock, flags); | 968 | spin_unlock_irqrestore(&tracing_start_lock, flags); |
@@ -980,6 +984,9 @@ void tracing_stop(void) | |||
980 | if (trace_stop_count++) | 984 | if (trace_stop_count++) |
981 | goto out; | 985 | goto out; |
982 | 986 | ||
987 | /* Prevent the buffers from switching */ | ||
988 | arch_spin_lock(&ftrace_max_lock); | ||
989 | |||
983 | buffer = global_trace.buffer; | 990 | buffer = global_trace.buffer; |
984 | if (buffer) | 991 | if (buffer) |
985 | ring_buffer_record_disable(buffer); | 992 | ring_buffer_record_disable(buffer); |
@@ -988,6 +995,8 @@ void tracing_stop(void) | |||
988 | if (buffer) | 995 | if (buffer) |
989 | ring_buffer_record_disable(buffer); | 996 | ring_buffer_record_disable(buffer); |
990 | 997 | ||
998 | arch_spin_unlock(&ftrace_max_lock); | ||
999 | |||
991 | out: | 1000 | out: |
992 | spin_unlock_irqrestore(&tracing_start_lock, flags); | 1001 | spin_unlock_irqrestore(&tracing_start_lock, flags); |
993 | } | 1002 | } |