• Frederic Weisbecker's avatar
    perf: Fix race in callchains · 927c7a9e
    Frederic Weisbecker authored
    Now that software events don't have interrupt disabled anymore in
    the event path, callchains can nest on any context. So seperating
    nmi and others contexts in two buffers has become racy.
    
    Fix this by providing one buffer per nesting level. Given the size
    of the callchain entries (2040 bytes * 4), we now need to allocate
    them dynamically.
    
    v2: Fixed put_callchain_entry call after recursion.
        Fix the type of the recursion, it must be an array.
    
    v3: Use a manual pr cpu allocation (temporary solution until NMIs
        can safely access vmalloc'ed memory).
        Do a better separation between callchain reference tracking and
        allocation. Make the "put" path lockless for non-release cases.
    
    v4: Protect the callchain buffers with rcu.
    
    v5: Do the cpu buffers allocations node affine.
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Tested-by: default avatarWill Deacon <will.deacon@arm.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Paul Mundt <lethal@linux-sh.org>
    Cc: David Miller <davem@davemloft.net>
    Cc: Borislav Petkov <bp@amd64.org>
    927c7a9e
perf_event.c 37.4 KB