• Tejun Heo's avatar
    workqueue: reimplement workqueue freeze using max_active · a0a1a5fd
    Tejun Heo authored
    Currently, workqueue freezing is implemented by marking the worker
    freezeable and calling try_to_freeze() from dispatch loop.
    Reimplement it using cwq->limit so that the workqueue is frozen
    instead of the worker.
    
    * workqueue_struct->saved_max_active is added which stores the
      specified max_active on initialization.
    
    * On freeze, all cwq->max_active's are quenched to zero.  Freezing is
      complete when nr_active on all cwqs reach zero.
    
    * On thaw, all cwq->max_active's are restored to wq->saved_max_active
      and the worklist is repopulated.
    
    This new implementation allows having single shared pool of workers
    per cpu.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    a0a1a5fd
process.c 3.72 KB