[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;
 }