linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it
@ 2017-07-04  7:58 Michal Hocko
  2017-07-04  9:28 ` Vlastimil Babka
  2017-07-05 23:00 ` Andrew Morton
  0 siblings, 2 replies; 4+ messages in thread
From: Michal Hocko @ 2017-07-04  7:58 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Vlastimil Babka, Joonsoo Kim, Yang Shi, Mel Gorman, linux-mm,
	LKML, Michal Hocko

From: Michal Hocko <mhocko@suse.com>

early_pfn_to_nid will return node 0 if both HAVE_ARCH_EARLY_PFN_TO_NID
and HAVE_MEMBLOCK_NODE_MAP are disabled. It seems we are safe now
because all architectures which support NUMA define one of them (with an
exception of alpha which however has CONFIG_NUMA marked as broken) so
this works as expected. It can get silently and subtly broken too
easily, though. Make sure we fail the compilation if NUMA is enabled and
there is no proper implementation for this function. If that ever
happens we know that either the specific configuration is invalid
and the fix should either disable NUMA or enable one of the above
configs.

Signed-off-by: Michal Hocko <mhocko@suse.com>
---
Hi,
I have brought this up earlier [1] because I thought the deferred
initialization might be broken but then found out that this is not the
case right now. This is an attempt to prevent any subtly broken users in
future.

[1] http://lkml.kernel.org/r/20170630141847.GN22917@dhcp22.suse.cz

 include/linux/mmzone.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 16532fa0bb64..fc14b8b3f6ce 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -1055,6 +1055,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
 	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
 static inline unsigned long early_pfn_to_nid(unsigned long pfn)
 {
+	BUILD_BUG_ON(IS_ENABLED(CONFIG_NUMA));
 	return 0;
 }
 #endif
-- 
2.11.0

