From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A7D0C433EF for ; Thu, 27 Jan 2022 13:36:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 80F046B0071; Thu, 27 Jan 2022 08:36:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 797696B0072; Thu, 27 Jan 2022 08:36:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 610AB6B0075; Thu, 27 Jan 2022 08:36:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0030.hostedemail.com [216.40.44.30]) by kanga.kvack.org (Postfix) with ESMTP id 4CF886B0072 for ; Thu, 27 Jan 2022 08:36:50 -0500 (EST) Received: from smtpin31.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id EDA1090071 for ; Thu, 27 Jan 2022 13:36:49 +0000 (UTC) X-FDA: 79076167338.31.F414D05 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id 5593E180011 for ; Thu, 27 Jan 2022 13:36:49 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 9A61261BE3; Thu, 27 Jan 2022 13:36:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9BF29C340E4; Thu, 27 Jan 2022 13:36:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1643290608; bh=F9Lanb3MeXhx6oTm0RnhfrOZTdSI4PVnjIBtYmMfTyk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rYhwfCBh8kuMsZ/Hq3OY89hCboiUPMld7e3/cMHTJSpgI+zu3QSxPtvjD4+qxok7t ia7Lv2Zu81A01mzFbfauTXyNYhnJEZaa6fWWlnsqnX6F6N8EoJDPE8PQ3//pHRngz7 fsFyIgsNi8zd+j05EMVB2t0y50F+Ya0suL9r6ERiYptt+tVsYgihgA70O7CNfw7Xmp s5QkyUQGFNw3BVK3hiozx5ObbawbuSQEcV9We0bpQlzRbmvLChhA2MLTx/x8GZbezT LnyINsFPNNzwxUEq2lW6tVM40jWnK2V4Pf1h7p9KU+5JAcHOHWg2OG3dvD51WmBoID sqnuxUDBq/jJA== Date: Thu, 27 Jan 2022 15:36:39 +0200 From: Mike Rapoport To: Michal Hocko Cc: Andrew Morton , linux-mm@kvack.org, LKML , David Hildenbrand , Alexey Makhalov , Dennis Zhou , Eric Dumazet , Oscar Salvador , Tejun Heo , Christoph Lameter , Nico Pache , Wei Yang , Rafael Aquini , Michal Hocko Subject: Re: [PATCH 1/6] mm, memory_hotplug: make arch_alloc_nodedata independent on CONFIG_MEMORY_HOTPLUG Message-ID: References: <20220127085305.20890-1-mhocko@kernel.org> <20220127085305.20890-2-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220127085305.20890-2-mhocko@kernel.org> X-Rspamd-Queue-Id: 5593E180011 X-Rspam-User: nil Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=rYhwfCBh; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf24.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org X-Stat-Signature: 6umu9rr3un8mahmsy3xqp15cai5puzua X-Rspamd-Server: rspam08 X-HE-Tag: 1643290609-166614 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, Jan 27, 2022 at 09:53:00AM +0100, Michal Hocko wrote: > From: Michal Hocko > > This is a preparatory patch and it doesn't introduce any functional > change. It merely pulls out arch_alloc_nodedata (and co) outside of > CONFIG_MEMORY_HOTPLUG because the following patch will need to call this > from the generic MM code. > > Acked-by: Rafael Aquini > Signed-off-by: Michal Hocko Acked-by: Mike Rapoport > --- > arch/ia64/mm/discontig.c | 2 - > include/linux/memory_hotplug.h | 119 ++++++++++++++++----------------- > 2 files changed, 59 insertions(+), 62 deletions(-) > > diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c > index 791d4176e4a6..8dc8a554f774 100644 > --- a/arch/ia64/mm/discontig.c > +++ b/arch/ia64/mm/discontig.c > @@ -608,7 +608,6 @@ void __init paging_init(void) > zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page)); > } > > -#ifdef CONFIG_MEMORY_HOTPLUG > pg_data_t *arch_alloc_nodedata(int nid) > { > unsigned long size = compute_pernodesize(nid); > @@ -626,7 +625,6 @@ void arch_refresh_nodedata(int update_node, pg_data_t *update_pgdat) > pgdat_list[update_node] = update_pgdat; > scatter_node_data(); > } > -#endif > > #ifdef CONFIG_SPARSEMEM_VMEMMAP > int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > index be48e003a518..4355983b364d 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -16,6 +16,65 @@ struct memory_group; > struct resource; > struct vmem_altmap; > > +#ifdef CONFIG_HAVE_ARCH_NODEDATA_EXTENSION > +/* > + * For supporting node-hotadd, we have to allocate a new pgdat. > + * > + * If an arch has generic style NODE_DATA(), > + * node_data[nid] = kzalloc() works well. But it depends on the architecture. > + * > + * In general, generic_alloc_nodedata() is used. > + * Now, arch_free_nodedata() is just defined for error path of node_hot_add. > + * > + */ > +extern pg_data_t *arch_alloc_nodedata(int nid); > +extern void arch_free_nodedata(pg_data_t *pgdat); > +extern void arch_refresh_nodedata(int nid, pg_data_t *pgdat); > + > +#else /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ > + > +#define arch_alloc_nodedata(nid) generic_alloc_nodedata(nid) > +#define arch_free_nodedata(pgdat) generic_free_nodedata(pgdat) > + > +#ifdef CONFIG_NUMA > +/* > + * XXX: node aware allocation can't work well to get new node's memory at this time. > + * Because, pgdat for the new node is not allocated/initialized yet itself. > + * To use new node's memory, more consideration will be necessary. > + */ > +#define generic_alloc_nodedata(nid) \ > +({ \ > + kzalloc(sizeof(pg_data_t), GFP_KERNEL); \ > +}) > +/* > + * This definition is just for error path in node hotadd. > + * For node hotremove, we have to replace this. > + */ > +#define generic_free_nodedata(pgdat) kfree(pgdat) > + > +extern pg_data_t *node_data[]; > +static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat) > +{ > + node_data[nid] = pgdat; > +} > + > +#else /* !CONFIG_NUMA */ > + > +/* never called */ > +static inline pg_data_t *generic_alloc_nodedata(int nid) > +{ > + BUG(); > + return NULL; > +} > +static inline void generic_free_nodedata(pg_data_t *pgdat) > +{ > +} > +static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat) > +{ > +} > +#endif /* CONFIG_NUMA */ > +#endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ > + > #ifdef CONFIG_MEMORY_HOTPLUG > struct page *pfn_to_online_page(unsigned long pfn); > > @@ -154,66 +213,6 @@ int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, > struct mhp_params *params); > #endif /* ARCH_HAS_ADD_PAGES */ > > -#ifdef CONFIG_HAVE_ARCH_NODEDATA_EXTENSION > -/* > - * For supporting node-hotadd, we have to allocate a new pgdat. > - * > - * If an arch has generic style NODE_DATA(), > - * node_data[nid] = kzalloc() works well. But it depends on the architecture. > - * > - * In general, generic_alloc_nodedata() is used. > - * Now, arch_free_nodedata() is just defined for error path of node_hot_add. > - * > - */ > -extern pg_data_t *arch_alloc_nodedata(int nid); > -extern void arch_free_nodedata(pg_data_t *pgdat); > -extern void arch_refresh_nodedata(int nid, pg_data_t *pgdat); > - > -#else /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ > - > -#define arch_alloc_nodedata(nid) generic_alloc_nodedata(nid) > -#define arch_free_nodedata(pgdat) generic_free_nodedata(pgdat) > - > -#ifdef CONFIG_NUMA > -/* > - * If ARCH_HAS_NODEDATA_EXTENSION=n, this func is used to allocate pgdat. > - * XXX: kmalloc_node() can't work well to get new node's memory at this time. > - * Because, pgdat for the new node is not allocated/initialized yet itself. > - * To use new node's memory, more consideration will be necessary. > - */ > -#define generic_alloc_nodedata(nid) \ > -({ \ > - kzalloc(sizeof(pg_data_t), GFP_KERNEL); \ > -}) > -/* > - * This definition is just for error path in node hotadd. > - * For node hotremove, we have to replace this. > - */ > -#define generic_free_nodedata(pgdat) kfree(pgdat) > - > -extern pg_data_t *node_data[]; > -static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat) > -{ > - node_data[nid] = pgdat; > -} > - > -#else /* !CONFIG_NUMA */ > - > -/* never called */ > -static inline pg_data_t *generic_alloc_nodedata(int nid) > -{ > - BUG(); > - return NULL; > -} > -static inline void generic_free_nodedata(pg_data_t *pgdat) > -{ > -} > -static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat) > -{ > -} > -#endif /* CONFIG_NUMA */ > -#endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ > - > void get_online_mems(void); > void put_online_mems(void); > > -- > 2.30.2 > -- Sincerely yours, Mike.