• T
    workqueue: implement worker states · c8e55f36
    Tejun Heo 提交于
    Implement worker states.  After created, a worker is STARTED.  While a
    worker isn't processing a work, it's IDLE and chained on
    gcwq->idle_list.  While processing a work, a worker is BUSY and
    chained on gcwq->busy_hash.  Also, gcwq now counts the number of all
    workers and idle ones.
    
    worker_thread() is restructured to reflect state transitions.
    cwq->more_work is removed and waking up a worker makes it check for
    events.  A worker is killed by setting DIE flag while it's IDLE and
    waking it up.
    
    This gives gcwq better visibility of what's going on and allows it to
    find out whether a work is executing quickly which is necessary to
    have multiple workers processing the same cwq.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    c8e55f36
workqueue.c 51.5 KB