x86/smp: Don't ever patch back to UP if we unplug cpus
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 6 Aug 2012 07:59:49 +0000 (17:29 +0930)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 13 Feb 2018 18:32:14 +0000 (18:32 +0000)
commit0ed38b9005b4d959baa7a454e8e81784488b3a49
tree17a6ae3acc543ffd7e35f4e08d496def0fcc6c3d
parent0a8896d4a278033a7e860cfd43da0ade04b2ef48
x86/smp: Don't ever patch back to UP if we unplug cpus

commit 816afe4ff98ee10b1d30fd66361be132a0a5cee6 upstream.

We still patch SMP instructions to UP variants if we boot with a
single CPU, but not at any other time.  In particular, not if we
unplug CPUs to return to a single cpu.

Paul McKenney points out:

 mean offline overhead is 6251/48=130.2 milliseconds.

 If I remove the alternatives_smp_switch() from the offline
 path [...] the mean offline overhead is 550/42=13.1 milliseconds

Basically, we're never going to get those 120ms back, and the
code is pretty messy.

We get rid of:

 1) The "smp-alt-once" boot option. It's actually "smp-alt-boot", the
    documentation is wrong. It's now the default.

 2) The skip_smp_alternatives flag used by suspend.

 3) arch_disable_nonboot_cpus_begin() and arch_disable_nonboot_cpus_end()
    which were only used to set this one flag.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paul.mckenney@us.ibm.com>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/87vcgwwive.fsf@rustcorp.com.au
Signed-off-by: Ingo Molnar <mingo@kernel.org>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Documentation/kernel-parameters.txt
arch/x86/include/asm/alternative.h
arch/x86/kernel/alternative.c
arch/x86/kernel/smpboot.c
arch/x86/xen/smp.c
kernel/cpu.c