From: Colin Cross Date: Mon, 11 Jul 2011 08:51:49 +0000 (+0200) Subject: PM: Reintroduce dropped call to check_wakeup_irqs X-Git-Tag: 2.1b_release~3491^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=887596224cca4dc4669c53e4d7a33fcfc9d9e823;p=platform%2Fkernel%2Fkernel-mfld-blackbay.git PM: Reintroduce dropped call to check_wakeup_irqs Patch 2e711c04dbbf7a7732a3f7073b1fc285d12b369d (PM: Remove sysdev suspend, resume and shutdown operations) deleted sysdev_suspend(), which was being relied on to call check_wakeup_irqs() in suspend. If check_wakeup_irqs() is not called, wake interrupts that are pending when suspend is entered may be lost. It also breaks IRQCHIP_MASK_ON_SUSPEND, which is handled in check_wakeup_irqs(). This patch adds a call to check_wakeup_irqs() in syscore_suspend(), similar to what was deleted in sysdev_suspend(). Signed-off-by: Colin Cross Signed-off-by: Rafael J. Wysocki --- diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c index c126db3..e8d11b6 100644 --- a/drivers/base/syscore.c +++ b/drivers/base/syscore.c @@ -9,6 +9,7 @@ #include #include #include +#include static LIST_HEAD(syscore_ops_list); static DEFINE_MUTEX(syscore_ops_lock); @@ -48,6 +49,13 @@ int syscore_suspend(void) struct syscore_ops *ops; int ret = 0; + pr_debug("Checking wakeup interrupts\n"); + + /* Return error code if there are any wakeup interrupts pending. */ + ret = check_wakeup_irqs(); + if (ret) + return ret; + WARN_ONCE(!irqs_disabled(), "Interrupts enabled before system core suspend.\n");