diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 2989b57e154a..33478bfee814 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -941,8 +941,10 @@ static void worker_enter_idle(struct worker *worker) /* idle_list is LIFO */ list_add(&worker->entry, &pool->idle_list); + raw_spin_unlock_irq(&pool->lock); if (too_many_workers(pool) && !timer_pending(&pool->idle_timer)) mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT); + raw_spin_lock_irq(&pool->lock); /* Sanity check nr_running. */ WARN_ON_ONCE(pool->nr_workers == pool->nr_idle && pool->nr_running);