diff options
Diffstat (limited to 'kernel/workqueue.c')
-rw-r--r-- | kernel/workqueue.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 3bfdff06eea7..5f5068e94003 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
@@ -4554,6 +4554,17 @@ static void rebind_workers(struct worker_pool *pool) | |||
4554 | pool->attrs->cpumask) < 0); | 4554 | pool->attrs->cpumask) < 0); |
4555 | 4555 | ||
4556 | spin_lock_irq(&pool->lock); | 4556 | spin_lock_irq(&pool->lock); |
4557 | |||
4558 | /* | ||
4559 | * XXX: CPU hotplug notifiers are weird and can call DOWN_FAILED | ||
4560 | * w/o preceding DOWN_PREPARE. Work around it. CPU hotplug is | ||
4561 | * being reworked and this can go away in time. | ||
4562 | */ | ||
4563 | if (!(pool->flags & POOL_DISASSOCIATED)) { | ||
4564 | spin_unlock_irq(&pool->lock); | ||
4565 | return; | ||
4566 | } | ||
4567 | |||
4557 | pool->flags &= ~POOL_DISASSOCIATED; | 4568 | pool->flags &= ~POOL_DISASSOCIATED; |
4558 | 4569 | ||
4559 | for_each_pool_worker(worker, pool) { | 4570 | for_each_pool_worker(worker, pool) { |