diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2005-10-28 09:52:30 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-10-28 09:52:30 -0400 |
commit | 7c5b3fc20807279d8f8e78f1e2ef275128668796 (patch) | |
tree | 393e609ef9e6cd32c9fbce258686a462b33b4ce8 /arch/arm/oprofile | |
parent | b5893c56ca7e664aef010a71c2638db768d4e996 (diff) |
[ARM] 2/4 Fix oprofile suspend/resume
The oprofile suspend/resume was missing locking. If we failed
to start oprofile on resume, we still reported that it was
enabled. Instead, disable oprofile on error.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/oprofile')
-rw-r--r-- | arch/arm/oprofile/common.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index 5b1d752edbc..02e5d6f4516 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c | |||
@@ -78,15 +78,19 @@ static void pmu_stop(void) | |||
78 | #ifdef CONFIG_PM | 78 | #ifdef CONFIG_PM |
79 | static int pmu_suspend(struct sys_device *dev, pm_message_t state) | 79 | static int pmu_suspend(struct sys_device *dev, pm_message_t state) |
80 | { | 80 | { |
81 | down(&pmu_sem); | ||
81 | if (pmu_enabled) | 82 | if (pmu_enabled) |
82 | pmu_stop(); | 83 | pmu_model->stop(); |
84 | up(&pmu_sem); | ||
83 | return 0; | 85 | return 0; |
84 | } | 86 | } |
85 | 87 | ||
86 | static int pmu_resume(struct sys_device *dev) | 88 | static int pmu_resume(struct sys_device *dev) |
87 | { | 89 | { |
88 | if (pmu_enabled) | 90 | down(&pmu_sem); |
89 | pmu_start(); | 91 | if (pmu_enabled && pmu_model->start()) |
92 | pmu_enabled = 0; | ||
93 | up(&pmu_sem); | ||
90 | return 0; | 94 | return 0; |
91 | } | 95 | } |
92 | 96 | ||