• Tejun Heo's avatar
    workqueue: Use a kthread_worker to release pool_workqueues · 967b494e
    Tejun Heo authored
    pool_workqueue release path is currently bounced to system_wq; however, this
    is a bit tricky because this bouncing occurs while holding a pool lock and
    thus has risk of causing a A-A deadlock. This is currently addressed by the
    fact that only unbound workqueues use this bouncing path and system_wq is a
    per-cpu workqueue.
    
    While this works, it's brittle and requires a work-around like setting the
    lockdep subclass for the lock of unbound pools. Besides, future changes will
    use the bouncing path for per-cpu workqueues too making the current approach
    unusable.
    
    Let's just use a dedicated kthread_worker to untangle the dependency. This
    is just one more kthread for all workqueues and makes the pwq release logic
    simpler and more robust.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    967b494e
workqueue.c 181 KB