Skip to content
  • Lai Jiangshan's avatar
    workqueue: protect wq->pwqs and iteration with wq->mutex · b09f4fd3
    Lai Jiangshan authored
    
    
    We're expanding wq->mutex to cover all fields specific to each
    workqueue with the end goal of replacing pwq_lock which will make
    locking simpler and easier to understand.
    
    init_and_link_pwq() and pwq_unbound_release_workfn() already grab
    wq->mutex when adding or removing a pwq from wq->pwqs list.  This
    patch makes it official that the list is wq->mutex protected for
    writes and updates readers accoridingly.  Explicit IRQ toggles for
    sched-RCU read-locking in flush_workqueue_prep_pwqs() and
    drain_workqueues() are removed as the surrounding wq->mutex can
    provide sufficient synchronization.
    
    Also, assert_rcu_or_pwq_lock() is renamed to assert_rcu_or_wq_mutex()
    and checks for wq->mutex too.
    
    pwq_lock locking and assertion are not removed by this patch and a
    couple of for_each_pwq() iterations are still protected by it.
    They'll be removed by future patches.
    
    tj: Rebased on top of the current dev branch.  Updated description.
        Folded in assert_rcu_or_wq_mutex() renaming from a later patch
        along with associated comment updates.
    
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    b09f4fd3