Hello Vijay,
On 09/02/17 15:56, vijay.kil...@gmail.com wrote:
From: Vijaya Kumar K <vijaya.ku...@cavium.com>
numa_setup() contains generic and arch specific code.
Split numa_setup() and move architecture specific code
under arch_numa_setup().
Signed-off-by: Vijaya Kumar K <vijaya.ku...@cavium.com>
---
xen/arch/arm/Makefile | 1 +
xen/arch/arm/numa.c | 28 ++++++++++++++++++++++++++++
xen/arch/x86/numa.c | 11 +----------
xen/common/numa.c | 14 ++++++++++++++
xen/include/asm-arm/numa.h | 9 ++++++++-
xen/include/asm-x86/numa.h | 2 +-
xen/include/xen/numa.h | 1 +
7 files changed, 54 insertions(+), 12 deletions(-)
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 7afb8a3..b5d7a19 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -49,6 +49,7 @@ obj-y += vm_event.o
obj-y += vtimer.o
obj-y += vpsci.o
obj-y += vuart.o
+obj-$(CONFIG_NUMA) += numa.o
#obj-bin-y += ....o
diff --git a/xen/arch/arm/numa.c b/xen/arch/arm/numa.c
new file mode 100644
index 0000000..59d09c7
--- /dev/null
+++ b/xen/arch/arm/numa.c
@@ -0,0 +1,28 @@
+/*
+ * ARM NUMA Implementation
+ *
+ * Copyright (C) 2016 - Cavium Inc.
+ * Vijaya Kumar K <vijaya.ku...@cavium.com>
+ *
+ * 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.
The copyright is wrong.
+ *
+ * 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. See the
+ * GNU General Public License for more details.
+ */
+
+#include <xen/init.h>
+#include <xen/ctype.h>
+#include <xen/mm.h>
+#include <xen/nodemask.h>
+#include <asm/mm.h>
+#include <xen/numa.h>
+
+int __init arch_numa_setup(char *opt)
+{
+ return 1;
+}
diff --git a/xen/arch/x86/numa.c b/xen/arch/x86/numa.c
index bc787e0..28d1891 100644
--- a/xen/arch/x86/numa.c
+++ b/xen/arch/x86/numa.c
@@ -18,9 +18,6 @@
#include <xen/sched.h>
#include <xen/softirq.h>
-static int numa_setup(char *s);
-custom_param("numa", numa_setup);
-
#ifndef Dprintk
#define Dprintk(x...)
#endif
@@ -34,7 +31,6 @@ nodeid_t apicid_to_node[MAX_LOCAL_APIC] = {
nodemask_t __read_mostly node_online_map = { { [0] = 1UL } };
-bool_t numa_off = 0;
s8 acpi_numa = 0;
int srat_disabled(void)
@@ -145,13 +141,8 @@ void __init numa_initmem_init(unsigned long start_pfn,
unsigned long end_pfn)
(u64)end_pfn << PAGE_SHIFT);
}
-/* [numa=off] */
-static __init int numa_setup(char *opt)
+int __init arch_numa_setup(char *opt)
I don't understand why you split numa_setup. All the options look valid
for ARM.
{
- 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) )
{
diff --git a/xen/common/numa.c b/xen/common/numa.c
index 13f147c..9b9cf9c 100644
--- a/xen/common/numa.c
+++ b/xen/common/numa.c
@@ -32,6 +32,10 @@
#include <xen/softirq.h>
#include <asm/setup.h>
+static int numa_setup(char *s);
Forward declaration can be avoided in most of the cases. So please add
at the right place from the beginning.
+custom_param("numa", numa_setup);
+
+bool_t numa_off = 0;
struct node_data node_data[MAX_NUMNODES];
/* Mapping from pdx to node id */
@@ -250,6 +254,16 @@ EXPORT_SYMBOL(memnode_shift);
EXPORT_SYMBOL(memnodemap);
EXPORT_SYMBOL(node_data);
+static __init int numa_setup(char *opt)
+{
+ if ( !strncmp(opt,"off",3) )
+ numa_off = 1;
+ if ( !strncmp(opt,"on",2) )
+ numa_off = 0;
+
+ return arch_numa_setup(opt);
+}
+
static void dump_numa(unsigned char key)
{
s_time_t now = NOW();
diff --git a/xen/include/asm-arm/numa.h b/xen/include/asm-arm/numa.h
index a60c7eb..c1e8a7d 100644
--- a/xen/include/asm-arm/numa.h
+++ b/xen/include/asm-arm/numa.h
@@ -5,7 +5,14 @@ typedef u8 nodeid_t;
#define NODES_SHIFT 2
-#ifndef CONFIG_NUMA
+#ifdef CONFIG_NUMA
+int arch_numa_setup(char *opt);
+#else
+static inline int arch_numa_setup(char *opt)
+{
+ return 1;
+}
What is the point of this?
+
/* Fake one node for now. See also node_online_map. */
#define cpu_to_node(cpu) 0
#define node_to_cpumask(node) (cpu_online_map)
diff --git a/xen/include/asm-x86/numa.h b/xen/include/asm-x86/numa.h
index df1f7d5..659ff6a 100644
--- a/xen/include/asm-x86/numa.h
+++ b/xen/include/asm-x86/numa.h
@@ -22,7 +22,6 @@ extern nodeid_t pxm_to_node(unsigned int pxm);
#define ZONE_ALIGN (1UL << (MAX_ORDER+PAGE_SHIFT))
extern void numa_init_array(void);
-extern bool_t numa_off;
extern int srat_disabled(void);
extern void srat_detect_node(int cpu);
@@ -32,5 +31,6 @@ extern nodeid_t apicid_to_node[];
void srat_parse_regions(u64 addr);
extern u8 __node_distance(nodeid_t a, nodeid_t b);
unsigned int arch_get_dma_bitsize(void);
+int arch_numa_setup(char *opt);
#endif
diff --git a/xen/include/xen/numa.h b/xen/include/xen/numa.h
index 810f742..77c5cfd 100644
--- a/xen/include/xen/numa.h
+++ b/xen/include/xen/numa.h
@@ -18,6 +18,7 @@
(((d)->vcpu != NULL && (d)->vcpu[0] != NULL) \
? vcpu_to_node((d)->vcpu[0]) : NUMA_NO_NODE)
+extern bool_t numa_off;
The place you added looks a bit random. And would be surprised to see a
need when NUMA is not enabled.
struct node {
u64 start,end;
};
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel