public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
@ 2014-01-25 14:25 tip-bot for Toshi Kani
  2014-01-26  8:43 ` Yinghai Lu
  0 siblings, 1 reply; 13+ messages in thread
From: tip-bot for Toshi Kani @ 2014-01-25 14:25 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, toshi.kani, akpm, tglx,
	rientjes

Commit-ID:  a85eba8814631d0d48361c8b9a7ee0984e80c03c
Gitweb:     http://git.kernel.org/tip/a85eba8814631d0d48361c8b9a7ee0984e80c03c
Author:     Toshi Kani <toshi.kani@hp.com>
AuthorDate: Tue, 21 Jan 2014 14:33:15 -0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 25 Jan 2014 09:13:35 +0100

arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT

When ACPI SLIT table has an I/O locality (i.e. a locality
unique to an I/O device), numa_set_distance() emits this warning
message:

 NUMA: Warning: node ids are out of bound, from=-1 to=-1 distance=10

acpi_numa_slit_init() calls numa_set_distance() with
pxm_to_node(), which assumes that all localities have been
parsed with SRAT previously.  SRAT does not list I/O localities,
where as SLIT lists all localities including I/Os.  Hence,
pxm_to_node() returns NUMA_NO_NODE (-1) for an I/O locality.

I/O localities are not supported and are ignored today, but emitting
such warning message leads to unnecessary confusion.

Change acpi_numa_slit_init() to avoid calling
numa_set_distance() with NUMA_NO_NODE.

Signed-off-by: Toshi Kani <toshi.kani@hp.com>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/n/tip-dSvpjjvp8aMzs1ybkftxohlh@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/mm/srat.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
index 266ca91..5ecf651 100644
--- a/arch/x86/mm/srat.c
+++ b/arch/x86/mm/srat.c
@@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
 	return acpi_numa < 0;
 }
 
-/* Callback for SLIT parsing */
+/*
+ * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
+ * I/O localities since SRAT does not list them.  I/O localities are
+ * not supported at this point.
+ */
 void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
 {
 	int i, j;
 
-	for (i = 0; i < slit->locality_count; i++)
-		for (j = 0; j < slit->locality_count; j++)
+	for (i = 0; i < slit->locality_count; i++) {
+		if (pxm_to_node(i) == NUMA_NO_NODE)
+			continue;
+		for (j = 0; j < slit->locality_count; j++) {
+			if (pxm_to_node(j) == NUMA_NO_NODE)
+				continue;
 			numa_set_distance(pxm_to_node(i), pxm_to_node(j),
 				slit->entry[slit->locality_count * i + j]);
+		}
+	}
 }
 
 /* Callback for Proximity Domain -> x2APIC mapping */

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

* Re: [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
  2014-01-25 14:25 [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT tip-bot for Toshi Kani
@ 2014-01-26  8:43 ` Yinghai Lu
  2014-01-26  8:46   ` Ingo Molnar
  2014-01-27 14:45   ` [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT Toshi Kani
  0 siblings, 2 replies; 13+ messages in thread
From: Yinghai Lu @ 2014-01-26  8:43 UTC (permalink / raw)
  To: Ingo Molnar, H. Peter Anvin, Linux Kernel Mailing List,
	Yinghai Lu, Toshi Kani, Andrew Morton, Thomas Gleixner,
	David Rientjes
  Cc: linux-tip-commits@vger.kernel.org

On Sat, Jan 25, 2014 at 6:25 AM, tip-bot for Toshi Kani
<tipbot@zytor.com> wrote:
> Commit-ID:  a85eba8814631d0d48361c8b9a7ee0984e80c03c
> Gitweb:     http://git.kernel.org/tip/a85eba8814631d0d48361c8b9a7ee0984e80c03c
> Author:     Toshi Kani <toshi.kani@hp.com>
> AuthorDate: Tue, 21 Jan 2014 14:33:15 -0800
> Committer:  Ingo Molnar <mingo@kernel.org>
> CommitDate: Sat, 25 Jan 2014 09:13:35 +0100
>
> arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
>
> When ACPI SLIT table has an I/O locality (i.e. a locality
> unique to an I/O device), numa_set_distance() emits this warning
> message:
>
>  NUMA: Warning: node ids are out of bound, from=-1 to=-1 distance=10
>
> acpi_numa_slit_init() calls numa_set_distance() with
> pxm_to_node(), which assumes that all localities have been
> parsed with SRAT previously.  SRAT does not list I/O localities,
> where as SLIT lists all localities including I/Os.  Hence,
> pxm_to_node() returns NUMA_NO_NODE (-1) for an I/O locality.
>
> I/O localities are not supported and are ignored today, but emitting
> such warning message leads to unnecessary confusion.
>
> Change acpi_numa_slit_init() to avoid calling
> numa_set_distance() with NUMA_NO_NODE.
>
> Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> Acked-by: David Rientjes <rientjes@google.com>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Cc: Yinghai Lu <yinghai@kernel.org>
> Link: http://lkml.kernel.org/n/tip-dSvpjjvp8aMzs1ybkftxohlh@git.kernel.org
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---
>  arch/x86/mm/srat.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
> index 266ca91..5ecf651 100644
> --- a/arch/x86/mm/srat.c
> +++ b/arch/x86/mm/srat.c
> @@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
>         return acpi_numa < 0;
>  }
>
> -/* Callback for SLIT parsing */
> +/*
> + * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
> + * I/O localities since SRAT does not list them.  I/O localities are
> + * not supported at this point.
> + */
>  void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
>  {
>         int i, j;
>
> -       for (i = 0; i < slit->locality_count; i++)
> -               for (j = 0; j < slit->locality_count; j++)
> +       for (i = 0; i < slit->locality_count; i++) {
> +               if (pxm_to_node(i) == NUMA_NO_NODE)
> +                       continue;
> +               for (j = 0; j < slit->locality_count; j++) {
> +                       if (pxm_to_node(j) == NUMA_NO_NODE)
> +                               continue;
>                         numa_set_distance(pxm_to_node(i), pxm_to_node(j),
>                                 slit->entry[slit->locality_count * i + j]);
> +               }
> +       }
>  }
>
>  /* Callback for Proximity Domain -> x2APIC mapping */

