Re: 32-bit Athlon X2 won't poweroff (was: Fix SMP poweroff hangs)

From: Mark Lord
Date: Sun Sep 30 2007 - 18:53:11 EST


Santiago Garcia Mantinan wrote:
I booted into single mode, then umounted all unneeded stuff and put / to ro,
stopped all unused raids, ... then did...
..
strace /bin/halt -f -p
..
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, {2, 0}) = 0
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART|0x88888888) = 0
kill(1, SIGTSTP) = 0
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF <unfinished ... exit status 0>

Same output on the screen as I commented before, again I got to the shell
and this time I even typed some commands like ps and amazingly they still
worked, even though this was supposed to be halted.

Mmm.. okay, user space is doing the right things.

So next is inside the kernel itself, at linux/kernel/sys.c :: sys_reboot(),
where we see this code:

/* Instead of trying to make the power_off code look like
* halt when pm_power_off is not set do it the easy way.
*/
if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off)
cmd = LINUX_REBOOT_CMD_HALT;

This converts a "poweroff" into a "reboot" if no machine dependent
power off function has been bound in (pm_power_off() is a function pointer).

So for this to work, I believe that either ACPI or APM has to have been
configured into the kernel (and the modules loaded). Your kernel .config
from earlier shows ACPI built-in to the kernel core, so it should be present.

Unless you booted with noacpi or some such parameter..
So let's have a look at the kernel boot logs,
and you could also try CONGIG_ACPI_DEBUG=y

Bizarre (and nothing to do with my patch).

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/