diff options
| -rw-r--r-- | kernel/workqueue.c | 13 | 
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index d2ac6cbfe8a..79d1d347e69 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -3598,6 +3598,12 @@ static void pwq_adjust_max_active(struct pool_workqueue *pwq)  		while (!list_empty(&pwq->delayed_works) &&  		       pwq->nr_active < pwq->max_active)  			pwq_activate_first_delayed(pwq); + +		/* +		 * Need to kick a worker after thawed or an unbound wq's +		 * max_active is bumped.  It's a slow path.  Do it always. +		 */ +		wake_up_worker(pwq->pool);  	} else {  		pwq->max_active = 0;  	} @@ -4401,13 +4407,6 @@ void thaw_workqueues(void)  	}  	spin_unlock_irq(&pwq_lock); -	/* kick workers */ -	for_each_pool(pool, pi) { -		spin_lock_irq(&pool->lock); -		wake_up_worker(pool); -		spin_unlock_irq(&pool->lock); -	} -  	workqueue_freezing = false;  out_unlock:  	mutex_unlock(&wq_mutex);  |