• Peter Zijlstra's avatar
    perf: Annotate cpuctx->ctx.mutex to avoid a lockdep splat · 547e9fd7
    Peter Zijlstra authored
    Lockdep spotted:
    
    	loop_1b_instruc/1899 is trying to acquire lock:
    	 (event_mutex){+.+.+.}, at: [<ffffffff810e1908>] perf_trace_init+0x3b/0x2f7
    
    	but task is already holding lock:
    	 (&ctx->mutex){+.+.+.}, at: [<ffffffff810eb45b>] perf_event_init_context+0xc0/0x218
    
    	which lock already depends on the new lock.
    
    	the existing dependency chain (in reverse order) is:
    
    	-> #3 (&ctx->mutex){+.+.+.}:
    	-> #2 (cpu_hotplug.lock){+.+.+.}:
    	-> #1 (module_mutex){+.+...}:
    	-> #0 (event_mutex){+.+.+.}:
    
    But because the deadlock would be cpuhotplug (cpu-event) vs fork
    (task-event) it cannot, in fact, happen. We can annotate this by giving the
    perf_event_context used for the cpuctx a different lock class from those
    used by tasks.
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <new-submission>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    547e9fd7
perf_event.c 152 KB