rcuperf: Do not wake up shutdown wait queue if "shutdown" is false.
authorArtem Savkov <artem.savkov@gmail.com>
Sun, 7 Feb 2016 12:31:39 +0000 (13:31 +0100)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 31 Mar 2016 20:39:51 +0000 (13:39 -0700)
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>
kernel/rcu/rcuperf.c

index 4c0572859ff0fc24b69b1a922a944b1c299ce9aa..3cee0d8393ed8adba3bf4136fe29f420890e94ec 100644 (file)
@@ -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 &&