perf_events: Fix races in group composition
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Thu, 27 May 2010 13:47:49 +0000 (15:47 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 31 May 2010 06:46:09 +0000 (08:46 +0200)
commit8a49542c0554af7d0073aac0ee73ee65b807ef34
tree73e82ee5a624012ac723c3af21bb1945b7bd675f
parentac9721f3f54b27a16c7e1afb2481e7ee95a70318
perf_events: Fix races in group composition

Group siblings don't pin each-other or the parent, so when we destroy
events we must make sure to clean up all cross referencing pointers.

In particular, for destruction of a group leader we must be able to
find all its siblings and remove their reference to it.

This means that detaching an event from its context must not detach it
from the group, otherwise we can end up failing to clear all pointers.

Solve this by clearly separating the attachment to a context and
attachment to a group, and keep the group composed until we destroy
the events.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/linux/perf_event.h
kernel/perf_event.c