From: Thomas Gleixner <[email protected]>

We can synchronize the suspended interrupts right away. No need for an
extra loop.

Signed-off-by: Thomas Gleixner <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
---
 kernel/irq/pm.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

Index: linux/kernel/irq/pm.c
===================================================================
--- linux.orig/kernel/irq/pm.c
+++ linux/kernel/irq/pm.c
@@ -49,10 +49,10 @@ void irq_pm_remove_action(struct irq_des
                desc->no_suspend_depth--;
 }
 
-static void suspend_device_irq(struct irq_desc *desc, int irq)
+static bool suspend_device_irq(struct irq_desc *desc, int irq)
 {
        if (!desc->action || desc->no_suspend_depth)
-               return;
+               return false;
 
        desc->istate |= IRQS_SUSPENDED;
        __disable_irq(desc, irq);
@@ -65,6 +65,7 @@ static void suspend_device_irq(struct ir
         */
        if (irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND)
                mask_irq(desc);
+       return true;
 }
 
 /**
@@ -86,15 +87,15 @@ void suspend_device_irqs(void)
 
        for_each_irq_desc(irq, desc) {
                unsigned long flags;
+               bool sync;
 
                raw_spin_lock_irqsave(&desc->lock, flags);
-               suspend_device_irq(desc, irq);
+               sync = suspend_device_irq(desc, irq);
                raw_spin_unlock_irqrestore(&desc->lock, flags);
-       }
 
-       for_each_irq_desc(irq, desc)
-               if (desc->istate & IRQS_SUSPENDED)
+               if (sync)
                        synchronize_irq(irq);
+       }
 }
 EXPORT_SYMBOL_GPL(suspend_device_irqs);
 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to