wonder if the patch that i sent one year ago is better.

https://lkml.org/lkml/2013/1/21/559

as it avoid calling extra calling of pxm_to_node(i).

From: Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH] x86, mm: Skip unknown PXM early in SLIT parsing

Some systems one bios could support 2 sockets and 4 sockets,
and SLIT is the same, aka 4x4.

For 2 sockets configuration, SRAT will only have PXM0 and PXM2.

So we will get warning:
NUMA: Warning: node ids are out of bound, from=0 to=-1 distance=15

Need to skip PXM1 and PXM2 as there is no responding node,
To avoid uncorrect warning.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/mm/srat.c |   17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/mm/srat.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/srat.c
+++ linux-2.6/arch/x86/mm/srat.c
@@ -46,11 +46,22 @@ static __init inline int srat_disabled(v
 void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
 {
     int i, j;
+    int from_node, to_node;

-    for (i = 0; i < slit->locality_count; i++)
-        for (j = 0; j < slit->locality_count; j++)
-            numa_set_distance(pxm_to_node(i), pxm_to_node(j),
+    for (i = 0; i < slit->locality_count; i++) {
+        from_node = pxm_to_node(i);
+        if (from_node < 0)
+            continue; /* skip unknown PXM */
+
+        for (j = 0; j < slit->locality_count; j++) {
+            to_node = pxm_to_node(j);
+            if (to_node < 0)
+                continue; /* skip unknown PXM */
+
+            numa_set_distance(from_node, to_node,
                 slit->entry[slit->locality_count * i + j]);
+        }
+    }
 }

 /* Callback for Proximity Domain -> x2APIC mapping */

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

* Re: [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
  2014-01-26  8:43 ` Yinghai Lu
@ 2014-01-26  8:46   ` Ingo Molnar
  2014-01-26  9:10     ` [PATCH] x86, mm: Avoid extra pxm_to_node() Yinghai Lu
  2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
  2014-01-27 14:45   ` [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT Toshi Kani
  1 sibling, 2 replies; 13+ messages in thread
From: Ingo Molnar @ 2014-01-26  8:46 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: H. Peter Anvin, Linux Kernel Mailing List, Toshi Kani,
	Andrew Morton, Thomas Gleixner, David Rientjes,
	linux-tip-commits@vger.kernel.org


* Yinghai Lu <yinghai@kernel.org> wrote:

> On Sat, Jan 25, 2014 at 6:25 AM, tip-bot for Toshi Kani
> <tipbot@zytor.com> wrote:
> > Commit-ID:  a85eba8814631d0d48361c8b9a7ee0984e80c03c
> > Gitweb:     http://git.kernel.org/tip/a85eba8814631d0d48361c8b9a7ee0984e80c03c
> > Author:     Toshi Kani <toshi.kani@hp.com>
> > AuthorDate: Tue, 21 Jan 2014 14:33:15 -0800
> > Committer:  Ingo Molnar <mingo@kernel.org>
> > CommitDate: Sat, 25 Jan 2014 09:13:35 +0100
> >
> > arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
> >
> > When ACPI SLIT table has an I/O locality (i.e. a locality
> > unique to an I/O device), numa_set_distance() emits this warning
> > message:
> >
> >  NUMA: Warning: node ids are out of bound, from=-1 to=-1 distance=10
> >
> > acpi_numa_slit_init() calls numa_set_distance() with
> > pxm_to_node(), which assumes that all localities have been
> > parsed with SRAT previously.  SRAT does not list I/O localities,
> > where as SLIT lists all localities including I/Os.  Hence,
> > pxm_to_node() returns NUMA_NO_NODE (-1) for an I/O locality.
> >
> > I/O localities are not supported and are ignored today, but emitting
> > such warning message leads to unnecessary confusion.
> >
> > Change acpi_numa_slit_init() to avoid calling
> > numa_set_distance() with NUMA_NO_NODE.
> >
> > Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> > Acked-by: David Rientjes <rientjes@google.com>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Yinghai Lu <yinghai@kernel.org>
> > Link: http://lkml.kernel.org/n/tip-dSvpjjvp8aMzs1ybkftxohlh@git.kernel.org
> > Signed-off-by: Ingo Molnar <mingo@kernel.org>
> > ---
> >  arch/x86/mm/srat.c | 16 +++++++++++++---
> >  1 file changed, 13 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
> > index 266ca91..5ecf651 100644
> > --- a/arch/x86/mm/srat.c
> > +++ b/arch/x86/mm/srat.c
> > @@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
> >         return acpi_numa < 0;
> >  }
> >
> > -/* Callback for SLIT parsing */
> > +/*
> > + * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
> > + * I/O localities since SRAT does not list them.  I/O localities are
> > + * not supported at this point.
> > + */
> >  void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
> >  {
> >         int i, j;
> >
> > -       for (i = 0; i < slit->locality_count; i++)
> > -               for (j = 0; j < slit->locality_count; j++)
> > +       for (i = 0; i < slit->locality_count; i++) {
> > +               if (pxm_to_node(i) == NUMA_NO_NODE)
> > +                       continue;
> > +               for (j = 0; j < slit->locality_count; j++) {
> > +                       if (pxm_to_node(j) == NUMA_NO_NODE)
> > +                               continue;
> >                         numa_set_distance(pxm_to_node(i), pxm_to_node(j),
> >                                 slit->entry[slit->locality_count * i + j]);
> > +               }
> > +       }
> >  }
> >
> >  /* Callback for Proximity Domain -> x2APIC mapping */
> 
> wonder if the patch that i sent one year ago is better.
>
> https://lkml.org/lkml/2013/1/21/559
> 
> as it avoid calling extra calling of pxm_to_node(i).

If it's "better" in the sense of being faster (and is otherwise 
equivalent functionally - assuming the original patch is bug free) 
then please submit it as a delta patch. (I assume the one you sent 
here wasn't.)

Thanks,

	Ingo

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

* [PATCH] x86, mm: Avoid extra pxm_to_node()
  2014-01-26  8:46   ` Ingo Molnar
@ 2014-01-26  9:10     ` Yinghai Lu
  2014-01-26  9:10       ` Ingo Molnar
  2014-01-26  9:28       ` David Rientjes
  2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
  1 sibling, 2 replies; 13+ messages in thread
From: Yinghai Lu @ 2014-01-26  9:10 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: H. Peter Anvin, Toshi Kani, Thomas Gleixner, Andrew Morton,
	David Rientjes, linux-kernel, Yinghai Lu

In slit init code, more pxm_to_node() calling are added.

We can cache return with from_node/to_node to avoid them.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
 
---
 arch/x86/mm/srat.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/mm/srat.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/srat.c
+++ linux-2.6/arch/x86/mm/srat.c
@@ -50,14 +50,19 @@ static __init inline int srat_disabled(v
 void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
 {
 	int i, j;
+	int from_node, to_node;
 
 	for (i = 0; i < slit->locality_count; i++) {
-		if (pxm_to_node(i) == NUMA_NO_NODE)
+		from_node = pxm_to_node(i);
+		if (from_node == NUMA_NO_NODE)
 			continue;
+
 		for (j = 0; j < slit->locality_count; j++) {
-			if (pxm_to_node(j) == NUMA_NO_NODE)
+			to_node = pxm_to_node(j);
+			if (to_node == NUMA_NO_NODE)
 				continue;
-			numa_set_distance(pxm_to_node(i), pxm_to_node(j),
+
+			numa_set_distance(from_node, to_node,
 				slit->entry[slit->locality_count * i + j]);
 		}
 	}

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

* Re: [PATCH] x86, mm: Avoid extra pxm_to_node()
  2014-01-26  9:10     ` [PATCH] x86, mm: Avoid extra pxm_to_node() Yinghai Lu
@ 2014-01-26  9:10       ` Ingo Molnar
  2014-01-26  9:28       ` David Rientjes
  1 sibling, 0 replies; 13+ messages in thread
From: Ingo Molnar @ 2014-01-26  9:10 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: H. Peter Anvin, Toshi Kani, Thomas Gleixner, Andrew Morton,
	David Rientjes, linux-kernel


* Yinghai Lu <yinghai@kernel.org> wrote:

> In slit init code, more pxm_to_node() calling are added.
> 
> We can cache return with from_node/to_node to avoid them.

-ENOPARSE. Please formulate the title and the changelog in an 
understandable form.

Thanks,

	Ingo

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

* Re: [PATCH] x86, mm: Avoid extra pxm_to_node()
  2014-01-26  9:10     ` [PATCH] x86, mm: Avoid extra pxm_to_node() Yinghai Lu
  2014-01-26  9:10       ` Ingo Molnar
@ 2014-01-26  9:28       ` David Rientjes
  1 sibling, 0 replies; 13+ messages in thread
From: David Rientjes @ 2014-01-26  9:28 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, H. Peter Anvin, Toshi Kani, Thomas Gleixner,
	Andrew Morton, linux-kernel

On Sun, 26 Jan 2014, Yinghai Lu wrote:

> Index: linux-2.6/arch/x86/mm/srat.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/mm/srat.c
> +++ linux-2.6/arch/x86/mm/srat.c
> @@ -50,14 +50,19 @@ static __init inline int srat_disabled(v
>  void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
>  {
>  	int i, j;
> +	int from_node, to_node;
>  
>  	for (i = 0; i < slit->locality_count; i++) {
> -		if (pxm_to_node(i) == NUMA_NO_NODE)
> +		from_node = pxm_to_node(i);
> +		if (from_node == NUMA_NO_NODE)
>  			continue;
> +
>  		for (j = 0; j < slit->locality_count; j++) {
> -			if (pxm_to_node(j) == NUMA_NO_NODE)
> +			to_node = pxm_to_node(j);
> +			if (to_node == NUMA_NO_NODE)
>  				continue;
> -			numa_set_distance(pxm_to_node(i), pxm_to_node(j),
> +
> +			numa_set_distance(from_node, to_node,
>  				slit->entry[slit->locality_count * i + j]);
>  		}
>  	}

Might as well make them "const" while you're at it by moving the 
definitions inside the iteration blocks.

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

* [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling.
  2014-01-26  8:46   ` Ingo Molnar
  2014-01-26  9:10     ` [PATCH] x86, mm: Avoid extra pxm_to_node() Yinghai Lu
@ 2014-01-26 21:01     ` Yinghai Lu
  2014-01-26 21:08       ` David Rientjes
                         ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Yinghai Lu @ 2014-01-26 21:01 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: H. Peter Anvin, Toshi Kani, Thomas Gleixner, Andrew Morton,
	David Rientjes, linux-kernel, Yinghai Lu

In slit init code, more pxm_to_node() calling are added.

We can store from_node/to_node instead of keep calling pxm_to_node().

After this patch: pxm_to_node() is called n*(1+n)
Before this patch: pxm_to_node() is called n*(1+n*3)

for 8 socket, it will be 72 instead of 200.
for 32 socket, it will be 1056 instead of 3104.

-v2: update title and change log according to Ingo.
     move from_node/to_node in loop and change to const according to
	David Rientjes.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
 
---
 arch/x86/mm/srat.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/mm/srat.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/srat.c
+++ linux-2.6/arch/x86/mm/srat.c
@@ -52,12 +52,18 @@ void __init acpi_numa_slit_init(struct a
 	int i, j;
 
 	for (i = 0; i < slit->locality_count; i++) {
-		if (pxm_to_node(i) == NUMA_NO_NODE)
+		const int from_node = pxm_to_node(i);
+
+		if (from_node == NUMA_NO_NODE)
 			continue;
+
 		for (j = 0; j < slit->locality_count; j++) {
-			if (pxm_to_node(j) == NUMA_NO_NODE)
+			const int to_node = pxm_to_node(j);
+
+			if (to_node == NUMA_NO_NODE)
 				continue;
-			numa_set_distance(pxm_to_node(i), pxm_to_node(j),
+
+			numa_set_distance(from_node, to_node,
 				slit->entry[slit->locality_count * i + j]);
 		}
 	}

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

* Re: [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling.
  2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
@ 2014-01-26 21:08       ` David Rientjes
  2014-01-27 14:49       ` Toshi Kani
  2014-02-10 13:32       ` [tip:x86/mm] x86/mm: Avoid duplicated pxm_to_node() calls tip-bot for Yinghai Lu
  2 siblings, 0 replies; 13+ messages in thread
From: David Rientjes @ 2014-01-26 21:08 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, H. Peter Anvin, Toshi Kani, Thomas Gleixner,
	Andrew Morton, linux-kernel

On Sun, 26 Jan 2014, Yinghai Lu wrote:

> In slit init code, more pxm_to_node() calling are added.
> 
> We can store from_node/to_node instead of keep calling pxm_to_node().
> 
> After this patch: pxm_to_node() is called n*(1+n)
> Before this patch: pxm_to_node() is called n*(1+n*3)
> 
> for 8 socket, it will be 72 instead of 200.
> for 32 socket, it will be 1056 instead of 3104.
> 
> -v2: update title and change log according to Ingo.
>      move from_node/to_node in loop and change to const according to
> 	David Rientjes.
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

Acked-by: David Rientjes <rientjes@google.com>

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

* Re: [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
  2014-01-26  8:43 ` Yinghai Lu
  2014-01-26  8:46   ` Ingo Molnar
@ 2014-01-27 14:45   ` Toshi Kani
  1 sibling, 0 replies; 13+ messages in thread
From: Toshi Kani @ 2014-01-27 14:45 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, H. Peter Anvin, Linux Kernel Mailing List,
	Andrew Morton, Thomas Gleixner, David Rientjes,
	linux-tip-commits@vger.kernel.org

On Sun, 2014-01-26 at 00:43 -0800, Yinghai Lu wrote:
> On Sat, Jan 25, 2014 at 6:25 AM, tip-bot for Toshi Kani
> <tipbot@zytor.com> wrote:
> > Commit-ID:  a85eba8814631d0d48361c8b9a7ee0984e80c03c
> > Gitweb:     http://git.kernel.org/tip/a85eba8814631d0d48361c8b9a7ee0984e80c03c
> > Author:     Toshi Kani <toshi.kani@hp.com>
> > AuthorDate: Tue, 21 Jan 2014 14:33:15 -0800
> > Committer:  Ingo Molnar <mingo@kernel.org>
> > CommitDate: Sat, 25 Jan 2014 09:13:35 +0100
> >
> > arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT
> >
> > When ACPI SLIT table has an I/O locality (i.e. a locality
> > unique to an I/O device), numa_set_distance() emits this warning
> > message:
> >
> >  NUMA: Warning: node ids are out of bound, from=-1 to=-1 distance=10
> >
> > acpi_numa_slit_init() calls numa_set_distance() with
> > pxm_to_node(), which assumes that all localities have been
> > parsed with SRAT previously.  SRAT does not list I/O localities,
> > where as SLIT lists all localities including I/Os.  Hence,
> > pxm_to_node() returns NUMA_NO_NODE (-1) for an I/O locality.
> >
> > I/O localities are not supported and are ignored today, but emitting
> > such warning message leads to unnecessary confusion.
> >
> > Change acpi_numa_slit_init() to avoid calling
> > numa_set_distance() with NUMA_NO_NODE.
> >
> > Signed-off-by: Toshi Kani <toshi.kani@hp.com>
> > Acked-by: David Rientjes <rientjes@google.com>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Yinghai Lu <yinghai@kernel.org>
> > Link: http://lkml.kernel.org/n/tip-dSvpjjvp8aMzs1ybkftxohlh@git.kernel.org
> > Signed-off-by: Ingo Molnar <mingo@kernel.org>
> > ---
> >  arch/x86/mm/srat.c | 16 +++++++++++++---
> >  1 file changed, 13 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
> > index 266ca91..5ecf651 100644
> > --- a/arch/x86/mm/srat.c
> > +++ b/arch/x86/mm/srat.c
> > @@ -42,15 +42,25 @@ static __init inline int srat_disabled(void)
> >         return acpi_numa < 0;
> >  }
> >
> > -/* Callback for SLIT parsing */
> > +/*
> > + * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
> > + * I/O localities since SRAT does not list them.  I/O localities are
> > + * not supported at this point.
> > + */
> >  void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
> >  {
> >         int i, j;
> >
> > -       for (i = 0; i < slit->locality_count; i++)
> > -               for (j = 0; j < slit->locality_count; j++)
> > +       for (i = 0; i < slit->locality_count; i++) {
> > +               if (pxm_to_node(i) == NUMA_NO_NODE)
> > +                       continue;
> > +               for (j = 0; j < slit->locality_count; j++) {
> > +                       if (pxm_to_node(j) == NUMA_NO_NODE)
> > +                               continue;
> >                         numa_set_distance(pxm_to_node(i), pxm_to_node(j),
> >                                 slit->entry[slit->locality_count * i + j]);
> > +               }
> > +       }
> >  }
> >
> >  /* Callback for Proximity Domain -> x2APIC mapping */
> 
> wonder if the patch that i sent one year ago is better.
> 
> https://lkml.org/lkml/2013/1/21/559
> 
> as it avoid calling extra calling of pxm_to_node(i).

Your version looks good to me, although I do not believe the difference
is visible.  I will reply to your patch with one comment and ack.

Thanks,
-Toshi


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

* Re: [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling.
  2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
  2014-01-26 21:08       ` David Rientjes
@ 2014-01-27 14:49       ` Toshi Kani
  2014-01-27 19:08         ` Yinghai Lu
  2014-02-10 13:32       ` [tip:x86/mm] x86/mm: Avoid duplicated pxm_to_node() calls tip-bot for Yinghai Lu
  2 siblings, 1 reply; 13+ messages in thread
From: Toshi Kani @ 2014-01-27 14:49 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, H. Peter Anvin, Thomas Gleixner, Andrew Morton,
	David Rientjes, linux-kernel

On Sun, 2014-01-26 at 13:01 -0800, Yinghai Lu wrote:
> In slit init code, more pxm_to_node() calling are added.
> 
> We can store from_node/to_node instead of keep calling pxm_to_node().
> 
> After this patch: pxm_to_node() is called n*(1+n)
> Before this patch: pxm_to_node() is called n*(1+n*3)
> 
> for 8 socket, it will be 72 instead of 200.
> for 32 socket, it will be 1056 instead of 3104.
> 
> -v2: update title and change log according to Ingo.
>      move from_node/to_node in loop and change to const according to
> 	David Rientjes.
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

In my original patch, I added the following comment to the function to
address David's comment (which he acked).  So, can you add this comment?

-/* Callback for SLIT parsing */
+/*
+ * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
+ * I/O localities since SRAT does not list them.  I/O localities are
+ * not supported at this point.
+ */

Otherwise, the change looks good to me. 

Acked-by: Toshi Kani <toshi.kani@hp.com>


Thanks,
-Toshi


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

* Re: [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling.
  2014-01-27 19:08         ` Yinghai Lu
@ 2014-01-27 19:05           ` Toshi Kani
  0 siblings, 0 replies; 13+ messages in thread
From: Toshi Kani @ 2014-01-27 19:05 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Ingo Molnar, H. Peter Anvin, Thomas Gleixner, Andrew Morton,
	David Rientjes, Linux Kernel Mailing List

On Mon, 2014-01-27 at 11:08 -0800, Yinghai Lu wrote:
> On Mon, Jan 27, 2014 at 6:49 AM, Toshi Kani <toshi.kani@hp.com> wrote:
> > On Sun, 2014-01-26 at 13:01 -0800, Yinghai Lu wrote:
> >> In slit init code, more pxm_to_node() calling are added.
> >>
> >> We can store from_node/to_node instead of keep calling pxm_to_node().
> >>
> >> After this patch: pxm_to_node() is called n*(1+n)
> >> Before this patch: pxm_to_node() is called n*(1+n*3)
> >>
> >> for 8 socket, it will be 72 instead of 200.
> >> for 32 socket, it will be 1056 instead of 3104.
> >>
> >> -v2: update title and change log according to Ingo.
> >>      move from_node/to_node in loop and change to const according to
> >>       David Rientjes.
> >>
> >> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> >
> > In my original patch, I added the following comment to the function to
> > address David's comment (which he acked).  So, can you add this comment?
> >
> > -/* Callback for SLIT parsing */
> > +/*
> > + * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
> > + * I/O localities since SRAT does not list them.  I/O localities are
> > + * not supported at this point.
> > + */
> >
> > Otherwise, the change looks good to me.
> >
> > Acked-by: Toshi Kani <toshi.kani@hp.com>
> 
> Hi, Toshi,
> 
> This patch is delta patch to your patch that is in tip already.
> 
> So you comments change is still there and not touched.

Hi Yinghai,

Sounds great!  Thanks for the clarification!

-Toshi



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

* Re: [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling.
  2014-01-27 14:49       ` Toshi Kani
@ 2014-01-27 19:08         ` Yinghai Lu
  2014-01-27 19:05           ` Toshi Kani
  0 siblings, 1 reply; 13+ messages in thread
From: Yinghai Lu @ 2014-01-27 19:08 UTC (permalink / raw)
  To: Toshi Kani
  Cc: Ingo Molnar, H. Peter Anvin, Thomas Gleixner, Andrew Morton,
	David Rientjes, Linux Kernel Mailing List

On Mon, Jan 27, 2014 at 6:49 AM, Toshi Kani <toshi.kani@hp.com> wrote:
> On Sun, 2014-01-26 at 13:01 -0800, Yinghai Lu wrote:
>> In slit init code, more pxm_to_node() calling are added.
>>
>> We can store from_node/to_node instead of keep calling pxm_to_node().
>>
>> After this patch: pxm_to_node() is called n*(1+n)
>> Before this patch: pxm_to_node() is called n*(1+n*3)
>>
>> for 8 socket, it will be 72 instead of 200.
>> for 32 socket, it will be 1056 instead of 3104.
>>
>> -v2: update title and change log according to Ingo.
>>      move from_node/to_node in loop and change to const according to
>>       David Rientjes.
>>
>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>
> In my original patch, I added the following comment to the function to
> address David's comment (which he acked).  So, can you add this comment?
>
> -/* Callback for SLIT parsing */
> +/*
> + * Callback for SLIT parsing.  pxm_to_node() returns NUMA_NO_NODE for
> + * I/O localities since SRAT does not list them.  I/O localities are
> + * not supported at this point.
> + */
>
> Otherwise, the change looks good to me.
>
> Acked-by: Toshi Kani <toshi.kani@hp.com>

Hi, Toshi,

This patch is delta patch to your patch that is in tip already.

So you comments change is still there and not touched.

Thanks

Yinghai

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

* [tip:x86/mm] x86/mm: Avoid duplicated pxm_to_node() calls
  2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
  2014-01-26 21:08       ` David Rientjes
  2014-01-27 14:49       ` Toshi Kani
@ 2014-02-10 13:32       ` tip-bot for Yinghai Lu
  2 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Yinghai Lu @ 2014-02-10 13:32 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, yinghai, tglx, rientjes, toshi.kani

Commit-ID:  ba6a328f7dfc95b20df5e0eb33c698187e997190
Gitweb:     http://git.kernel.org/tip/ba6a328f7dfc95b20df5e0eb33c698187e997190
Author:     Yinghai Lu <yinghai@kernel.org>
AuthorDate: Sun, 26 Jan 2014 13:01:42 -0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sun, 9 Feb 2014 15:32:31 +0100

x86/mm: Avoid duplicated pxm_to_node() calls

In slit init code, too many pxm_to_node() function calls are done.

We can store from_node/to_node instead of keep calling
pxm_to_node().

  - Before this patch: pxm_to_node() is called n*(1+n*3) times.
  - After  this patch: pxm_to_node() is called n*(1+n) times.

for  8 sockets, it will be   72 instead of  200.
for 32 sockets, it will be 1056 instead of 3104.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: David Rientjes <rientjes@google.com>
Link: http://lkml.kernel.org/r/1390770102-4007-1-git-send-email-yinghai@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/mm/srat.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
index 1953e9c..66338a6 100644
--- a/arch/x86/mm/srat.c
+++ b/arch/x86/mm/srat.c
@@ -52,12 +52,18 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
 	int i, j;
 
 	for (i = 0; i < slit->locality_count; i++) {
-		if (pxm_to_node(i) == NUMA_NO_NODE)
+		const int from_node = pxm_to_node(i);
+
+		if (from_node == NUMA_NO_NODE)
 			continue;
+
 		for (j = 0; j < slit->locality_count; j++) {
-			if (pxm_to_node(j) == NUMA_NO_NODE)
+			const int to_node = pxm_to_node(j);
+
+			if (to_node == NUMA_NO_NODE)
 				continue;
-			numa_set_distance(pxm_to_node(i), pxm_to_node(j),
+
+			numa_set_distance(from_node, to_node,
 				slit->entry[slit->locality_count * i + j]);
 		}
 	}

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

end of thread, other threads:[~2014-02-10 13:32 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-25 14:25 [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT tip-bot for Toshi Kani
2014-01-26  8:43 ` Yinghai Lu
2014-01-26  8:46   ` Ingo Molnar
2014-01-26  9:10     ` [PATCH] x86, mm: Avoid extra pxm_to_node() Yinghai Lu
2014-01-26  9:10       ` Ingo Molnar
2014-01-26  9:28       ` David Rientjes
2014-01-26 21:01     ` [PATCH v2] x86, mm: Avoid duplicated pxm_to_node() calling Yinghai Lu
2014-01-26 21:08       ` David Rientjes
2014-01-27 14:49       ` Toshi Kani
2014-01-27 19:08         ` Yinghai Lu
2014-01-27 19:05           ` Toshi Kani
2014-02-10 13:32       ` [tip:x86/mm] x86/mm: Avoid duplicated pxm_to_node() calls tip-bot for Yinghai Lu
2014-01-27 14:45   ` [tip:x86/urgent] arch/x86/mm/srat: Skip NUMA_NO_NODE while parsing SLIT Toshi Kani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox