]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Sep 2021 08:24:13 +0000 (10:24 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Sep 2021 08:24:13 +0000 (10:24 +0200)
added patches:
pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch

queue-4.4/pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch [new file with mode: 0644]
queue-4.4/series

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 (file)
index 0000000..3f8dc8a
--- /dev/null
@@ -0,0 +1,69 @@
+From 69728051f5bf15efaf6edfbcfe1b5a49a2437918 Mon Sep 17 00:00:00 2001
+From: Tony Lindgren <tony@atomide.com>
+Date: Fri, 9 Feb 2018 08:11:26 -0800
+Subject: PM / wakeirq: Fix unbalanced IRQ enable for wakeirq
+
+From: Tony Lindgren <tony@atomide.com>
+
+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 [<c06117a8>] (dev_pm_arm_wake_irq+0x4c/0x60)
+(dev_pm_arm_wake_irq) from [<c0618360>]
+ (device_wakeup_arm_wake_irqs+0x58/0x9c)
+(device_wakeup_arm_wake_irqs) from [<c0615948>]
+(dpm_suspend_noirq+0x10/0x48)
+(dpm_suspend_noirq) from [<c01ac7ac>]
+(suspend_devices_and_enter+0x30c/0xf14)
+(suspend_devices_and_enter) from [<c01adf20>]
+(enter_state+0xad4/0xbd8)
+(enter_state) from [<c01ad3ec>] (pm_suspend+0x38/0x98)
+(pm_suspend) from [<c01ab3e8>] (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 <tony@atomide.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Nobuhiro Iwamatsu (CIP) <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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);
+       }
+ }
index a206d1de2f47f82b283467a0e728a1bb4c765175..60194d35f440550af83004af1c88812261381d08 100644 (file)
@@ -1 +1,2 @@
 s390-bpf-fix-optimizing-out-zero-extensions.patch
+pm-wakeirq-fix-unbalanced-irq-enable-for-wakeirq.patch