diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2016-07-13 13:16:34 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-07-15 04:40:22 -0400 |
commit | 148b9e2abea6f50e4620e4ac0683b4913c4364c0 (patch) | |
tree | 0e52b33b24e88eb891a434518a25a5e01c858ada | |
parent | 251a5fd64b720a0646eddb8c54f5e9ddba066e72 (diff) |
x86/apb_timer: Convert to hotplug state machine
Install the callbacks via the state machine. There is no setup just one
teardown callback. Remove the silly comment about the workqueue up dependency.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20160713153335.625342983@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/kernel/apb_timer.c | 29 | ||||
-rw-r--r-- | include/linux/cpuhotplug.h | 1 |
2 files changed, 11 insertions, 19 deletions
diff --git a/arch/x86/kernel/apb_timer.c b/arch/x86/kernel/apb_timer.c index cefacbad1531..456316f6c868 100644 --- a/arch/x86/kernel/apb_timer.c +++ b/arch/x86/kernel/apb_timer.c | |||
@@ -215,26 +215,18 @@ void apbt_setup_secondary_clock(void) | |||
215 | * cpu timers during the offline process due to the ordering of notification. | 215 | * cpu timers during the offline process due to the ordering of notification. |
216 | * the extra interrupt is harmless. | 216 | * the extra interrupt is harmless. |
217 | */ | 217 | */ |
218 | static int apbt_cpuhp_notify(struct notifier_block *n, | 218 | static int apbt_cpu_dead(unsigned int cpu) |
219 | unsigned long action, void *hcpu) | ||
220 | { | 219 | { |
221 | unsigned long cpu = (unsigned long)hcpu; | ||
222 | struct apbt_dev *adev = &per_cpu(cpu_apbt_dev, cpu); | 220 | struct apbt_dev *adev = &per_cpu(cpu_apbt_dev, cpu); |
223 | 221 | ||
224 | switch (action & ~CPU_TASKS_FROZEN) { | 222 | dw_apb_clockevent_pause(adev->timer); |
225 | case CPU_DEAD: | 223 | if (system_state == SYSTEM_RUNNING) { |
226 | dw_apb_clockevent_pause(adev->timer); | 224 | pr_debug("skipping APBT CPU %u offline\n", cpu); |
227 | if (system_state == SYSTEM_RUNNING) { | 225 | } else { |
228 | pr_debug("skipping APBT CPU %lu offline\n", cpu); | 226 | pr_debug("APBT clockevent for cpu %u offline\n", cpu); |
229 | } else { | 227 | dw_apb_clockevent_stop(adev->timer); |
230 | pr_debug("APBT clockevent for cpu %lu offline\n", cpu); | ||
231 | dw_apb_clockevent_stop(adev->timer); | ||
232 | } | ||
233 | break; | ||
234 | default: | ||
235 | pr_debug("APBT notified %lu, no action\n", action); | ||
236 | } | 228 | } |
237 | return NOTIFY_OK; | 229 | return 0; |
238 | } | 230 | } |
239 | 231 | ||
240 | static __init int apbt_late_init(void) | 232 | static __init int apbt_late_init(void) |
@@ -242,9 +234,8 @@ static __init int apbt_late_init(void) | |||
242 | if (intel_mid_timer_options == INTEL_MID_TIMER_LAPIC_APBT || | 234 | if (intel_mid_timer_options == INTEL_MID_TIMER_LAPIC_APBT || |
243 | !apb_timer_block_enabled) | 235 | !apb_timer_block_enabled) |
244 | return 0; | 236 | return 0; |
245 | /* This notifier should be called after workqueue is ready */ | 237 | return cpuhp_setup_state(CPUHP_X86_APB_DEAD, "X86_APB_DEAD", NULL, |
246 | hotcpu_notifier(apbt_cpuhp_notify, -20); | 238 | apbt_cpu_dead); |
247 | return 0; | ||
248 | } | 239 | } |
249 | fs_initcall(apbt_late_init); | 240 | fs_initcall(apbt_late_init); |
250 | #else | 241 | #else |
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 8c190a85af6e..3e719ba44fbe 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h | |||
@@ -13,6 +13,7 @@ enum cpuhp_state { | |||
13 | CPUHP_PERF_POWER, | 13 | CPUHP_PERF_POWER, |
14 | CPUHP_PERF_SUPERH, | 14 | CPUHP_PERF_SUPERH, |
15 | CPUHP_X86_HPET_DEAD, | 15 | CPUHP_X86_HPET_DEAD, |
16 | CPUHP_X86_APB_DEAD, | ||
16 | CPUHP_WORKQUEUE_PREP, | 17 | CPUHP_WORKQUEUE_PREP, |
17 | CPUHP_NOTIFY_PREPARE, | 18 | CPUHP_NOTIFY_PREPARE, |
18 | CPUHP_BRINGUP_CPU, | 19 | CPUHP_BRINGUP_CPU, |