workqueue: Fixes for v7.3-rc1

- An unbound worker pool could be freed while still reachable through the
  pending-activation list, leading to a use-after-free. Unlink before
  dropping the reference.

- On PREEMPT_RT, the BH workqueue kick raised softirqs from preemptible
  context, tripping a lockdep assertion and possibly losing concurrently
  raised softirq bits.

- Draining BH work off a dead CPU nests two pools' callback locks, which
  lockdep misreported as recursive locking. The nesting cannot deadlock.
  Annotate it.

- Reject watchdog thresholds that overflow the conversion to jiffies.

- Make the drgn workqueue dump script work again on kernels and vmcores
  from before the workqueue attrs field rename.
tools/workqueue/wq_dump.py: Support backward compatibility for wq->attrs rename

Commit 464e454e1cb4 ("workqueue: rename wq->unbound_attrs to wq->attrs")
renamed wq->unbound_attrs to wq->attrs. When running wq_dump.py against
older running kernels or vmcores where struct workqueue_struct still
contains unbound_attrs, drgn raises an AttributeError.

Add a wq_attrs() helper to allow wq_dump.py to inspect both older and newer
kernel versions seamlessly.

Fixes: 464e454e1cb4 ("workqueue: rename wq->unbound_attrs to wq->attrs")
Signed-off-by: Aaron Tomlin <atomlin@atomlin.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
1 file changed