select CONTEXT_SWITCH_TRACER
        select GLOB
        select TASKS_RCU if PREEMPTION
+       select TASKS_RUDE_RCU
        help
          Enable the kernel to trace every kernel function. This is done
          by using a compiler feature to insert a small, 5-byte No-Operation
 
        op->saved_func(ip, parent_ip, op, regs);
 }
 
-static void ftrace_sync(struct work_struct *work)
-{
-       /*
-        * This function is just a stub to implement a hard force
-        * of synchronize_rcu(). This requires synchronizing
-        * tasks even in userspace and idle.
-        *
-        * Yes, function tracing is rude.
-        */
-}
-
 static void ftrace_sync_ipi(void *data)
 {
        /* Probably not needed, but do it anyway */
         * Make sure all CPUs see this. Yes this is slow, but static
         * tracing is slow and nasty to have enabled.
         */
-       schedule_on_each_cpu(ftrace_sync);
+       synchronize_rcu_tasks_rude();
        /* Now all cpus are using the list ops. */
        function_trace_op = set_function_trace_op;
        /* Make sure the function_trace_op is visible on all CPUs */
                 * infrastructure to do the synchronization, thus we must do it
                 * ourselves.
                 */
-               schedule_on_each_cpu(ftrace_sync);
+               synchronize_rcu_tasks_rude();
 
                /*
                 * When the kernel is preeptive, tasks can be preempted
                 * infrastructure to do the synchronization, thus we must do it
                 * ourselves.
                 */
-               schedule_on_each_cpu(ftrace_sync);
+               synchronize_rcu_tasks_rude();
 
                free_ftrace_hash(old_hash);
        }