On Thu, Nov 15, 2007 at 12:07:48PM -0500, Mark Lord wrote:..
..Greg, I don't know if this is relevant or not,
but x86 has bugs in the halt/reboot code for SMP.
Specifically, in native_smp_send_stop() the code now uses
spin_trylock() to "lock" the shared call buffers,
but then ignores the result.
This means that multiple CPUs can/will clobber each other
in that code.
The second bug, is that this code does not wait for the
target CPUs to actually stop before it continues.
This was the real cause of the failure-to-poweroff problems
I was having with 2.6.23, which we fixed by using CPU hotplug
to disable_nonboot_cpus() before the above code ever got run.
I have noticed that the shutdown path is quite weird, shutting down
sysdev devices differently depending on the type of shutdown, which is
probably not good.
But what change are you talking about for the poweroff problem? I have
a _lot_ of people reporting that 2.6.22 is not powering off for them and
I can't seem to figure it out. Do you have a changeset for something
that went in to fix this issue?