enable_irq_wake() can fail. Previously acpi_s2idle_prepare() silently ignored it's return code, potentially leaving a system that never wakes up. Discovered when trying to go into s2idle under Xen. This leads to a system that can't be woken, since xen-pirq currently doesn't support setting wakeup IRQs. Real s2idle support for Xen is another topic, but now at least the user gets an error and the system doesn't needs an hard reset. Signed-off-by: Simon Gaiser <simon@xxxxxxxxxxxxxxxxxxxxxx> --- Note that I'm unfamiliar with the code so when reviewing please carefully check if ignoring the error was indeed unintended. If there are indeed cases where the error should be ignored I would submit a patch that at least logs the error, although the error message would be hard to see with broken wakeup. drivers/acpi/sleep.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 4ca667251272..c69dd3731126 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -714,7 +714,15 @@ int acpi_s2idle_begin(void) int acpi_s2idle_prepare(void) { if (acpi_sci_irq_valid()) { - enable_irq_wake(acpi_sci_irq); + int error; + + error = enable_irq_wake(acpi_sci_irq); + if (error) { + pr_err("Failed to enable wakeup from IRQ %d: %d\n", + acpi_sci_irq, + error); + return error; + } acpi_ec_set_gpe_wake_mask(ACPI_GPE_ENABLE); } -- 2.39.2