[Bug 12492] Re: [patch 1/2] stop_machine: introduce stop_machine_create/destroy.

Andrew Morton
2009-01-27T08:06:27Z

On Mon, 22 Dec 2008 12:36:30 +0100 Heiko Carstens <heiko.carstens@de.ibm.com> wrote:

> Introduce stop_machine_create/destroy. With this interface subsystems
> that need a non-failing stop_machine environment can create the
> stop_machine machine threads before actually calling stop_machine.
> When the threads aren't needed anymore they can be killed with
> stop_machine_destroy again.
>
> When stop_machine gets called and the threads aren't present they
> will be created and destroyed automatically. This restores the old
> behaviour of stop_machine.
>
> This patch also converts cpu hotplug to the new interface since it
> is special: cpu_down calls __stop_machine instead of stop_machine.
> However the kstop threads will only be created when stop_machine
> gets called.
>
> Changing the code so that the threads would be created automatically
> on __stop_machine is currently not possible: when __stop_machine gets
> called we hold cpu_add_remove_lock, which is the same lock that
> create_rt_workqueue would take. So the workqueue needs to be created
> before the cpu hotplug code locks cpu_add_remove_lock.

In http://bugzilla.kernel.org/show_bug.cgi?id=12492, Thomas (cc'ed
here) reports

Commit 9ea09af3bd3090e8349ca2899ca2011bd94cda85 introduced a
regression that caused the kernel to fail to suspend. The 'sleeping'
LED on the laptop just keeps blinking and the laptop never shuts
down. I think this was eventually fixed because with 2.6.29-rc1 and
-rc2 the laptop suspends fine, but fails to resume. When I try to
resume, all I see is a blinking cursor in the top left corner of the
screen.

I'm using acpi_sleep=s3_bios,s3_mode, suspending using a script
that does: echo mem > /sys/power/state.