Commit c4df606c authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Rafael J. Wysocki

genirq: Avoid double loop on suspend

We can synchronize the suspended interrupts right away. No need for an
extra loop.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 092fadd5
...@@ -49,10 +49,10 @@ void irq_pm_remove_action(struct irq_desc *desc, struct irqaction *action) ...@@ -49,10 +49,10 @@ void irq_pm_remove_action(struct irq_desc *desc, struct irqaction *action)
desc->no_suspend_depth--; 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) if (!desc->action || desc->no_suspend_depth)
return; return false;
desc->istate |= IRQS_SUSPENDED; desc->istate |= IRQS_SUSPENDED;
__disable_irq(desc, irq); __disable_irq(desc, irq);
...@@ -65,6 +65,7 @@ static void suspend_device_irq(struct irq_desc *desc, int irq) ...@@ -65,6 +65,7 @@ static void suspend_device_irq(struct irq_desc *desc, int irq)
*/ */
if (irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND) if (irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND)
mask_irq(desc); mask_irq(desc);
return true;
} }
/** /**
...@@ -86,15 +87,15 @@ void suspend_device_irqs(void) ...@@ -86,15 +87,15 @@ void suspend_device_irqs(void)
for_each_irq_desc(irq, desc) { for_each_irq_desc(irq, desc) {
unsigned long flags; unsigned long flags;
bool sync;
raw_spin_lock_irqsave(&desc->lock, flags); 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); raw_spin_unlock_irqrestore(&desc->lock, flags);
}
for_each_irq_desc(irq, desc) if (sync)
if (desc->istate & IRQS_SUSPENDED)
synchronize_irq(irq); synchronize_irq(irq);
}
} }
EXPORT_SYMBOL_GPL(suspend_device_irqs); EXPORT_SYMBOL_GPL(suspend_device_irqs);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment