• Seiji Aguchi's avatar
    x86/tracing: Add irq_enter/exit() in smp_trace_reschedule_interrupt() · 4787c368
    Seiji Aguchi authored
    Reschedule vector tracepoints may be called in cpu idle state.
    This causes lockdep check warning below.
    
    The tracepoint requires rcu but for accuracy it also
    requires irq_enter() (tracepoints record the irq context), thus,
    the tracepoint interrupt handler should be calling irq_enter()
    and not rcu_irq_enter() (irq_enter() calls rcu_irq_enter()).
    
    So, add irq_enter/exit() to smp_trace_reschedule_interrupt()
    with common pre/post processing functions, smp_entering_irq()
    and exiting_irq() (exiting_irq() calls just irq_exit()
     in arch/x86/include/asm/apic.h),
    because these can be shared among reschedule, call_function,
    and call_function_single vectors.
    
    [   50.720557] Testing event reschedule_exit:
    [   50.721349]
    [   50.721502] ===============================
    [   50.721835] [ INFO: suspicious RCU usage. ]
    [   50.722169] 3.10.0-rc6-00004-gcf910e83 #190 Not tainted
    [   50.722582] -------------------------------
    [   50.722915] /c/kernel-tests/src/linux/arch/x86/include/asm/trace/irq_vectors.h:50 suspicious rcu_dereference_check() usage!
    [   50.723770]
    [   50.723770] other info that might help us debug this:
    [   50.723770]
    [   50.724385]
    [   50.724385] RCU used illegally from idle CPU!
    [   50.724385] rcu_scheduler_active = 1, debug_locks = 0
    [   50.725232] RCU used illegally from extended quiescent state!
    [   50.725690] no locks held by swapper/0/0.
    [   50.726010]
    [   50.726010] stack backtrace:
    [...]
    Signed-off-by: default avatarSeiji Aguchi <seiji.aguchi@hds.com>
    Reviewed-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/51CDCFA3.9080101@hds.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    4787c368
smp.c 9.7 KB