diff options
author | Artem Savkov <artem.savkov@gmail.com> | 2016-02-07 13:31:39 +0100 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2016-03-31 22:39:51 +0200 |
commit | e6fb1fc1085e5b5155bc8f3d3385c48b8bdde95e (patch) | |
tree | 2879f06cb02b7c9a466eeb3cde9b4e361bde044f /kernel/rcu/rcuperf.c | |
parent | rcutorture: Add largish-system rcuperf scenario (diff) | |
download | linux-e6fb1fc1085e5b5155bc8f3d3385c48b8bdde95e.tar.xz linux-e6fb1fc1085e5b5155bc8f3d3385c48b8bdde95e.zip |
rcuperf: Do not wake up shutdown wait queue if "shutdown" is false.
After finishing its tests rcuperf tries to wake up shutdown_wq even if
"shutdown" param is set to false, resulting in a wake_up() call on an
unitialized wait_queue_head_t which leads to "BUG: spinlock bad magic" and
"BUG: unable to handle kernel NULL pointer dereference".
Fix by checking "shutdown" param before waking up the queue.
Signed-off-by: Artem Savkov <artem.savkov@gmail.com>
Diffstat (limited to 'kernel/rcu/rcuperf.c')
-rw-r--r-- | kernel/rcu/rcuperf.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/rcu/rcuperf.c b/kernel/rcu/rcuperf.c index 4c0572859ff0..3cee0d8393ed 100644 --- a/kernel/rcu/rcuperf.c +++ b/kernel/rcu/rcuperf.c @@ -423,8 +423,10 @@ rcu_perf_writer(void *arg) b_rcu_perf_writer_finished = cur_ops->completed(); } - smp_mb(); /* Assign before wake. */ - wake_up(&shutdown_wq); + if (shutdown) { + smp_mb(); /* Assign before wake. */ + wake_up(&shutdown_wq); + } } } if (done && !alldone && |