• T
    workqueue: perform non-reentrancy test when queueing to unbound workqueues too · c9178087
    Tejun Heo 提交于
    Because per-cpu workqueues have multiple pwqs (pool_workqueues) to
    serve the CPUs, to guarantee that a single work item isn't queued on
    one pwq while still executing another, __queue_work() takes a look at
    the previous pool the target work item was on and if it's still
    executing there, queue the work item on that pool.
    
    To support changing workqueue_attrs on the fly, unbound workqueues too
    will have multiple pwqs and thus need non-reentrancy test when
    queueing.  This patch modifies __queue_work() such that the reentrancy
    test is performed regardless of the workqueue type.
    
    per_cpu_ptr(wq->cpu_pwqs, cpu) used to be used to determine the
    matching pwq for the last pool.  This can't be used for unbound
    workqueues and is replaced with worker->current_pwq which also happens
    to be simpler.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Reviewed-by: NLai Jiangshan <laijs@cn.fujitsu.com>
    c9178087
workqueue.c 114.0 KB