> Well yes, but afaict the workqueue stuff hasn't been settled yet, and > the rcutorture patch Paul did was just plain racy and who knows what > other daft kthread users are out there. That and we're at -rc3.
I just send the V4 patchset for the workqueue. Please take a look. > @@ -1861,6 +1861,8 @@ static void worker_attach_to_pool(struct worker *worker, > */ > if (pool->flags & POOL_DISASSOCIATED) > worker->flags |= WORKER_UNBOUND; > + else > + kthread_set_per_cpu(worker->task, true); I think kthread_set_per_cpu(worker->task, false) is also needed for worker_detach_from_pool() or at least rescuer_thread() who doesn't go to die after detached from the pool. > I thought only pcpu pools would get the POOL_DISASSOCIATED flag on > offline, but it seems unbound pools also get it at init time. Did I get > that right? You are right. The POOL_DISASSOCIATED flag indicates whether the pool is concurrency management or not (negative way, POOL_DISASSOCIATED means "not concurrency management"). So it should be applied for all unbound pools. When !POOL_DISASSOCIATED means it is a percpu pool, and the pool->cpu is online and the offline callback has not been called yet even the pool->cpu is going to be offline. So !POOL_DISASSOCIATED is used a lot in the code.