--
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>

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it
  2017-07-04  7:58 [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it Michal Hocko
@ 2017-07-04  9:28 ` Vlastimil Babka
  2017-07-05 23:00 ` Andrew Morton
  1 sibling, 0 replies; 4+ messages in thread
From: Vlastimil Babka @ 2017-07-04  9:28 UTC (permalink / raw)
  To: Michal Hocko, Andrew Morton
  Cc: Joonsoo Kim, Yang Shi, Mel Gorman, linux-mm, LKML, Michal Hocko

On 07/04/2017 09:58 AM, Michal Hocko wrote:
> From: Michal Hocko <mhocko@suse.com>
> 
> early_pfn_to_nid will return node 0 if both HAVE_ARCH_EARLY_PFN_TO_NID
> and HAVE_MEMBLOCK_NODE_MAP are disabled. It seems we are safe now
> because all architectures which support NUMA define one of them (with an
> exception of alpha which however has CONFIG_NUMA marked as broken) so
> this works as expected. It can get silently and subtly broken too
> easily, though. Make sure we fail the compilation if NUMA is enabled and
> there is no proper implementation for this function. If that ever
> happens we know that either the specific configuration is invalid
> and the fix should either disable NUMA or enable one of the above
> configs.
> 
> Signed-off-by: Michal Hocko <mhocko@suse.com>

Acked-by: Vlastimil Babka <vbabka@suse.cz>

> ---
> Hi,
> I have brought this up earlier [1] because I thought the deferred
> initialization might be broken but then found out that this is not the
> case right now. This is an attempt to prevent any subtly broken users in
> future.
> 
> [1] http://lkml.kernel.org/r/20170630141847.GN22917@dhcp22.suse.cz
> 
>  include/linux/mmzone.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 16532fa0bb64..fc14b8b3f6ce 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -1055,6 +1055,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
>  	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
>  static inline unsigned long early_pfn_to_nid(unsigned long pfn)
>  {
> +	BUILD_BUG_ON(IS_ENABLED(CONFIG_NUMA));
>  	return 0;
>  }
>  #endif
> 

--
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>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it
  2017-07-04  7:58 [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it Michal Hocko
  2017-07-04  9:28 ` Vlastimil Babka
@ 2017-07-05 23:00 ` Andrew Morton
  2017-07-06  6:50   ` Michal Hocko
  1 sibling, 1 reply; 4+ messages in thread
From: Andrew Morton @ 2017-07-05 23:00 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Vlastimil Babka, Joonsoo Kim, Yang Shi, Mel Gorman, linux-mm,
	LKML, Michal Hocko

On Tue,  4 Jul 2017 09:58:03 +0200 Michal Hocko <mhocko@kernel.org> wrote:

> From: Michal Hocko <mhocko@suse.com>
> 
> early_pfn_to_nid will return node 0 if both HAVE_ARCH_EARLY_PFN_TO_NID
> and HAVE_MEMBLOCK_NODE_MAP are disabled. It seems we are safe now
> because all architectures which support NUMA define one of them (with an
> exception of alpha which however has CONFIG_NUMA marked as broken) so
> this works as expected. It can get silently and subtly broken too
> easily, though. Make sure we fail the compilation if NUMA is enabled and
> there is no proper implementation for this function. If that ever
> happens we know that either the specific configuration is invalid
> and the fix should either disable NUMA or enable one of the above
> configs.
> 
> ...
>
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -1055,6 +1055,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
>  	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
>  static inline unsigned long early_pfn_to_nid(unsigned long pfn)
>  {
> +	BUILD_BUG_ON(IS_ENABLED(CONFIG_NUMA));
>  	return 0;
>  }
>  #endif

Wouldn't this be more conventional?

--- a/include/linux/mmzone.h~a
+++ a/include/linux/mmzone.h
@@ -1052,7 +1052,8 @@ static inline struct zoneref *first_zone
 #endif
 
 #if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \
-	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
+	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) && \
+	!defined(CONFIG_NUMA)
 static inline unsigned long early_pfn_to_nid(unsigned long pfn)
 {
 	return 0;
_

--
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>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it
  2017-07-05 23:00 ` Andrew Morton
@ 2017-07-06  6:50   ` Michal Hocko
  0 siblings, 0 replies; 4+ messages in thread
From: Michal Hocko @ 2017-07-06  6:50 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Vlastimil Babka, Joonsoo Kim, Yang Shi, Mel Gorman, linux-mm, LKML

On Wed 05-07-17 16:00:55, Andrew Morton wrote:
> On Tue,  4 Jul 2017 09:58:03 +0200 Michal Hocko <mhocko@kernel.org> wrote:
> 
> > From: Michal Hocko <mhocko@suse.com>
> > 
> > early_pfn_to_nid will return node 0 if both HAVE_ARCH_EARLY_PFN_TO_NID
> > and HAVE_MEMBLOCK_NODE_MAP are disabled. It seems we are safe now
> > because all architectures which support NUMA define one of them (with an
> > exception of alpha which however has CONFIG_NUMA marked as broken) so
> > this works as expected. It can get silently and subtly broken too
> > easily, though. Make sure we fail the compilation if NUMA is enabled and
> > there is no proper implementation for this function. If that ever
> > happens we know that either the specific configuration is invalid
> > and the fix should either disable NUMA or enable one of the above
> > configs.
> > 
> > ...
> >
> > --- a/include/linux/mmzone.h
> > +++ b/include/linux/mmzone.h
> > @@ -1055,6 +1055,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
> >  	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
> >  static inline unsigned long early_pfn_to_nid(unsigned long pfn)
> >  {
> > +	BUILD_BUG_ON(IS_ENABLED(CONFIG_NUMA));
> >  	return 0;
> >  }
> >  #endif
> 
> Wouldn't this be more conventional?

Well, both would lead to a compilation errors which is what I want to
achieve. The above is easier to parse IMHO. If you believe a longer
ifdef chain is better I won't object.

> --- a/include/linux/mmzone.h~a
> +++ a/include/linux/mmzone.h
> @@ -1052,7 +1052,8 @@ static inline struct zoneref *first_zone
>  #endif
>  
>  #if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \
> -	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
> +	!defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) && \
> +	!defined(CONFIG_NUMA)
>  static inline unsigned long early_pfn_to_nid(unsigned long pfn)
>  {
>  	return 0;
> _
> 

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-07-06  6:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-04  7:58 [PATCH] mm: disallow early_pfn_to_nid on configurations which do not implement it Michal Hocko
2017-07-04  9:28 ` Vlastimil Babka
2017-07-05 23:00 ` Andrew Morton
2017-07-06  6:50   ` Michal Hocko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).