From: Mel Gorman <mgorman@suse.de> To: Linux-MM <linux-mm@kvack.org> Cc: Nathan Zimmer <nzimmer@sgi.com>, Dave Hansen <dave.hansen@intel.com>, Waiman Long <waiman.long@hp.com>, Scott Norton <scott.norton@hp.com>, Daniel J Blueman <daniel@numascale.com>, Andrew Morton <akpm@linux-foundation.org>, LKML <linux-kernel@vger.kernel.org>, Mel Gorman <mgorman@suse.de> Subject: [PATCH 06/13] mm: meminit: Inline some helper functions Date: Thu, 23 Apr 2015 11:33:09 +0100 [thread overview] Message-ID: <1429785196-7668-7-git-send-email-mgorman@suse.de> (raw) In-Reply-To: <1429785196-7668-1-git-send-email-mgorman@suse.de> early_pfn_in_nid() and meminit_pfn_in_nid() are small functions that are unnecessarily visible outside memory initialisation. As well as unnecessary visibility, it's unnecessary function call overhead when initialising pages. This patch moves the helpers inline. Signed-off-by: Mel Gorman <mgorman@suse.de> --- include/linux/mmzone.h | 9 ------ mm/page_alloc.c | 75 +++++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 46 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a67b33e52dfe..e3d8a2bd8d78 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -1227,15 +1227,6 @@ struct mminit_pfnnid_cache { int last_nid; }; -#ifdef CONFIG_NODES_SPAN_OTHER_NODES -bool early_pfn_in_nid(unsigned long pfn, int nid); -bool meminit_pfn_in_nid(unsigned long pfn, int node, - struct mminit_pfnnid_cache *state); -#else -#define early_pfn_in_nid(pfn, nid) (1) -#define meminit_pfn_in_nid(pfn, nid, state) (1) -#endif - #ifndef early_pfn_valid #define early_pfn_valid(pfn) (1) #endif diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f556ed63b964..8b4659aa0bc2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -907,6 +907,44 @@ void __init __free_pages_bootmem(struct page *page, unsigned long pfn, __free_pages(page, order); } +#if defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) || \ + defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) +/* Only safe to use early in boot when initialisation is single-threaded */ +struct __meminitdata mminit_pfnnid_cache global_init_state; +int __meminit early_pfn_to_nid(unsigned long pfn) +{ + int nid; + + /* The system will behave unpredictably otherwise */ + BUG_ON(system_state != SYSTEM_BOOTING); + + nid = __early_pfn_to_nid(pfn, &global_init_state); + if (nid >= 0) + return nid; + /* just returns 0 */ + return 0; +} +#endif + +#ifdef CONFIG_NODES_SPAN_OTHER_NODES +static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, + struct mminit_pfnnid_cache *state) +{ + int nid; + + nid = __early_pfn_to_nid(pfn, state); + if (nid >= 0 && nid != node) + return false; + return true; +} + +/* Only safe to use early in boot when initialisation is single-threaded */ +static inline bool __meminit early_pfn_in_nid(unsigned long pfn, int node) +{ + return meminit_pfn_in_nid(pfn, node, &global_init_state); +} +#endif + #ifdef CONFIG_CMA /* Free whole pageblock and set its migration type to MIGRATE_CMA. */ void __init init_cma_reserved_pageblock(struct page *page) @@ -4481,43 +4519,6 @@ int __meminit __early_pfn_to_nid(unsigned long pfn, } #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ -struct __meminitdata mminit_pfnnid_cache global_init_state; - -/* Only safe to use early in boot when initialisation is single-threaded */ -int __meminit early_pfn_to_nid(unsigned long pfn) -{ - int nid; - - /* The system will behave unpredictably otherwise */ - BUG_ON(system_state != SYSTEM_BOOTING); - - nid = __early_pfn_to_nid(pfn, &global_init_state); - if (nid >= 0) - return nid; - /* just returns 0 */ - return 0; -} - -#ifdef CONFIG_NODES_SPAN_OTHER_NODES -bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, - struct mminit_pfnnid_cache *state) -{ - int nid; - - nid = __early_pfn_to_nid(pfn, state); - if (nid >= 0 && nid != node) - return false; - return true; -} - -/* Only safe to use early in boot when initialisation is single-threaded */ -bool __meminit early_pfn_in_nid(unsigned long pfn, int node) -{ - return meminit_pfn_in_nid(pfn, node, &global_init_state); -} - -#endif - /** * free_bootmem_with_active_regions - Call memblock_free_early_nid for each active range * @nid: The node to free memory on. If MAX_NUMNODES, all nodes are freed. -- 2.3.5
WARNING: multiple messages have this Message-ID (diff)
From: Mel Gorman <mgorman@suse.de> To: Linux-MM <linux-mm@kvack.org> Cc: Nathan Zimmer <nzimmer@sgi.com>, Dave Hansen <dave.hansen@intel.com>, Waiman Long <waiman.long@hp.com>, Scott Norton <scott.norton@hp.com>, Daniel J Blueman <daniel@numascale.com>, Andrew Morton <akpm@linux-foundation.org>, LKML <linux-kernel@vger.kernel.org>, Mel Gorman <mgorman@suse.de> Subject: [PATCH 06/13] mm: meminit: Inline some helper functions Date: Thu, 23 Apr 2015 11:33:09 +0100 [thread overview] Message-ID: <1429785196-7668-7-git-send-email-mgorman@suse.de> (raw) In-Reply-To: <1429785196-7668-1-git-send-email-mgorman@suse.de> early_pfn_in_nid() and meminit_pfn_in_nid() are small functions that are unnecessarily visible outside memory initialisation. As well as unnecessary visibility, it's unnecessary function call overhead when initialising pages. This patch moves the helpers inline. Signed-off-by: Mel Gorman <mgorman@suse.de> --- include/linux/mmzone.h | 9 ------ mm/page_alloc.c | 75 +++++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 46 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a67b33e52dfe..e3d8a2bd8d78 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -1227,15 +1227,6 @@ struct mminit_pfnnid_cache { int last_nid; }; -#ifdef CONFIG_NODES_SPAN_OTHER_NODES -bool early_pfn_in_nid(unsigned long pfn, int nid); -bool meminit_pfn_in_nid(unsigned long pfn, int node, - struct mminit_pfnnid_cache *state); -#else -#define early_pfn_in_nid(pfn, nid) (1) -#define meminit_pfn_in_nid(pfn, nid, state) (1) -#endif - #ifndef early_pfn_valid #define early_pfn_valid(pfn) (1) #endif diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f556ed63b964..8b4659aa0bc2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -907,6 +907,44 @@ void __init __free_pages_bootmem(struct page *page, unsigned long pfn, __free_pages(page, order); } +#if defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) || \ + defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) +/* Only safe to use early in boot when initialisation is single-threaded */ +struct __meminitdata mminit_pfnnid_cache global_init_state; +int __meminit early_pfn_to_nid(unsigned long pfn) +{ + int nid; + + /* The system will behave unpredictably otherwise */ + BUG_ON(system_state != SYSTEM_BOOTING); + + nid = __early_pfn_to_nid(pfn, &global_init_state); + if (nid >= 0) + return nid; + /* just returns 0 */ + return 0; +} +#endif + +#ifdef CONFIG_NODES_SPAN_OTHER_NODES +static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, + struct mminit_pfnnid_cache *state) +{ + int nid; + + nid = __early_pfn_to_nid(pfn, state); + if (nid >= 0 && nid != node) + return false; + return true; +} + +/* Only safe to use early in boot when initialisation is single-threaded */ +static inline bool __meminit early_pfn_in_nid(unsigned long pfn, int node) +{ + return meminit_pfn_in_nid(pfn, node, &global_init_state); +} +#endif + #ifdef CONFIG_CMA /* Free whole pageblock and set its migration type to MIGRATE_CMA. */ void __init init_cma_reserved_pageblock(struct page *page) @@ -4481,43 +4519,6 @@ int __meminit __early_pfn_to_nid(unsigned long pfn, } #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ -struct __meminitdata mminit_pfnnid_cache global_init_state; - -/* Only safe to use early in boot when initialisation is single-threaded */ -int __meminit early_pfn_to_nid(unsigned long pfn) -{ - int nid; - - /* The system will behave unpredictably otherwise */ - BUG_ON(system_state != SYSTEM_BOOTING); - - nid = __early_pfn_to_nid(pfn, &global_init_state); - if (nid >= 0) - return nid; - /* just returns 0 */ - return 0; -} - -#ifdef CONFIG_NODES_SPAN_OTHER_NODES -bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, - struct mminit_pfnnid_cache *state) -{ - int nid; - - nid = __early_pfn_to_nid(pfn, state); - if (nid >= 0 && nid != node) - return false; - return true; -} - -/* Only safe to use early in boot when initialisation is single-threaded */ -bool __meminit early_pfn_in_nid(unsigned long pfn, int node) -{ - return meminit_pfn_in_nid(pfn, node, &global_init_state); -} - -#endif - /** * free_bootmem_with_active_regions - Call memblock_free_early_nid for each active range * @nid: The node to free memory on. If MAX_NUMNODES, all nodes are freed. -- 2.3.5 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-04-23 10:35 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-04-23 10:33 [PATCH 0/13] Parallel struct page initialisation v3 Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 01/13] memblock: Introduce a for_each_reserved_mem_region iterator Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 02/13] mm: meminit: Move page initialization into a separate function Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-27 22:46 ` Andrew Morton 2015-04-27 22:46 ` Andrew Morton 2015-04-28 8:28 ` Mel Gorman 2015-04-28 8:28 ` Mel Gorman 2015-04-28 16:02 ` nzimmer 2015-04-28 16:02 ` nzimmer 2015-04-28 22:41 ` Andrew Morton 2015-04-28 22:41 ` Andrew Morton 2015-04-28 23:05 ` Mel Gorman 2015-04-28 23:05 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 03/13] mm: meminit: Only set page reserved in the memblock region Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-27 22:43 ` Andrew Morton 2015-04-27 22:43 ` Andrew Morton 2015-04-23 10:33 ` [PATCH 04/13] mm: page_alloc: Pass PFN to __free_pages_bootmem Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 05/13] mm: meminit: Make __early_pfn_to_nid SMP-safe and introduce meminit_pfn_in_nid Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-27 22:43 ` Andrew Morton 2015-04-27 22:43 ` Andrew Morton 2015-04-28 9:37 ` Mel Gorman 2015-04-28 9:37 ` Mel Gorman 2015-04-23 10:33 ` Mel Gorman [this message] 2015-04-23 10:33 ` [PATCH 06/13] mm: meminit: Inline some helper functions Mel Gorman 2015-04-23 10:33 ` [PATCH 07/13] mm: meminit: Initialise a subset of struct pages if CONFIG_DEFERRED_STRUCT_PAGE_INIT is set Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 15:56 ` Mel Gorman 2015-04-23 15:56 ` Mel Gorman 2015-04-27 22:43 ` Andrew Morton 2015-04-27 22:43 ` Andrew Morton 2015-04-28 9:53 ` Mel Gorman 2015-04-28 9:53 ` Mel Gorman 2015-04-28 13:48 ` Andrew Morton 2015-04-28 13:48 ` Andrew Morton 2015-04-28 14:56 ` Mel Gorman 2015-04-28 14:56 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 08/13] mm: meminit: Initialise remaining struct pages in parallel with kswapd Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-27 22:43 ` Andrew Morton 2015-04-27 22:43 ` Andrew Morton 2015-04-23 10:33 ` [PATCH 09/13] mm: meminit: Minimise number of pfn->page lookups during initialisation Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 10/13] x86: mm: Enable deferred struct page initialisation on x86-64 Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 11/13] mm: meminit: Free pages in large chunks where possible Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-27 22:43 ` Andrew Morton 2015-04-27 22:43 ` Andrew Morton 2015-04-28 11:38 ` Mel Gorman 2015-04-28 11:38 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 12/13] mm: meminit: Reduce number of times pageblocks are set during struct page init Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 10:33 ` [PATCH 13/13] mm: meminit: Remove mminit_verify_page_links Mel Gorman 2015-04-23 10:33 ` Mel Gorman 2015-04-23 15:53 ` [PATCH 0/13] Parallel struct page initialisation v3 Daniel J Blueman 2015-04-23 15:53 ` Daniel J Blueman 2015-04-23 16:30 ` Mel Gorman 2015-04-23 16:30 ` Mel Gorman 2015-04-24 19:48 ` Waiman Long 2015-04-24 19:48 ` Waiman Long 2015-04-29 1:31 ` Waiman Long 2015-04-29 1:31 ` Waiman Long -- strict thread matches above, loose matches on Subject: below -- 2015-04-28 14:36 [PATCH 0/13] Parallel struct page initialisation v4 Mel Gorman 2015-04-28 14:37 ` [PATCH 06/13] mm: meminit: Inline some helper functions Mel Gorman 2015-04-28 14:37 ` Mel Gorman 2015-04-30 21:53 ` Andrew Morton 2015-04-30 21:53 ` Andrew Morton 2015-04-30 21:55 ` Andrew Morton 2015-04-30 21:55 ` Andrew Morton 2015-05-04 8:33 ` Michal Hocko 2015-05-04 8:33 ` Michal Hocko 2015-05-04 8:38 ` Michal Hocko 2015-05-04 8:38 ` Michal Hocko 2015-04-22 17:07 [RFC PATCH 0/14] Parallel struct page initialisation v5r4 Mel Gorman 2015-04-22 17:07 ` [PATCH 06/13] mm: meminit: Inline some helper functions Mel Gorman 2015-04-22 17:07 ` Mel Gorman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1429785196-7668-7-git-send-email-mgorman@suse.de \ --to=mgorman@suse.de \ --cc=akpm@linux-foundation.org \ --cc=daniel@numascale.com \ --cc=dave.hansen@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=nzimmer@sgi.com \ --cc=scott.norton@hp.com \ --cc=waiman.long@hp.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.