workqueue: Convert the pool::lock and wq_mayday_lock to raw_spinlock_t
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 27 May 2020 19:46:33 +0000 (21:46 +0200)
committerTejun Heo <tj@kernel.org>
Fri, 29 May 2020 14:03:47 +0000 (10:03 -0400)
commita9b8a985294debae00f6c087dfec8c384d30a3b9
treec09dc4c70ed5633975815ab6b9ca1a1e93208343
parentd8bb65ab70f702531aaaa11d9710f9450078e295
workqueue: Convert the pool::lock and wq_mayday_lock to raw_spinlock_t

The workqueue code has it's internal spinlocks (pool::lock), which
are acquired on most workqueue operations. These spinlocks are
converted to 'sleeping' spinlocks on a RT-kernel.

Workqueue functions can be invoked from contexts which are truly atomic
even on a PREEMPT_RT enabled kernel. Taking sleeping locks from such
contexts is forbidden.

The pool::lock hold times are bound and the code sections are
relatively short, which allows to convert pool::lock and as a
consequence wq_mayday_lock to raw spinlocks which are truly spinning
locks even on a PREEMPT_RT kernel.

With the previous conversion of the manager waitqueue to a simple
waitqueue workqueues are now fully RT compliant.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Lai Jiangshan <jiangshanlai@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c