diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-29 16:55:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-29 16:55:30 -0400 |
commit | a6408f6cb63ac0958fee7dbce7861ffb540d8a49 (patch) | |
tree | c94a835d343974171951e3b805e6bbbb02852ebc /drivers/irqchip/irq-gic.c | |
parent | 1a81a8f2a5918956e214bb718099a89e500e7ec5 (diff) | |
parent | 4fae16dffb812f0e0d98a0b2b0856ca48ca63e6c (diff) |
Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull smp hotplug updates from Thomas Gleixner:
"This is the next part of the hotplug rework.
- Convert all notifiers with a priority assigned
- Convert all CPU_STARTING/DYING notifiers
The final removal of the STARTING/DYING infrastructure will happen
when the merge window closes.
Another 700 hundred line of unpenetrable maze gone :)"
* 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (70 commits)
timers/core: Correct callback order during CPU hot plug
leds/trigger/cpu: Move from CPU_STARTING to ONLINE level
powerpc/numa: Convert to hotplug state machine
arm/perf: Fix hotplug state machine conversion
irqchip/armada: Avoid unused function warnings
ARC/time: Convert to hotplug state machine
clocksource/atlas7: Convert to hotplug state machine
clocksource/armada-370-xp: Convert to hotplug state machine
clocksource/exynos_mct: Convert to hotplug state machine
clocksource/arm_global_timer: Convert to hotplug state machine
rcu: Convert rcutree to hotplug state machine
KVM/arm/arm64/vgic-new: Convert to hotplug state machine
smp/cfd: Convert core to hotplug state machine
x86/x2apic: Convert to CPU hotplug state machine
profile: Convert to hotplug state machine
timers/core: Convert to hotplug state machine
hrtimer: Convert to hotplug state machine
x86/tboot: Convert to hotplug state machine
arm64/armv8 deprecated: Convert to hotplug state machine
hwtracing/coresight-etm4x: Convert to hotplug state machine
...
Diffstat (limited to 'drivers/irqchip/irq-gic.c')
-rw-r--r-- | drivers/irqchip/irq-gic.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 1de07eb5839c..c2cab572c511 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c | |||
@@ -984,25 +984,12 @@ static int gic_irq_domain_translate(struct irq_domain *d, | |||
984 | return -EINVAL; | 984 | return -EINVAL; |
985 | } | 985 | } |
986 | 986 | ||
987 | #ifdef CONFIG_SMP | 987 | static int gic_starting_cpu(unsigned int cpu) |
988 | static int gic_secondary_init(struct notifier_block *nfb, unsigned long action, | ||
989 | void *hcpu) | ||
990 | { | 988 | { |
991 | if (action == CPU_STARTING || action == CPU_STARTING_FROZEN) | 989 | gic_cpu_init(&gic_data[0]); |
992 | gic_cpu_init(&gic_data[0]); | 990 | return 0; |
993 | return NOTIFY_OK; | ||
994 | } | 991 | } |
995 | 992 | ||
996 | /* | ||
997 | * Notifier for enabling the GIC CPU interface. Set an arbitrarily high | ||
998 | * priority because the GIC needs to be up before the ARM generic timers. | ||
999 | */ | ||
1000 | static struct notifier_block gic_cpu_notifier = { | ||
1001 | .notifier_call = gic_secondary_init, | ||
1002 | .priority = 100, | ||
1003 | }; | ||
1004 | #endif | ||
1005 | |||
1006 | static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, | 993 | static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, |
1007 | unsigned int nr_irqs, void *arg) | 994 | unsigned int nr_irqs, void *arg) |
1008 | { | 995 | { |
@@ -1177,8 +1164,10 @@ static int __init __gic_init_bases(struct gic_chip_data *gic, | |||
1177 | gic_cpu_map[i] = 0xff; | 1164 | gic_cpu_map[i] = 0xff; |
1178 | #ifdef CONFIG_SMP | 1165 | #ifdef CONFIG_SMP |
1179 | set_smp_cross_call(gic_raise_softirq); | 1166 | set_smp_cross_call(gic_raise_softirq); |
1180 | register_cpu_notifier(&gic_cpu_notifier); | ||
1181 | #endif | 1167 | #endif |
1168 | cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_GIC_STARTING, | ||
1169 | "AP_IRQ_GIC_STARTING", | ||
1170 | gic_starting_cpu, NULL); | ||
1182 | set_handle_irq(gic_handle_irq); | 1171 | set_handle_irq(gic_handle_irq); |
1183 | if (static_key_true(&supports_deactivate)) | 1172 | if (static_key_true(&supports_deactivate)) |
1184 | pr_info("GIC: Using split EOI/Deactivate mode\n"); | 1173 | pr_info("GIC: Using split EOI/Deactivate mode\n"); |