diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2016-07-13 13:16:03 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-07-14 03:34:27 -0400 |
commit | 07d36c9e84002678d75b97d2361eb6302a718359 (patch) | |
tree | fc646ddd28ef436887bcf3bc9e977eb30e64612c | |
parent | 6a4e24518c8a10f78f44da219835239cb5aca90d (diff) |
x86/vdso: Convert to hotplug state machine
Install the callbacks via the state machine and let the core invoke
the callbacks on the already online CPUs.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>
Acked-by: Andy Lutomirski <luto@amacapital.net>
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/20160713153332.987560239@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/entry/vdso/vma.c | 20 | ||||
-rw-r--r-- | include/linux/cpuhotplug.h | 1 |
2 files changed, 5 insertions, 16 deletions
diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c index ab220ac9b3b9..25b0368de7f6 100644 --- a/arch/x86/entry/vdso/vma.c +++ b/arch/x86/entry/vdso/vma.c | |||
@@ -294,15 +294,9 @@ static void vgetcpu_cpu_init(void *arg) | |||
294 | write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_PER_CPU, &d, DESCTYPE_S); | 294 | write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_PER_CPU, &d, DESCTYPE_S); |
295 | } | 295 | } |
296 | 296 | ||
297 | static int | 297 | static int vgetcpu_online(unsigned int cpu) |
298 | vgetcpu_cpu_notifier(struct notifier_block *n, unsigned long action, void *arg) | ||
299 | { | 298 | { |
300 | long cpu = (long)arg; | 299 | return smp_call_function_single(cpu, vgetcpu_cpu_init, NULL, 1); |
301 | |||
302 | if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) | ||
303 | smp_call_function_single(cpu, vgetcpu_cpu_init, NULL, 1); | ||
304 | |||
305 | return NOTIFY_DONE; | ||
306 | } | 300 | } |
307 | 301 | ||
308 | static int __init init_vdso(void) | 302 | static int __init init_vdso(void) |
@@ -313,15 +307,9 @@ static int __init init_vdso(void) | |||
313 | init_vdso_image(&vdso_image_x32); | 307 | init_vdso_image(&vdso_image_x32); |
314 | #endif | 308 | #endif |
315 | 309 | ||
316 | cpu_notifier_register_begin(); | ||
317 | |||
318 | on_each_cpu(vgetcpu_cpu_init, NULL, 1); | ||
319 | /* notifier priority > KVM */ | 310 | /* notifier priority > KVM */ |
320 | __hotcpu_notifier(vgetcpu_cpu_notifier, 30); | 311 | return cpuhp_setup_state(CPUHP_AP_X86_VDSO_VMA_ONLINE, |
321 | 312 | "AP_X86_VDSO_VMA_ONLINE", vgetcpu_online, NULL); | |
322 | cpu_notifier_register_done(); | ||
323 | |||
324 | return 0; | ||
325 | } | 313 | } |
326 | subsys_initcall(init_vdso); | 314 | subsys_initcall(init_vdso); |
327 | #endif /* CONFIG_X86_64 */ | 315 | #endif /* CONFIG_X86_64 */ |
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 386374d19987..fe056408335e 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h | |||
@@ -14,6 +14,7 @@ enum cpuhp_state { | |||
14 | CPUHP_TEARDOWN_CPU, | 14 | CPUHP_TEARDOWN_CPU, |
15 | CPUHP_AP_ONLINE_IDLE, | 15 | CPUHP_AP_ONLINE_IDLE, |
16 | CPUHP_AP_SMPBOOT_THREADS, | 16 | CPUHP_AP_SMPBOOT_THREADS, |
17 | CPUHP_AP_X86_VDSO_VMA_ONLINE, | ||
17 | CPUHP_AP_NOTIFY_ONLINE, | 18 | CPUHP_AP_NOTIFY_ONLINE, |
18 | CPUHP_AP_ONLINE_DYN, | 19 | CPUHP_AP_ONLINE_DYN, |
19 | CPUHP_AP_ONLINE_DYN_END = CPUHP_AP_ONLINE_DYN + 30, | 20 | CPUHP_AP_ONLINE_DYN_END = CPUHP_AP_ONLINE_DYN + 30, |