All of lore.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 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.