rcu-tasks: Use rcuwait for the rcu_tasks_kthread()
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Fri, 4 Mar 2022 11:07:25 +0000 (12:07 +0100)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 12 Apr 2022 00:06:42 +0000 (17:06 -0700)
commit88db792bbe9b140680c74e9f2f801ac00f54e05e
tree7b98245426889cc6ab7aa2e6b1c4132c0b13f74c
parentf25390033fa2445cdc4d6cf8243a9b85d942845f
rcu-tasks: Use rcuwait for the rcu_tasks_kthread()

The waitqueue used by rcu_tasks_kthread() has always only one waiter.
With a guaranteed only one waiter, this can be replaced with rcuwait
which is smaller and simpler. With rcuwait based wake counterpart, the
irqwork function (call_rcu_tasks_iw_wakeup()) can be invoked hardirq
context because it is only a wake up and no sleeping locks are involved
(unlike the wait_queue_head).
As a side effect, this is also one piece of the puzzle to pass the RCU
selftest at early boot on PREEMPT_RT.

Replace wait_queue_head with rcuwait and let the irqwork run in hardirq
context on PREEMPT_RT.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tasks.h