From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753082AbdAZTW3 (ORCPT ); Thu, 26 Jan 2017 14:22:29 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:34861 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752795AbdAZTW1 (ORCPT ); Thu, 26 Jan 2017 14:22:27 -0500 Date: Thu, 26 Jan 2017 14:21:42 -0500 From: Tejun Heo To: Mel Gorman Cc: Andrew Morton , Vlastimil Babka , Linux Kernel , Linux-MM , Hillf Danton , Jesper Dangaard Brouer Subject: Re: [PATCH] mm, page_alloc: Use static global work_struct for draining per-cpu pages Message-ID: <20170126192142.GA32152@htj.duckdns.org> References: <20170125083038.rzb5f43nptmk7aed@techsingularity.net> <20170125160802.67172878e6692e45fa035f37@linux-foundation.org> <20170126104732.meri27v5lf3or22j@techsingularity.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170126104732.meri27v5lf3or22j@techsingularity.net> User-Agent: Mutt/1.7.1 (2016-10-04) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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