lkml.org 
[lkml]   [2013]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH 2/3] genirq: Do not consider the irqs with IRQF_NO_SUSPEND in check_wakeup_irqs()
From
Date

According to commit 9c6079aa1bf(genirq: Do not consider disabled
wakeup irqs), we should not break the suspend when one interrupt has
been disabled before suspending and is pending there.

But there is another case missed:
If an interrupt which is marked IRQF_NO_SUSPEND has been disabled
before suspend invocation then desc->depth is 1 and therefor it should
not be checked for IRQS_PENDING in check_wakeup_irqs().

Here also checking if the desc->istate & IRQS_SUSPENDED is true to avoid
this case.

Signed-off-by: liu chuansheng <chuansheng.liu@intel.com>
---
kernel/irq/pm.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c
index cb228bf..f02a03d 100644
--- a/kernel/irq/pm.c
+++ b/kernel/irq/pm.c
@@ -107,9 +107,16 @@ int check_wakeup_irqs(void)
* Only interrupts which are marked as wakeup source
* and have not been disabled before the suspend check
* can abort suspend.
+ *
+ * Meanwhile, if an interrupt which is marked IRQF_NO_SUSPEND
+ * has been disabled before suspend invocation then
+ * desc->depth is 1 and therefor it should not be checked
+ * for IRQS_PENDING, so also adding the checking of
+ * desc->istate & IRQS_SUSPENDED for this case.
*/
if (irqd_is_wakeup_set(&desc->irq_data)) {
- if (desc->depth == 1 && desc->istate & IRQS_PENDING)
+ if (desc->depth == 1 && (desc->istate & IRQS_PENDING)
+ && (desc->istate & IRQS_SUSPENDED))
return -EBUSY;
continue;
}
--
1.7.0.4




\
 
 \ /
  Last update: 2013-03-12 02:21    [W:0.460 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site