aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/oprofile/timer_int.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2011-01-04 03:43:42 -0500
committerIngo Molnar <mingo@elte.hu>2011-01-04 03:43:42 -0500
commitbc030d6cb9532877c1c5a3f5e7123344fa24a285 (patch)
treed223d410b868b80d4c0deec192d354a5d06b201a /drivers/oprofile/timer_int.c
parentd3bd058826aa8b79590cca6c8e6d1557bf576ada (diff)
parent387c31c7e5c9805b0aef8833d1731a5fe7bdea14 (diff)
Merge commit 'v2.6.37-rc8' into x86/apic
Conflicts: arch/x86/include/asm/io_apic.h Merge reason: move to a fresh -rc, resolve the conflict. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/oprofile/timer_int.c')
-rw-r--r--drivers/oprofile/timer_int.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
index dc0ae4d14dff..010725117dbb 100644
--- a/drivers/oprofile/timer_int.c
+++ b/drivers/oprofile/timer_int.c
@@ -21,6 +21,7 @@
21#include "oprof.h" 21#include "oprof.h"
22 22
23static DEFINE_PER_CPU(struct hrtimer, oprofile_hrtimer); 23static DEFINE_PER_CPU(struct hrtimer, oprofile_hrtimer);
24static int ctr_running;
24 25
25static enum hrtimer_restart oprofile_hrtimer_notify(struct hrtimer *hrtimer) 26static enum hrtimer_restart oprofile_hrtimer_notify(struct hrtimer *hrtimer)
26{ 27{
@@ -33,6 +34,9 @@ static void __oprofile_hrtimer_start(void *unused)
33{ 34{
34 struct hrtimer *hrtimer = &__get_cpu_var(oprofile_hrtimer); 35 struct hrtimer *hrtimer = &__get_cpu_var(oprofile_hrtimer);
35 36
37 if (!ctr_running)
38 return;
39
36 hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 40 hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
37 hrtimer->function = oprofile_hrtimer_notify; 41 hrtimer->function = oprofile_hrtimer_notify;
38 42
@@ -42,7 +46,10 @@ static void __oprofile_hrtimer_start(void *unused)
42 46
43static int oprofile_hrtimer_start(void) 47static int oprofile_hrtimer_start(void)
44{ 48{
49 get_online_cpus();
50 ctr_running = 1;
45 on_each_cpu(__oprofile_hrtimer_start, NULL, 1); 51 on_each_cpu(__oprofile_hrtimer_start, NULL, 1);
52 put_online_cpus();
46 return 0; 53 return 0;
47} 54}
48 55
@@ -50,6 +57,9 @@ static void __oprofile_hrtimer_stop(int cpu)
50{ 57{
51 struct hrtimer *hrtimer = &per_cpu(oprofile_hrtimer, cpu); 58 struct hrtimer *hrtimer = &per_cpu(oprofile_hrtimer, cpu);
52 59
60 if (!ctr_running)
61 return;
62
53 hrtimer_cancel(hrtimer); 63 hrtimer_cancel(hrtimer);
54} 64}
55 65
@@ -57,8 +67,11 @@ static void oprofile_hrtimer_stop(void)
57{ 67{
58 int cpu; 68 int cpu;
59 69
70 get_online_cpus();
60 for_each_online_cpu(cpu) 71 for_each_online_cpu(cpu)
61 __oprofile_hrtimer_stop(cpu); 72 __oprofile_hrtimer_stop(cpu);
73 ctr_running = 0;
74 put_online_cpus();
62} 75}
63 76
64static int __cpuinit oprofile_cpu_notify(struct notifier_block *self, 77static int __cpuinit oprofile_cpu_notify(struct notifier_block *self,