From 01f613199b32e1d6284e53ddee408b2119c5cd0a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 23 Sep 2021 10:24:13 +0200 Subject: [PATCH] 4.4-stable patches added patches: pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch --- ...ix-unbalanced-irq-enable-for-wakeirq.patch | 69 +++++++++++++++++++ queue-4.4/series | 1 + 2 files changed, 70 insertions(+) create mode 100644 queue-4.4/pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch diff --git a/queue-4.4/pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch b/queue-4.4/pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch new file mode 100644 index 00000000000..3f8dc8a79ff --- /dev/null +++ b/queue-4.4/pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch @@ -0,0 +1,69 @@ +From 69728051f5bf15efaf6edfbcfe1b5a49a2437918 Mon Sep 17 00:00:00 2001 +From: Tony Lindgren +Date: Fri, 9 Feb 2018 08:11:26 -0800 +Subject: PM / wakeirq: Fix unbalanced IRQ enable for wakeirq + +From: Tony Lindgren + +commit 69728051f5bf15efaf6edfbcfe1b5a49a2437918 upstream. + +If a device is runtime PM suspended when we enter suspend and has +a dedicated wake IRQ, we can get the following warning: + +WARNING: CPU: 0 PID: 108 at kernel/irq/manage.c:526 enable_irq+0x40/0x94 +[ 102.087860] Unbalanced enable for IRQ 147 +... +(enable_irq) from [] (dev_pm_arm_wake_irq+0x4c/0x60) +(dev_pm_arm_wake_irq) from [] + (device_wakeup_arm_wake_irqs+0x58/0x9c) +(device_wakeup_arm_wake_irqs) from [] +(dpm_suspend_noirq+0x10/0x48) +(dpm_suspend_noirq) from [] +(suspend_devices_and_enter+0x30c/0xf14) +(suspend_devices_and_enter) from [] +(enter_state+0xad4/0xbd8) +(enter_state) from [] (pm_suspend+0x38/0x98) +(pm_suspend) from [] (state_store+0x68/0xc8) + +This is because the dedicated wake IRQ for the device may have been +already enabled earlier by dev_pm_enable_wake_irq_check(). Fix the +issue by checking for runtime PM suspended status. + +This issue can be easily reproduced by setting serial console log level +to zero, letting the serial console idle, and suspend the system from +an ssh terminal. On resume, dmesg will have the warning above. + +The reason why I have not run into this issue earlier has been that I +typically run my PM test cases from on a serial console instead over ssh. + +Fixes: c84345597558 (PM / wakeirq: Enable dedicated wakeirq for suspend) +Signed-off-by: Tony Lindgren +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Nobuhiro Iwamatsu (CIP) +Signed-off-by: Greg Kroah-Hartman +--- + drivers/base/power/wakeirq.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/base/power/wakeirq.c ++++ b/drivers/base/power/wakeirq.c +@@ -320,7 +320,8 @@ void dev_pm_arm_wake_irq(struct wake_irq + return; + + if (device_may_wakeup(wirq->dev)) { +- if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED) ++ if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && ++ !pm_runtime_status_suspended(wirq->dev)) + enable_irq(wirq->irq); + + enable_irq_wake(wirq->irq); +@@ -342,7 +343,8 @@ void dev_pm_disarm_wake_irq(struct wake_ + if (device_may_wakeup(wirq->dev)) { + disable_irq_wake(wirq->irq); + +- if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED) ++ if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && ++ !pm_runtime_status_suspended(wirq->dev)) + disable_irq_nosync(wirq->irq); + } + } diff --git a/queue-4.4/series b/queue-4.4/series index a206d1de2f4..60194d35f44 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -1 +1,2 @@ s390-bpf-fix-optimizing-out-zero-extensions.patch +pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch -- 2.47.3