rcu: fix bug in rcutorture system-shutdown code
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 7 Jan 2009 22:33:30 +0000 (14:33 -0800)
committerIngo Molnar <mingo@elte.hu>
Wed, 7 Jan 2009 22:36:25 +0000 (23:36 +0100)
commitc9d557c19f94df42db78d4a5de4d25feee694bad
treea52f75630be16e6abf0cc11b70c089fa49905453
parent8903709b054a8dafe4e8c6d9a6444034d7aba36f
rcu: fix bug in rcutorture system-shutdown code

This patch fixes an rcutorture bug found by Eric Sesterhenn that
resulted in oopses in response to "rmmod rcutorture".  The problem
was in some new code that attempted to handle the case where a system
is shut down while rcutorture is still running, for example, when
rcutorture is built into the kernel so that it cannot be removed.
The fix causes the rcutorture threads to "park" in an
schedule_timeout_uninterruptible(MAX_SCHEDULE_TIMEOUT) rather than
trying to get them to terminate cleanly.  Concurrent shutdown and
rmmod is illegal.

I believe that this is 2.6.29 material, as it is used in some testing
setups.

For reference, here are the rcutorture operating modes:

CONFIG_RCU_TORTURE_TEST=m

This is the normal rcutorture build.  Use "modprobe rcutorture"
(with optional arguments) to start, and "rmmod rcutorture" to
stop.  If you shut the system down without doing the rmmod, you
should see console output like:

rcutorture thread rcu_torture_writer parking due to system shutdown

One for each rcutorture kthread.

CONFIG_RCU_TORTURE_TEST=y
CONFIG_RCU_TORTURE_TEST_RUNNABLE=n

Use this if you want rcutorture built in, but don't want the
test to start running during early boot.  To start the
torturing:

echo 1 > /proc/sys/kernel/rcutorture_runnable

To stop the torturing, s/1/0/

You will get "parking" console messages as noted above when
you shut the system down.

CONFIG_RCU_TORTURE_TEST=y
CONFIG_RCU_TORTURE_TEST_RUNNABLE=y

Same as above, except that the torturing starts during early
boot.  Only for the stout of heart and strong of stomach.
The same /proc entry noted above may be used to control the
test.

Located-by: Eric Sesterhenn <snakebyte@gmx.de>
Tested-by: Eric Sesterhenn <snakebyte@gmx.de>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/rcutorture.c