• Tejun Heo's avatar
    workqueue: update synchronization rules on worker_pool_idr · fa1b54e6
    Tejun Heo authored
    Make worker_pool_idr protected by workqueue_lock for writes and
    sched-RCU protected for reads.  Lockdep assertions are added to
    for_each_pool() and get_work_pool() and all their users are converted
    to either hold workqueue_lock or disable preemption/irq.
    
    worker_pool_assign_id() is updated to hold workqueue_lock when
    allocating a pool ID.  As idr_get_new() always performs RCU-safe
    assignment, this is enough on the writer side.
    
    As standard pools are never destroyed, there's nothing to do on that
    side.
    
    The locking is superflous at this point.  This is to help
    implementation of unbound pools/pwqs with custom attributes.
    
    This patch doesn't introduce any behavior changes.
    
    v2: Updated for_each_pwq() use if/else for the hidden assertion
        statement instead of just if as suggested by Lai.  This avoids
        confusing the following else clause.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    fa1b54e6
workqueue.c 105 KB