Hello Thomas, Sorry to miss the V2 in the subject. I have updated the comments in this new patch, could you consider to take it into upstream?
Thanks. Best Regards Liu chuansheng > -----Original Message----- > From: Liu, Chuansheng > Sent: Tuesday, March 12, 2013 5:58 PM > To: t...@linutronix.de > Cc: mi...@redhat.com; linux-kernel@vger.kernel.org; Liu, Chuansheng > Subject: [PATCH 2/3] genirq: Do not consider the irqs with IRQF_NO_SUSPEND > in check_wakeup_irqs() > > > 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....@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 > >