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] [XEN] Clean up NUMA stuff and disable by

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Clean up NUMA stuff and disable by default ('numa=on' enables it).
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 25 Oct 2006 16:30:17 +0000
Delivery-date: Wed, 25 Oct 2006 09:30:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/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 kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 3db344ea80705478cef942254e5772c5739fafc9
# Parent  6788aedb820c7be481e23662a24a7c77fc2b7a9c
[XEN] Clean up NUMA stuff and disable by default ('numa=on' enables it).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/include/asm-x86/numnodes.h |   26 ----------------------
 xen/include/asm-x86/topology.h |   40 ----------------------------------
 xen/include/xen/topology.h     |   27 -----------------------
 xen/arch/x86/numa.c            |   48 +++++++++++++++++++++++------------------
 xen/arch/x86/setup.c           |   28 ++++++++++-------------
 xen/arch/x86/smpboot.c         |    1 
 xen/arch/x86/srat.c            |   12 ----------
 xen/common/page_alloc.c        |    8 ++----
 xen/include/asm-x86/acpi.h     |    1 
 xen/include/asm-x86/numa.h     |   21 ++++++++++++++---
 xen/include/xen/nodemask.h     |    4 ---
 xen/include/xen/numa.h         |   24 --------------------
 12 files changed, 62 insertions(+), 178 deletions(-)

diff -r 6788aedb820c -r 3db344ea8070 xen/arch/x86/numa.c
--- a/xen/arch/x86/numa.c       Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/arch/x86/numa.c       Wed Oct 25 15:17:40 2006 +0100
@@ -12,9 +12,11 @@
 #include <xen/numa.h>
 #include <xen/keyhandler.h>
 #include <xen/time.h>
-
-#include <asm/numa.h>
+#include <xen/smp.h>
 #include <asm/acpi.h>
+
+static int numa_setup(char *s);
+custom_param("numa", numa_setup);
 
 #ifndef Dprintk
 #define Dprintk(x...)
@@ -28,7 +30,7 @@ int memnode_shift;
 int memnode_shift;
 u8  memnodemap[NODEMAPSIZE];
 
-unsigned int cpu_to_node[NR_CPUS] __read_mostly = {
+unsigned char cpu_to_node[NR_CPUS] __read_mostly = {
        [0 ... NR_CPUS-1] = NUMA_NO_NODE
 };
 unsigned char apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
@@ -38,7 +40,8 @@ cpumask_t node_to_cpumask[MAX_NUMNODES] 
 
 nodemask_t node_online_map = { { [0] = 1UL } };
 
-int numa_off __initdata;
+/* Default NUMA to off for now. acpi=on required to enable it. */
+int numa_off __initdata = 1;
 
 int acpi_numa __initdata;
 
@@ -70,7 +73,7 @@ populate_memnodemap(const struct node *n
                        if (memnodemap[addr >> shift] != 0xff)
                                return -1;
                        memnodemap[addr >> shift] = i;
-                       addr += (1UL << shift);
+                       addr += (1UL << shift);
                } while (addr < end);
                res = 1;
        } 
@@ -133,8 +136,7 @@ void __init numa_init_array(void)
 }
 
 #ifdef CONFIG_NUMA_EMU
-/* default to faking a single node as fallback for non-NUMA hardware */
-int numa_fake __initdata = 1;
+static int numa_fake __initdata = 0;
 
 /* Numa emulation */
 static int numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
@@ -160,9 +162,9 @@ static int numa_emulation(unsigned long 
                        sz = (end_pfn<<PAGE_SHIFT) - nodes[i].start;
                nodes[i].end = nodes[i].start + sz;
                printk(KERN_INFO "Faking node %d at %"PRIx64"-%"PRIx64" 
(%"PRIu64"MB)\n",
-                      i,
-                      nodes[i].start, nodes[i].end,
-                      (nodes[i].end - nodes[i].start) >> 20);
+                      i,
+                      nodes[i].start, nodes[i].end,
+                      (nodes[i].end - nodes[i].start) >> 20);
                node_set_online(i);
        }
        memnode_shift = compute_hash_shift(nodes, numa_fake);
