On Wed, Mar 20, 2013 at 03:28:15AM +0800, Lai Jiangshan wrote: > static struct worker *alloc_worker(void) > { > struct worker *worker; > @@ -2326,7 +2262,8 @@ repeat: > spin_unlock_irq(&wq_mayday_lock); > > /* migrate to the target cpu if possible */ > - worker_maybe_bind_and_lock(pool); > + set_cpus_allowed_ptr(current, pool->attrs->cpumask); > + spin_lock_irq(&pool->lock); > rescuer->pool = pool;
You can't do this. The CPU might go up between set_cpus_allowed_ptr() and spin_lock_irq() and the rescuer can end up executing a work item which was issued while the target CPU is up on the wrong CPU. Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/