]> git.baikalelectronics.ru Git - kernel.git/commit
stop_machine: introduce stop_machine_create/destroy.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 22 Dec 2008 11:36:30 +0000 (12:36 +0100)
committerRusty Russell <rusty@rustcorp.com.au>
Sun, 4 Jan 2009 22:10:14 +0000 (08:40 +1030)
commit047e72767aa2525d592e157f55c1bec646c7c8c3
tree36396347bb750a6aecb0771cfebf9887aaaae492
parent1ab2e099187209e09dafc42a1cf36edf2a28a677
stop_machine: introduce stop_machine_create/destroy.

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.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
include/linux/stop_machine.h
kernel/cpu.c
kernel/stop_machine.c