From: Russell King Date: Fri, 28 Oct 2005 13:52:30 +0000 (+0100) Subject: [ARM] 2/4 Fix oprofile suspend/resume X-Git-Tag: v2.6.16.28-rc1~3479^2^2~11^2~47 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=7c5b3fc20807279d8f8e78f1e2ef275128668796;p=karo-tx-linux.git [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 --- diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index 5b1d752edbc3..02e5d6f45166 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c @@ -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; }