aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/workqueue.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-05-18 06:29:23 -0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-05-18 06:29:23 -0300
commit4ddd4fd497da1dfd99aa197eaca053d1b3da8eaf (patch)
tree838cc4aec431f1331bc834691e962fb4a39c8897 /kernel/workqueue.c
parent[media] exynos-gsc: avoid build warning without CONFIG_OF (diff)
parentLinux 4.6 (diff)
downloadlinux-4ddd4fd497da1dfd99aa197eaca053d1b3da8eaf.tar.gz
linux-4ddd4fd497da1dfd99aa197eaca053d1b3da8eaf.zip
Merge tag 'v4.6' into patchwork
Linux 4.6 * tag 'v4.6': (163 commits) Linux 4.6 arm64: bpf: jit JMP_JSET_{X,K} net/route: enforce hoplimit max value nf_conntrack: avoid kernel pointer value leak in slab name drivers: net: xgene: fix register offset drivers: net: xgene: fix statistics counters race condition drivers: net: xgene: fix ununiform latency across queues drivers: net: xgene: fix sharing of irqs drivers: net: xgene: fix IPv4 forward crash xen-netback: fix extra_info handling in xenvif_tx_err() mm: thp: calculate the mapcount correctly for THP pages during WP faults ksm: fix conflict between mmput and scan_get_next_rmap_item ocfs2: fix posix_acl_create deadlock ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang net: mvneta: bm: fix dependencies again perf stat: Fallback to user only counters when perf_event_paranoid > 1 perf evsel: Handle EACCESS + perf_event_paranoid=2 in fallback() drm/amdgpu: fix DP mode validation drm/radeon: fix DP mode validation perf evsel: Improve EPERM error handling in open_strerror() ...
Diffstat (limited to 'kernel/workqueue.c')
-rw-r--r--kernel/workqueue.c11
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)
pool->attrs->cpumask) < 0);
spin_lock_irq(&pool->lock);
+
+ /*
+ * XXX: CPU hotplug notifiers are weird and can call DOWN_FAILED
+ * w/o preceding DOWN_PREPARE. Work around it. CPU hotplug is
+ * being reworked and this can go away in time.
+ */
+ if (!(pool->flags & POOL_DISASSOCIATED)) {
+ spin_unlock_irq(&pool->lock);
+ return;
+ }
+
pool->flags &= ~POOL_DISASSOCIATED;
for_each_pool_worker(worker, pool) {