]> git.baikalelectronics.ru Git - kernel.git/commit
perf: Fix race in callchains
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 1 Jul 2010 14:20:36 +0000 (16:20 +0200)
committerFrederic Weisbecker <fweisbec@gmail.com>
Wed, 18 Aug 2010 23:32:31 +0000 (01:32 +0200)
commitbdef283efd2da037d3ded1a219fa4793bb3e36d4
treed98bde726caf6b27d465852b5683cf08485df007
parent33ffea5c36f7910522190325a9fb59df5bba30ca
perf: Fix race in callchains

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: Frederic Weisbecker <fweisbec@gmail.com>
Tested-by: Will 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>
arch/x86/kernel/cpu/perf_event.c
include/linux/perf_event.h
kernel/perf_event.c