• Tejun Heo's avatar
    workqueue: implement per-cwq active work limit · 1e19ffc6
    Tejun Heo authored
    Add cwq->nr_active, cwq->max_active and cwq->delayed_work.  nr_active
    counts the number of active works per cwq.  A work is active if it's
    flushable (colored) and is on cwq's worklist.  If nr_active reaches
    max_active, new works are queued on cwq->delayed_work and activated
    later as works on the cwq complete and decrement nr_active.
    
    cwq->max_active can be specified via the new @max_active parameter to
    __create_workqueue() and is set to 1 for all workqueues for now.  As
    each cwq has only single worker now, this double queueing doesn't
    cause any behavior difference visible to its users.
    
    This will be used to reimplement freeze/thaw and implement shared
    worker pool.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    1e19ffc6
workqueue.c 43.8 KB