diff options
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 0a890bdd9c63..44b16a1ecd9a 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -696,3 +696,61 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set) | |||
696 | 696 | ||
697 | irq_put_desc_unlock(desc, flags); | 697 | irq_put_desc_unlock(desc, flags); |
698 | } | 698 | } |
699 | |||
700 | /** | ||
701 | * irq_cpu_online - Invoke all irq_cpu_online functions. | ||
702 | * | ||
703 | * Iterate through all irqs and invoke the chip.irq_cpu_online() | ||
704 | * for each. | ||
705 | */ | ||
706 | void irq_cpu_online(void) | ||
707 | { | ||
708 | struct irq_desc *desc; | ||
709 | struct irq_chip *chip; | ||
710 | unsigned long flags; | ||
711 | unsigned int irq; | ||
712 | |||
713 | for_each_active_irq(irq) { | ||
714 | desc = irq_to_desc(irq); | ||
715 | if (!desc) | ||
716 | continue; | ||
717 | |||
718 | raw_spin_lock_irqsave(&desc->lock, flags); | ||
719 | |||
720 | chip = irq_data_get_irq_chip(&desc->irq_data); | ||
721 | |||
722 | if (chip && chip->irq_cpu_online) | ||
723 | chip->irq_cpu_online(&desc->irq_data); | ||
724 | |||
725 | raw_spin_unlock_irqrestore(&desc->lock, flags); | ||
726 | } | ||
727 | } | ||
728 | |||
729 | /** | ||
730 | * irq_cpu_offline - Invoke all irq_cpu_offline functions. | ||
731 | * | ||
732 | * Iterate through all irqs and invoke the chip.irq_cpu_offline() | ||
733 | * for each. | ||
734 | */ | ||
735 | void irq_cpu_offline(void) | ||
736 | { | ||
737 | struct irq_desc *desc; | ||
738 | struct irq_chip *chip; | ||
739 | unsigned long flags; | ||
740 | unsigned int irq; | ||
741 | |||
742 | for_each_active_irq(irq) { | ||
743 | desc = irq_to_desc(irq); | ||
744 | if (!desc) | ||
745 | continue; | ||
746 | |||
747 | raw_spin_lock_irqsave(&desc->lock, flags); | ||
748 | |||
749 | chip = irq_data_get_irq_chip(&desc->irq_data); | ||
750 | |||
751 | if (chip && chip->irq_cpu_offline) | ||
752 | chip->irq_cpu_offline(&desc->irq_data); | ||
753 | |||
754 | raw_spin_unlock_irqrestore(&desc->lock, flags); | ||
755 | } | ||
756 | } | ||