WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] numa: Correct handling node with CPU popu

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] numa: Correct handling node with CPU populated but no memory populated
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 05 Jan 2010 00:45:14 -0800
Delivery-date: Tue, 05 Jan 2010 00:45:32 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1262680703 0
# Node ID 19479955c0741ad4787f5f83bc5fa4612fd7bd44
# Parent  de533c8993eb1b9496c5b6ba1f40e68507b2c9f0
numa: Correct handling node with CPU populated but no memory populated

In changeset 20599, the node that has no memory populated is marked
parsed, but not online. However, if there are CPU populated in this
node, the corresponding CPU mapping (i.e. the cpu_to_node) is still
setup to the offline node, this will cause trouble for memory
allocation.

This patch changes the init_cpu_to_node() and srant_detect_node(), to
considering the node is offlined situation.

Now the apicid_to_node is only used to keep the mapping between
cpu/node provided by BIOS, and should not be used for memory
allocation anymore.

One thing left is to update the cpu_to_node mapping after memory
populated by memory hot-add.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>

This is a reintroduction of 20726:ddb8c5e798f9, which I incorrectly
reverted in 20745:d3215a968db9

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/numa.c      |   12 ++++++++----
 xen/arch/x86/setup.c     |    3 ++-
 xen/arch/x86/smpboot.c   |    2 +-
 xen/arch/x86/x86_64/mm.c |    2 +-
 4 files changed, 12 insertions(+), 7 deletions(-)

diff -r de533c8993eb -r 19479955c074 xen/arch/x86/numa.c
--- a/xen/arch/x86/numa.c       Tue Jan 05 08:36:54 2010 +0000
+++ b/xen/arch/x86/numa.c       Tue Jan 05 08:38:23 2010 +0000
@@ -35,6 +35,9 @@ unsigned char cpu_to_node[NR_CPUS] __rea
 unsigned char cpu_to_node[NR_CPUS] __read_mostly = {
        [0 ... NR_CPUS-1] = NUMA_NO_NODE
 };
+/*
+ * Keep BIOS's CPU2node information, should not be used for memory allocaion
+ */
 unsigned char apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
        [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
 };
@@ -288,14 +291,15 @@ static __init int numa_setup(char *opt)
  */
 void __devinit init_cpu_to_node(void)
 {
-       int i;
+       int i, node;
        for (i = 0; i < NR_CPUS; i++) {
                u32 apicid = x86_cpu_to_apicid[i];
                if (apicid == BAD_APICID)
                        continue;
-               if (apicid_to_node[apicid] == NUMA_NO_NODE)
-                       continue;
-               numa_set_node(i,apicid_to_node[apicid]);
+               node = apicid_to_node[apicid];
+               if ( node == NUMA_NO_NODE || !node_online(node) )
+                       node = 0;
+               numa_set_node(i, node);
        }
 }
 
diff -r de533c8993eb -r 19479955c074 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Tue Jan 05 08:36:54 2010 +0000
+++ b/xen/arch/x86/setup.c      Tue Jan 05 08:38:23 2010 +0000
@@ -20,6 +20,7 @@
 #include <xen/rcupdate.h>
 #include <xen/vga.h>
 #include <xen/dmi.h>
+#include <xen/nodemask.h>
 #include <public/version.h>
 #ifdef CONFIG_COMPAT
 #include <compat/platform.h>
@@ -263,7 +264,7 @@ void __devinit srat_detect_node(int cpu)
     u32 apicid = x86_cpu_to_apicid[cpu];
 
     node = apicid_to_node[apicid];
-    if ( node == NUMA_NO_NODE )
+    if ( node == NUMA_NO_NODE || !node_online(node) )
         node = 0;
     numa_set_node(cpu, node);
 
diff -r de533c8993eb -r 19479955c074 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Tue Jan 05 08:36:54 2010 +0000
+++ b/xen/arch/x86/smpboot.c    Tue Jan 05 08:38:23 2010 +0000
@@ -913,7 +913,7 @@ static int __devinit do_boot_cpu(int api
        }
 #else
        if (!per_cpu(compat_arg_xlat, cpu))
-               setup_compat_arg_xlat(cpu, apicid_to_node[apicid]);
+               setup_compat_arg_xlat(cpu, cpu_to_node[cpu]);
 #endif
 
        if (!idt_tables[cpu]) {
diff -r de533c8993eb -r 19479955c074 xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c  Tue Jan 05 08:36:54 2010 +0000
+++ b/xen/arch/x86/x86_64/mm.c  Tue Jan 05 08:38:23 2010 +0000
@@ -997,7 +997,7 @@ void __init subarch_init_memory(void)
     }
 
     if ( setup_compat_arg_xlat(smp_processor_id(),
-                               apicid_to_node[boot_cpu_physical_apicid]) )
+                               cpu_to_node[0]) )
         panic("Could not setup argument translation area");
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] numa: Correct handling node with CPU populated but no memory populated, Xen patchbot-unstable <=