[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>
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index 5b1d752..02e5d6f 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -78,15 +78,19 @@
#ifdef CONFIG_PM
static int pmu_suspend(struct sys_device *dev, pm_message_t state)
{
+ down(&pmu_sem);
if (pmu_enabled)
- pmu_stop();
+ pmu_model->stop();
+ up(&pmu_sem);
return 0;
}
static int pmu_resume(struct sys_device *dev)
{
- if (pmu_enabled)
- pmu_start();
+ down(&pmu_sem);
+ if (pmu_enabled && pmu_model->start())
+ pmu_enabled = 0;
+ up(&pmu_sem);
return 0;
}