• Frederic Weisbecker's avatar
    sched: Make preempt_schedule_context() function-tracing safe · be690035
    Frederic Weisbecker authored
    Since function tracing disables preemption, it needs a safe preemption
    point to use when preemption is re-enabled without worrying about tracing
    recursion. Ie: to avoid tracing recursion, that preemption point can't
    be traced (use of notrace qualifier) and it can't call any traceable
    function before that preemption point disables preemption itself, which
    disarms the recursion.
    
    preempt_schedule() was fine until commit:
    
      b30f0e3f ("sched/preempt: Optimize preemption operations on __schedule() callers")
    
    because PREEMPT_ACTIVE (which has the property to disable preemption
    and this disarm tracing preemption recursion) was set before calling
    any further function.
    
    But that commit introduced the use of preempt_count_add/sub() functions
    to set PREEMPT_ACTIVE and because these functions are called before
    preemption gets a chance to be disabled, we have a tracing recursion.
    
    preempt_schedule_context() is one of the possible preemption functions
    used by tracing. Its special purpose is to avoid tracing recursion
    against context tracking. Lets enhance this function to become more
    generally tracing safe by disabling preemption with raw accessors, such
    that no function is called before preemption gets disabled and disarm
    the tracing recursion.
    
    This function is going to become the specific tracing-safe preemption
    point in further commit.
    Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1433432349-1021-2-git-send-email-fweisbec@gmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    be690035
core.c 201 KB