• Tejun Heo's avatar
    workqueue: use mutex for global_cwq manager exclusion · 60373152
    Tejun Heo authored
    POOL_MANAGING_WORKERS is used to ensure that at most one worker takes
    the manager role at any given time on a given global_cwq.  Trustee
    later hitched on it to assume manager adding blocking wait for the
    bit.  As trustee already needed a custom wait mechanism, waiting for
    MANAGING_WORKERS was rolled into the same mechanism.
    
    Trustee is scheduled to be removed.  This patch separates out
    MANAGING_WORKERS wait into per-pool mutex.  Workers use
    mutex_trylock() to test for manager role and trustee uses mutex_lock()
    to claim manager roles.
    
    gcwq_claim/release_management() helpers are added to grab and release
    manager roles of all pools on a global_cwq.  gcwq_claim_management()
    always grabs pool manager mutexes in ascending pool index order and
    uses pool index as lockdep subclass.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatar"Rafael J. Wysocki" <rjw@sisk.pl>
    60373152
workqueue.c 106 KB