• Shreyas B. Prabhu's avatar
    tracing/mm: don't trace mm_page_pcpu_drain on offline cpus · 649b8de2
    Shreyas B. Prabhu authored
    Since tracepoints use RCU for protection, they must not be called on
    offline cpus.  trace_mm_page_pcpu_drain 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:265 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
         1 lock held by swapper/5/0:
          #0:  (&(&zone->lock)->rlock){..-...}, at: [<c0000000002073b0>] .free_pcppages_bulk+0x70/0x920
        stack backtrace:
         CPU: 5 PID: 0 Comm: swapper/5 Not tainted 4.1.0-rc1+ #9
         Call Trace:
           .dump_stack+0x98/0xd4 (unreliable)
    Fix this by converting mm_page_pcpu_drain trace point into
    TRACE_EVENT_CONDITION where condition is cpu_online(smp_processor_id())
    Signed-off-by: default avatarShreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
    Reviewed-by: default avatarPreeti U Murthy <preeti@linux.vnet.ibm.com>
    Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
kmem.h 8.79 KB