• S
    tracing/mm: don't trace mm_page_free on offline cpus · 1f0c27b5
    Shreyas B. Prabhu 提交于
    Since tracepoints use RCU for protection, they must not be called on
    offline cpus.  trace_mm_page_free can be called on an offline cpu in this
    scenario caught by LOCKDEP:
    
         ===============================
         [ INFO: suspicious RCU usage. ]
         4.1.0-rc1+ #9 Not tainted
         -------------------------------
         include/trace/events/kmem.h:170 suspicious rcu_dereference_check() usage!
    
        other info that might help us debug this:
    
        RCU used illegally from offline CPU!
        rcu_scheduler_active = 1, debug_locks = 1
         no locks held by swapper/1/0.
    
        stack backtrace:
         CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.1.0-rc1+ #9
         Call Trace:
           .dump_stack+0x98/0xd4 (unreliable)
           .lockdep_rcu_suspicious+0x108/0x170
           .free_pages_prepare+0x494/0x680
           .free_hot_cold_page+0x50/0x280
           .destroy_context+0x90/0xd0
           .__mmdrop+0x58/0x160
           .idle_task_exit+0xf0/0x100
           .pnv_smp_cpu_kill_self+0x58/0x2c0
           .cpu_die+0x34/0x50
           .arch_cpu_idle_dead+0x20/0x40
           .cpu_startup_entry+0x708/0x7a0
           .start_secondary+0x36c/0x3a0
           start_secondary_prolog+0x10/0x14
    
    Fix this by converting mm_page_free trace point into TRACE_EVENT_CONDITION
    where condition is cpu_online(smp_processor_id())
    Signed-off-by: NShreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
    Reviewed-by: NPreeti U Murthy <preeti@linux.vnet.ibm.com>
    Acked-by: NSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1f0c27b5
kmem.h 8.1 KB