tracing: Fix incomplete locking when disabling buffered events
[platform/kernel/linux-starfive.git] / kernel / trace / trace.c
index 5b2ba69..f6c3a68 100644 (file)
@@ -2779,11 +2779,9 @@ void trace_buffered_event_disable(void)
        if (--trace_buffered_event_ref)
                return;
 
-       preempt_disable();
        /* For each CPU, set the buffer as used. */
-       smp_call_function_many(tracing_buffer_mask,
-                              disable_trace_buffered_event, NULL, 1);
-       preempt_enable();
+       on_each_cpu_mask(tracing_buffer_mask, disable_trace_buffered_event,
+                        NULL, true);
 
        /* Wait for all current users to finish */
        synchronize_rcu();
@@ -2798,11 +2796,9 @@ void trace_buffered_event_disable(void)
         */
        smp_wmb();
 
-       preempt_disable();
        /* Do the work on each cpu */
-       smp_call_function_many(tracing_buffer_mask,
-                              enable_trace_buffered_event, NULL, 1);
-       preempt_enable();
+       on_each_cpu_mask(tracing_buffer_mask, enable_trace_buffered_event, NULL,
+                        true);
 }
 
 static struct trace_buffer *temp_buffer;