• S
    ftrace: irqs off smp_processor_id() fix · 361943ad
    Steven Rostedt 提交于
    The irqsoff function tracer did a __get_cpu_var to determine
    if it should trace the function or not. The problem is that
    __get_cpu_var can preempt between getting the CPU and reading
    the cpu variable. This means that the cpu variable that is
    being read is not from the cpu being run on.
    
    At worst, this can give a false positive, where we trace the
    function when we should not.  It will never give a false negative
    since we only want to trace when interrupts are disabled
    and we never preempt when they are.
    
    This fix adds a check after reading the irq flags to only
    trace if the interrupts are actually disabled. It also changes
    the reading of the cpu variable to use a raw_smp_processor_id
    since we now don't care if we preempt. We still catch that fact.
    Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    361943ad
trace_irqsoff.c 11.0 KB