Hello, On Thu, Jan 26, 2017 at 10:47:32AM +0000, Mel Gorman wrote: > On Wed, Jan 25, 2017 at 04:08:02PM -0800, Andrew Morton wrote: > > > + for_each_cpu(cpu, &cpus_with_pcps) { > > > + struct work_struct *work = per_cpu_ptr(&pcpu_drain, cpu); > > > + INIT_WORK(work, drain_local_pages_wq); > > > > It's strange to repeatedly run INIT_WORK() in this fashion. > > Overwriting an atomic_t which should already be zero, initializing a > > list_head which should already be in the initialized state... > > > > Can we instead do this a single time in init code? > > > > INIT_WORK does different things depending on whether LOCKDEP is enabled or > not and also whether object debugging is enabled. I'd worry that it's not > functionally equivalent or some future change would break the assumptions > about what INIT_WORK does internally. The init cost is there, but it's > insignicant in comparison to the whole workqueue operation or the old > cost of sending IPIs for that matter. Both initing once or per each invocation are perfectly valid and guaranteed to work. idk, I don't have a strong opinion hereag. Thanks. -- tejun -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>