workqueue: use zalloc_cpumask_var() for gcwq->mayday_mask
authorTejun Heo <tj@kernel.org>
Tue, 31 Aug 2010 09:18:34 +0000 (11:18 +0200)
committerTejun Heo <tj@kernel.org>
Tue, 31 Aug 2010 09:18:34 +0000 (11:18 +0200)
alloc_mayday_mask() was using alloc_cpumask_var() making
gcwq->mayday_mask contain garbage after initialization on
CONFIG_CPUMASK_OFFSTACK=y configurations.  This combined with the
previously fixed GCWQ_DISASSOCIATED initialization bug could make
rescuers fall into infinite loop trying to bind to an offline cpu.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: CAI Qian <caiqian@redhat.com>
kernel/workqueue.c

index c8183b235d16078f713da799a1430a92c300d025..785542976b0079b92c9dce5c364d9a305dd9a07d 100644 (file)
@@ -196,7 +196,7 @@ typedef cpumask_var_t mayday_mask_t;
        cpumask_test_and_set_cpu((cpu), (mask))
 #define mayday_clear_cpu(cpu, mask)            cpumask_clear_cpu((cpu), (mask))
 #define for_each_mayday_cpu(cpu, mask)         for_each_cpu((cpu), (mask))
-#define alloc_mayday_mask(maskp, gfp)          alloc_cpumask_var((maskp), (gfp))
+#define alloc_mayday_mask(maskp, gfp)          zalloc_cpumask_var((maskp), (gfp))
 #define free_mayday_mask(mask)                 free_cpumask_var((mask))
 #else
 typedef unsigned long mayday_mask_t;