• Tejun Heo's avatar
    workqueue: Report work funcs that trigger automatic CPU_INTENSIVE mechanism · 63638450
    Tejun Heo authored
    Workqueue now automatically marks per-cpu work items that hog CPU for too
    long as CPU_INTENSIVE, which excludes them from concurrency management and
    prevents stalling other concurrency-managed work items. If a work function
    keeps running over the thershold, it likely needs to be switched to use an
    unbound workqueue.
    
    This patch adds a debug mechanism which tracks the work functions which
    trigger the automatic CPU_INTENSIVE mechanism and report them using
    pr_warn() with exponential backoff.
    
    v3: Documentation update.
    
    v2: Drop bouncing to kthread_worker for printing messages. It was to avoid
        introducing circular locking dependency through printk but not effective
        as it still had pool lock -> wci_lock -> printk -> pool lock loop. Let's
        just print directly using printk_deferred().
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    63638450
workqueue.c 181 KB