Commit-ID:  cb5ff2d245c1023f1004eca73038b2cae87bcc6a
Gitweb:     http://git.kernel.org/tip/cb5ff2d245c1023f1004eca73038b2cae87bcc6a
Author:     Richard Cochran <rcoch...@linutronix.de>
AuthorDate: Wed, 13 Jul 2016 17:16:07 +0000
Committer:  Ingo Molnar <mi...@kernel.org>
CommitDate: Thu, 14 Jul 2016 09:34:29 +0200

irqchip/armada-370-xp: Convert to hotplug state machine

Install the callbacks via the state machine.

Signed-off-by: Richard Cochran <rcoch...@linutronix.de>
Signed-off-by: Anna-Maria Gleixner <anna-ma...@linutronix.de>
Acked-by: Jason Cooper <ja...@lakedaemon.net>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Marc Zyngier <marc.zyng...@arm.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: r...@linutronix.de
Link: http://lkml.kernel.org/r/20160713153333.330661...@linutronix.de
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
 drivers/irqchip/irq-armada-370-xp.c | 44 +++++++++++++------------------------
 include/linux/cpuhotplug.h          |  2 ++
 2 files changed, 17 insertions(+), 29 deletions(-)

diff --git a/drivers/irqchip/irq-armada-370-xp.c 
b/drivers/irqchip/irq-armada-370-xp.c
index e7dc6cb..e2b8fee 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -344,40 +344,22 @@ static void armada_mpic_send_doorbell(const struct 
cpumask *mask,
        writel((map << 8) | irq, main_int_base +
                ARMADA_370_XP_SW_TRIG_INT_OFFS);
 }
+#endif
 
-static int armada_xp_mpic_secondary_init(struct notifier_block *nfb,
-                                        unsigned long action, void *hcpu)
+static int armada_xp_mpic_starting_cpu(unsigned int cpu)
 {
-       if (action == CPU_STARTING || action == CPU_STARTING_FROZEN) {
-               armada_xp_mpic_perf_init();
-               armada_xp_mpic_smp_cpu_init();
-       }
-
-       return NOTIFY_OK;
+       armada_xp_mpic_perf_init();
+       armada_xp_mpic_smp_cpu_init();
+       return 0;
 }
 
-static struct notifier_block armada_370_xp_mpic_cpu_notifier = {
-       .notifier_call = armada_xp_mpic_secondary_init,
-       .priority = 100,
-};
-
-static int mpic_cascaded_secondary_init(struct notifier_block *nfb,
-                                       unsigned long action, void *hcpu)
+static int mpic_cascaded_starting_cpu(unsigned int cpu)
 {
-       if (action == CPU_STARTING || action == CPU_STARTING_FROZEN) {
-               armada_xp_mpic_perf_init();
-               enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
-       }
-
-       return NOTIFY_OK;
+       armada_xp_mpic_perf_init();
+       enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
+       return 0;
 }
 
-static struct notifier_block mpic_cascaded_cpu_notifier = {
-       .notifier_call = mpic_cascaded_secondary_init,
-       .priority = 100,
-};
-#endif /* CONFIG_SMP */
-
 static const struct irq_domain_ops armada_370_xp_mpic_irq_ops = {
        .map = armada_370_xp_mpic_irq_map,
        .xlate = irq_domain_xlate_onecell,
@@ -595,11 +577,15 @@ static int __init armada_370_xp_mpic_of_init(struct 
device_node *node,
                set_handle_irq(armada_370_xp_handle_irq);
 #ifdef CONFIG_SMP
                set_smp_cross_call(armada_mpic_send_doorbell);
-               register_cpu_notifier(&armada_370_xp_mpic_cpu_notifier);
+               cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_ARMADA_XP_STARTING,
+                                         "AP_IRQ_ARMADA_XP_STARTING",
+                                         armada_xp_mpic_starting_cpu, NULL);
 #endif
        } else {
 #ifdef CONFIG_SMP
-               register_cpu_notifier(&mpic_cascaded_cpu_notifier);
+               cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_ARMADA_CASC_STARTING,
+                                         "AP_IRQ_ARMADA_CASC_STARTING",
+                                         mpic_cascaded_starting_cpu, NULL);
 #endif
                irq_set_chained_handler(parent_irq,
                                        armada_370_xp_mpic_handle_cascade_irq);
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index 62ab4ff..3a08ab9 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -12,6 +12,8 @@ enum cpuhp_state {
        CPUHP_AP_IRQ_GIC_STARTING,
        CPUHP_AP_IRQ_GICV3_STARTING,
        CPUHP_AP_IRQ_HIP04_STARTING,
+       CPUHP_AP_IRQ_ARMADA_XP_STARTING,
+       CPUHP_AP_IRQ_ARMADA_CASC_STARTING,
        CPUHP_AP_NOTIFY_STARTING,
        CPUHP_AP_ONLINE,
        CPUHP_TEARDOWN_CPU,

Reply via email to