@@ -182,16 +184,15 @@ void __init numa_initmem_init(unsigned l
 { 
        int i;
 
+#ifdef CONFIG_NUMA_EMU
+       if (numa_fake && !numa_emulation(start_pfn, end_pfn))
+               return;
+#endif
+
 #ifdef CONFIG_ACPI_NUMA
        if (!numa_off && !acpi_scan_nodes(start_pfn << PAGE_SHIFT,
                                          end_pfn << PAGE_SHIFT))
-               return;
-#endif
-
-#ifdef CONFIG_NUMA_EMU
-   /* fake a numa node for non-numa hardware */
-       if (numa_fake && !numa_emulation(start_pfn, end_pfn))
-               return;
+               return;
 #endif
 
        printk(KERN_INFO "%s\n",
@@ -200,7 +201,7 @@ void __init numa_initmem_init(unsigned l
        printk(KERN_INFO "Faking a node at %016lx-%016lx\n", 
               start_pfn << PAGE_SHIFT,
               end_pfn << PAGE_SHIFT); 
-               /* setup dummy node covering all memory */ 
+       /* setup dummy node covering all memory */ 
        memnode_shift = 63; 
        memnodemap[0] = 0;
        nodes_clear(node_online_map);
@@ -222,20 +223,25 @@ void __cpuinit numa_set_node(int cpu, in
 }
 
 /* [numa=off] */
-__init int numa_setup(char *opt) 
+static __init int numa_setup(char *opt) 
 { 
        if (!strncmp(opt,"off",3))
                numa_off = 1;
+       if (!strncmp(opt,"on",2))
+               numa_off = 0;
 #ifdef CONFIG_NUMA_EMU
        if(!strncmp(opt, "fake=", 5)) {
+               numa_off = 0;
                numa_fake = simple_strtoul(opt+5,NULL,0); ;
                if (numa_fake >= MAX_NUMNODES)
                        numa_fake = MAX_NUMNODES;
        }
 #endif
 #ifdef CONFIG_ACPI_NUMA
-       if (!strncmp(opt,"noacpi",6))
-               acpi_numa = -1;
+       if (!strncmp(opt,"noacpi",6)) {
+               numa_off = 0;
+               acpi_numa = -1;
+       }
 #endif
        return 1;
 } 
diff -r 6788aedb820c -r 3db344ea8070 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/arch/x86/setup.c      Wed Oct 25 15:17:40 2006 +0100
@@ -26,7 +26,6 @@
 #include <asm/desc.h>
 #include <asm/shadow.h>
 #include <asm/e820.h>
-#include <asm/numa.h>
 #include <acm/acm_hooks.h>
 
 extern void dmi_scan_machine(void);
@@ -62,9 +61,6 @@ boolean_param("watchdog", opt_watchdog);
 /* "acpi=noirq":  Disables ACPI interrupt routing.                  */
 static void parse_acpi_param(char *s);
 custom_param("acpi", parse_acpi_param);
-
-extern int numa_setup(char *s);
-custom_param("numa", numa_setup);
 
 /* **** Linux config option: propagated to domain0. */
 /* acpi_skip_timer_override: Skip IRQ0 overrides. */
@@ -265,16 +261,16 @@ static void __init init_idle_domain(void
 
 static void srat_detect_node(int cpu)
 {
-   unsigned node;
-   u8 apicid = x86_cpu_to_apicid[cpu];
-
-   node = apicid_to_node[apicid];
-   if (node == NUMA_NO_NODE)
-      node = 0;
-   numa_set_node(cpu, node);
-
-   if (acpi_numa > 0)
-      printk(KERN_INFO "CPU %d APIC %d -> Node %d\n", cpu, apicid, node);
+    unsigned node;
+    u8 apicid = x86_cpu_to_apicid[cpu];
+
+    node = apicid_to_node[apicid];
+    if ( node == NUMA_NO_NODE )
+        node = 0;
+    numa_set_node(cpu, node);
+
+    if ( acpi_numa > 0 )
+        printk(KERN_INFO "CPU %d APIC %d -> Node %d\n", cpu, apicid, node);
 }
 
 void __init __start_xen(multiboot_info_t *mbi)
@@ -617,9 +613,9 @@ void __init __start_xen(multiboot_info_t
         if ( !cpu_online(i) )
             __cpu_up(i);
 
-               /* setup cpu_to_node[] */
+        /* Set up cpu_to_node[]. */
         srat_detect_node(i);
-               /* setup node_to_cpumask based on cpu_to_node[] */
+        /* Set up node_to_cpumask based on cpu_to_node[]. */
         numa_add_cpu(i);        
     }
 
diff -r 6788aedb820c -r 3db344ea8070 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/arch/x86/smpboot.c    Wed Oct 25 15:17:40 2006 +0100
@@ -44,7 +44,6 @@
 #include <xen/softirq.h>
 #include <xen/serial.h>
 #include <xen/numa.h>
-#include <asm/numa.h>
 #include <asm/current.h>
 #include <asm/mc146818rtc.h>
 #include <asm/desc.h>
diff -r 6788aedb820c -r 3db344ea8070 xen/arch/x86/srat.c
--- a/xen/arch/x86/srat.c       Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/arch/x86/srat.c       Wed Oct 25 15:17:40 2006 +0100
@@ -11,22 +11,12 @@
  * Adapted for Xen: Ryan Harper <ryanh@xxxxxxxxxx>
  */
 
-#if 0
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <asm/proto.h>
-#include <xen/bitmap.h>
-#include <xen/numa.h>
-#include <xen/topology.h>
-#include <asm/e820.h>
-#endif
 #include <xen/init.h>
 #include <xen/mm.h>
 #include <xen/inttypes.h>
 #include <xen/nodemask.h>
 #include <xen/acpi.h>
-
-#include <asm/numa.h>
+#include <xen/numa.h>
 #include <asm/page.h>
 
 static struct acpi_table_slit *acpi_slit;
diff -r 6788aedb820c -r 3db344ea8070 xen/common/page_alloc.c
--- a/xen/common/page_alloc.c   Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/common/page_alloc.c   Wed Oct 25 15:17:40 2006 +0100
@@ -34,9 +34,9 @@
 #include <xen/domain_page.h>
 #include <xen/keyhandler.h>
 #include <xen/perfc.h>
+#include <xen/numa.h>
+#include <xen/nodemask.h>
 #include <asm/page.h>
-#include <asm/numa.h>
-#include <asm/topology.h>
 
 /*
  * Comma-separated list of hexadecimal page numbers containing bad bytes.
@@ -702,9 +702,7 @@ inline struct page_info *alloc_domheap_p
     struct domain *d, unsigned int order, unsigned int flags)
 {
     return __alloc_domheap_pages(d, smp_processor_id(), order, flags);
-
-}
-
+}
 
 void free_domheap_pages(struct page_info *pg, unsigned int order)
 {
diff -r 6788aedb820c -r 3db344ea8070 xen/include/asm-x86/acpi.h
--- a/xen/include/asm-x86/acpi.h        Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/include/asm-x86/acpi.h        Wed Oct 25 15:17:40 2006 +0100
@@ -159,6 +159,7 @@ static inline int acpi_irq_balance_set(c
 static inline int acpi_irq_balance_set(char *str) { return 0; }
 extern int acpi_scan_nodes(u64 start, u64 end);
 extern int acpi_numa;
+#define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
 
 #ifdef CONFIG_ACPI_SLEEP
 
diff -r 6788aedb820c -r 3db344ea8070 xen/include/asm-x86/numa.h
--- a/xen/include/asm-x86/numa.h        Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/include/asm-x86/numa.h        Wed Oct 25 15:17:40 2006 +0100
@@ -1,10 +1,17 @@
 #ifndef _ASM_X8664_NUMA_H 
 #define _ASM_X8664_NUMA_H 1
 
-#include <xen/nodemask.h>
-#include <xen/topology.h>
-#include <asm/numnodes.h>
-#include <asm/smp.h>
+#include <xen/cpumask.h>
+
+#define NODES_SHIFT 6
+
+extern unsigned char cpu_to_node[];
+extern cpumask_t     node_to_cpumask[];
+
+#define cpu_to_node(cpu)               (cpu_to_node[cpu])
+#define parent_node(node)              (node)
+#define node_to_first_cpu(node)  (__ffs(node_to_cpumask[node]))
+#define node_to_cpumask(node)    (node_to_cpumask[node])
 
 struct node { 
        u64 start,end; 
@@ -37,6 +44,12 @@ extern int memnode_shift;
 extern int memnode_shift; 
 extern u8  memnodemap[NODEMAPSIZE]; 
 
+struct node_data {
+    unsigned long node_start_pfn;
+    unsigned long node_spanned_pages;
+    unsigned int  node_id;
+};
+
 extern struct node_data node_data[];
 
 static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) 
diff -r 6788aedb820c -r 3db344ea8070 xen/include/xen/nodemask.h
--- a/xen/include/xen/nodemask.h        Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/include/xen/nodemask.h        Wed Oct 25 15:17:40 2006 +0100
@@ -72,10 +72,6 @@
  *    way we do the other calls.
  */
 
-#if 0
-#include <linux/threads.h>
-#include <asm/bug.h>
-#endif
 #include <xen/kernel.h>
 #include <xen/bitmap.h>
 #include <xen/numa.h>
diff -r 6788aedb820c -r 3db344ea8070 xen/include/xen/numa.h
--- a/xen/include/xen/numa.h    Wed Oct 25 15:01:51 2006 +0100
+++ b/xen/include/xen/numa.h    Wed Oct 25 15:17:40 2006 +0100
@@ -2,34 +2,12 @@
 #define _XEN_NUMA_H
 
 #include <xen/config.h>
-
-#ifdef CONFIG_DISCONTIGMEM
-#include <asm/numnodes.h>
-#endif
+#include <asm/numa.h>
 
 #ifndef NODES_SHIFT
 #define NODES_SHIFT     0
 #endif
 
 #define MAX_NUMNODES    (1 << NODES_SHIFT)
-#define NUMA_NO_NODE    0xff
-
-#define MAX_PXM_DOMAINS    256   /* 1 byte and no promises about values */
-#define PXM_BITMAP_LEN (MAX_PXM_DOMAINS / 8)
-#define MAX_CHUNKS_PER_NODE   4
-#define MAXCHUNKS    (MAX_CHUNKS_PER_NODE * MAX_NUMNODES)
-
-/* needed for drivers/acpi/numa.c */
-#define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
-
-extern unsigned int cpu_to_node[];
-#include <xen/cpumask.h>
-extern cpumask_t node_to_cpumask[];
-
-typedef struct node_data {
-    unsigned long node_start_pfn;
-    unsigned long node_spanned_pages;
-    unsigned int  node_id;
-} node_data_t;
 
 #endif /* _XEN_NUMA_H */
diff -r 6788aedb820c -r 3db344ea8070 xen/include/asm-x86/numnodes.h
--- a/xen/include/asm-x86/numnodes.h    Wed Oct 25 15:01:51 2006 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-#include <xen/config.h>
-
-#if defined(__i386__)
-#ifdef CONFIG_X86_NUMAQ
-
-/* Max 16 Nodes */
-#define NODES_SHIFT    4
-
-#elif defined(CONFIG_ACPI_SRAT)
-
-/* Max 8 Nodes */
-#define NODES_SHIFT    3
-
-#endif /* CONFIG_X86_NUMAQ */
-
-
-#endif /* __i386__ */
-
-#if defined(CONFIG_NUMA) && defined(__x86_64__)
-#define NODES_SHIFT  6
-#endif /* __x86_64__ */
-
-#endif /* _ASM_MAX_NUMNODES_H */
diff -r 6788aedb820c -r 3db344ea8070 xen/include/asm-x86/topology.h
--- a/xen/include/asm-x86/topology.h    Wed Oct 25 15:01:51 2006 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006, IBM Corp.
- *
- * All rights reserved.          
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Ryan Harper <ryanh@xxxxxxxxxx>
- */
-
-#ifndef _ASM_X86_TOPOLOGY_H
-#define _ASM_X86_TOPOLOGY_H
-
-#include <xen/config.h>
-#include <xen/bitops.h>
-
-extern cpumask_t cpu_online_map;
-
-extern unsigned int cpu_to_node[];
-extern cpumask_t     node_to_cpumask[];
-
-#define cpu_to_node(cpu)               (cpu_to_node[cpu])
-#define parent_node(node)              (node)
-#define node_to_first_cpu(node)  (__ffs(node_to_cpumask[node]))
-#define node_to_cpumask(node)    (node_to_cpumask[node])
-
-#endif  /* _ASM_X86_TOPOLOGY_H */
diff -r 6788aedb820c -r 3db344ea8070 xen/include/xen/topology.h
--- a/xen/include/xen/topology.h        Wed Oct 25 15:01:51 2006 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, IBM Corp.
- *
- * All rights reserved.          
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-#ifndef _XEN_TOPOLOGY_H
-#define _XEN_TOPOLOGY_H
-
-#include <asm/topology.h>
-
-#endif /* _XEN_TOPOLOGY_H */

_______________________________________________
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] [XEN] Clean up NUMA stuff and disable by default ('numa=on' enables it)., Xen patchbot-unstable <=