From 321f5b012c0f17e1030f9bbf0721b10261d0d9e4 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Sun, 14 Dec 2008 23:20:36 +0100 Subject: [PATCH] --- yaml --- r: 147161 b: refs/heads/master c: 0cc0c027d4e028632933f1be2dc4cd730358183b h: refs/heads/master i: 147159: c2956aa2d94f587d4f75df6a5d4b9bb3d8dc819a v: v3 --- [refs] | 2 +- trunk/kernel/perf_counter.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e2b7f43f5b63..c505634fce0b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 029af8c753bb5a7432aa1ed38bf61fe2c2f66d17 +refs/heads/master: 0cc0c027d4e028632933f1be2dc4cd730358183b diff --git a/trunk/kernel/perf_counter.c b/trunk/kernel/perf_counter.c index 539fa8283a06..16396e9406fa 100644 --- a/trunk/kernel/perf_counter.c +++ b/trunk/kernel/perf_counter.c @@ -1273,8 +1273,19 @@ __perf_counter_exit_task(struct task_struct *child, local_irq_disable(); perf_flags = hw_perf_save_disable(); - if (child_counter->state == PERF_COUNTER_STATE_ACTIVE) + if (child_counter->state == PERF_COUNTER_STATE_ACTIVE) { + struct perf_cpu_context *cpuctx; + + cpuctx = &__get_cpu_var(perf_cpu_context); + child_counter->hw_ops->hw_perf_counter_disable(child_counter); + child_counter->state = PERF_COUNTER_STATE_INACTIVE; + child_counter->oncpu = -1; + + cpuctx->active_oncpu--; + child_ctx->nr_active--; + } + list_del_init(&child_counter->list_entry); hw_perf_restore(perf_flags); @@ -1539,4 +1550,3 @@ static int __init perf_counter_sysfs_init(void) &perfclass_attr_group); } device_initcall(perf_counter_sysfs_init); -