diff options
author | Ingo Molnar <mingo@elte.hu> | 2010-05-11 02:31:49 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-05-11 02:31:49 -0400 |
commit | e3174cfd2a1e28fff774681f00a0eef3d31da970 (patch) | |
tree | 5706316d689a9b1fe11df562bed391295deff537 | |
parent | e61a639a794063d78fd248a37ce2c21d5c81fc19 (diff) |
Revert "perf: Fix exit() vs PERF_FORMAT_GROUP"
This reverts commit 4fd38e4595e2f6c9d27732c042a0e16b2753049c.
It causes various crashes and hangs when events are activated.
The cause is not fully understood yet but we need to revert it
because the effects are severe.
Reported-by: Stephane Eranian <eranian@google.com>
Reported-by: Lin Ming <ming.m.lin@intel.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | include/linux/perf_event.h | 1 | ||||
-rw-r--r-- | kernel/perf_event.c | 5 |
2 files changed, 0 insertions, 6 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 4924c96d7e2d..3fd5c82e0e18 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -575,7 +575,6 @@ struct pmu { | |||
575 | * enum perf_event_active_state - the states of a event | 575 | * enum perf_event_active_state - the states of a event |
576 | */ | 576 | */ |
577 | enum perf_event_active_state { | 577 | enum perf_event_active_state { |
578 | PERF_EVENT_STATE_FREE = -3, | ||
579 | PERF_EVENT_STATE_ERROR = -2, | 578 | PERF_EVENT_STATE_ERROR = -2, |
580 | PERF_EVENT_STATE_OFF = -1, | 579 | PERF_EVENT_STATE_OFF = -1, |
581 | PERF_EVENT_STATE_INACTIVE = 0, | 580 | PERF_EVENT_STATE_INACTIVE = 0, |
diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 180151ff8376..a9047463fd83 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c | |||
@@ -334,9 +334,6 @@ list_del_event(struct perf_event *event, struct perf_event_context *ctx) | |||
334 | if (event->state > PERF_EVENT_STATE_OFF) | 334 | if (event->state > PERF_EVENT_STATE_OFF) |
335 | event->state = PERF_EVENT_STATE_OFF; | 335 | event->state = PERF_EVENT_STATE_OFF; |
336 | 336 | ||
337 | if (event->state > PERF_EVENT_STATE_FREE) | ||
338 | return; | ||
339 | |||
340 | /* | 337 | /* |
341 | * If this was a group event with sibling events then | 338 | * If this was a group event with sibling events then |
342 | * upgrade the siblings to singleton events by adding them | 339 | * upgrade the siblings to singleton events by adding them |
@@ -1871,8 +1868,6 @@ int perf_event_release_kernel(struct perf_event *event) | |||
1871 | { | 1868 | { |
1872 | struct perf_event_context *ctx = event->ctx; | 1869 | struct perf_event_context *ctx = event->ctx; |
1873 | 1870 | ||
1874 | event->state = PERF_EVENT_STATE_FREE; | ||
1875 | |||
1876 | WARN_ON_ONCE(ctx->parent_ctx); | 1871 | WARN_ON_ONCE(ctx->parent_ctx); |
1877 | /* | 1872 | /* |
1878 | * There are two ways this annotation is useful: | 1873 | * There are two ways this annotation is useful: |