[ARM] 2/4 Fix oprofile suspend/resume
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Fri, 28 Oct 2005 13:52:30 +0000 (14:52 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 28 Oct 2005 13:52:30 +0000 (14:52 +0100)
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>
arch/arm/oprofile/common.c

index 5b1d752edbc3c764d7a0c446d777d59c57e03c51..02e5d6f4516600747308b8d7805f2bb3013d1aad 100644 (file)
@@ -78,15 +78,19 @@ static void pmu_stop(void)
 #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;
 }