linux/arch/x86_64
Eric W. Biederman 6e3fbee5f1 [PATCH] i386/x86-64: Don't IPI to offline cpus on shutdown
So why are we calling smp_send_stop from machine_halt?

We don't.

Looking more closely at the bug report the problem here
is that halt -p is called which triggers not a halt but
an attempt to power off.

machine_power_off calls machine_shutdown which calls smp_send_stop.

If pm_power_off is set we should never make it out machine_power_off
to the call of do_exit.  So pm_power_off must not be set in this case.
When pm_power_off is not set we expect machine_power_off to devolve
into machine_halt.

So how do we fix this?

Playing too much with smp_send_stop is dangerous because it
must also be safe to be called from panic.

It looks like the obviously correct fix is to only call
machine_shutdown when pm_power_off is defined.  Doing
that will make Andi's assumption about not scheduling
true and generally simplify what must be supported.

This turns machine_power_off into a noop like machine_halt
when pm_power_off is not defined.

If the expected behavior is that sys_reboot(LINUX_REBOOT_CMD_POWER_OFF)
becomes sys_reboot(LINUX_REBOOT_CMD_HALT) if pm_power_off is NULL
this is not quite a comprehensive fix as we pass a different parameter
to the reboot notifier and we set system_state to a different value
before calling device_shutdown().

Unfortunately any fix more comprehensive I can think of is not
obviously correct.  The core problem is that there is no architecture
independent way to detect if machine_power will become a noop, without
calling it.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-01-11 19:04:50 -08:00
..
boot Merge ssh://master.kernel.org/pub/scm/linux/kernel/git/sam/kbuild 2006-01-10 08:21:33 -08:00
crypto [CRYPTO] Allow AES C/ASM implementations to coexist 2006-01-09 14:15:39 -08:00
ia32 [PATCH] x86_64: More CFI fixes for 32bit entry code 2006-01-11 19:01:09 -08:00
kernel [PATCH] i386/x86-64: Don't IPI to offline cpus on shutdown 2006-01-11 19:04:50 -08:00
lib [PATCH] x86_64: Remove optimization for B stepping AMD K8 2005-11-14 19:55:17 -08:00
mm [PATCH] x86_64: Adjust page fault handling 2006-01-11 19:01:11 -08:00
oprofile [PATCH] Move Kprobes and Oprofile to "Instrumentation Support" menu 2005-11-07 07:53:35 -08:00
pci [PATCH] Fix build with CONFIG_PCI_MMCONFIG 2005-12-20 10:41:57 -08:00
defconfig [PATCH] x86_64: Update defconfig 2006-01-11 19:01:09 -08:00
Kconfig [PATCH] kexec: change CONFIG_PHYSICAL_START dependency 2006-01-10 08:01:29 -08:00
Kconfig.debug [PATCH] x86/x86_64: mark rodata section read-only: x86-64 support 2006-01-06 08:33:36 -08:00
Makefile [PATCH] x86_64: Separate CONFIG_UNWIND_INFO from CONFIG_DEBUG_INFO 2006-01-11 19:01:10 -08:00