summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/numa.h3
-rw-r--r--arch/x86/include/asm/numa_64.h3
-rw-r--r--arch/x86/mm/numa_32.c34
3 files changed, 37 insertions, 3 deletions
diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
index c24306cd1504..db449c7d89b3 100644
--- a/arch/x86/include/asm/numa.h
+++ b/arch/x86/include/asm/numa.h
@@ -21,6 +21,9 @@
extern s16 __apicid_to_node[MAX_LOCAL_APIC];
extern nodemask_t numa_nodes_parsed __initdata;
+extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
+extern void __init numa_set_distance(int from, int to, int distance);
+
static inline void set_apicid_to_node(int apicid, s16 node)
{
__apicid_to_node[apicid] = node;
diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
index e84113f8fff3..506dd050ff30 100644
--- a/arch/x86/include/asm/numa_64.h
+++ b/arch/x86/include/asm/numa_64.h
@@ -15,9 +15,6 @@ extern unsigned long numa_free_all_bootmem(void);
*/
#define NODE_MIN_SIZE (4*1024*1024)
-extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
-extern void __init numa_set_distance(int from, int to, int distance);
-
#ifdef CONFIG_NUMA_EMU
#define FAKE_NODE_MIN_SIZE ((u64)32 << 20)
#define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL))
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
index abf1247a4c32..d0369a56f843 100644
--- a/arch/x86/mm/numa_32.c
+++ b/arch/x86/mm/numa_32.c
@@ -414,3 +414,37 @@ int memory_add_physaddr_to_nid(u64 addr)
EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
#endif
+/* temporary shim, will go away soon */
+int __init numa_add_memblk(int nid, u64 start, u64 end)
+{
+ unsigned long start_pfn = start >> PAGE_SHIFT;
+ unsigned long end_pfn = end >> PAGE_SHIFT;
+
+ printk(KERN_DEBUG "nid %d start_pfn %08lx end_pfn %08lx\n",
+ nid, start_pfn, end_pfn);
+
+ if (start >= (u64)max_pfn << PAGE_SHIFT) {
+ printk(KERN_INFO "Ignoring SRAT pfns: %08lx - %08lx\n",
+ start_pfn, end_pfn);
+ return 0;
+ }
+
+ node_set_online(nid);
+ memblock_x86_register_active_regions(nid, start_pfn,
+ min(end_pfn, max_pfn));
+
+ if (!node_has_online_mem(nid)) {
+ node_start_pfn[nid] = start_pfn;
+ node_end_pfn[nid] = end_pfn;
+ } else {
+ node_start_pfn[nid] = min(node_start_pfn[nid], start_pfn);
+ node_end_pfn[nid] = max(node_end_pfn[nid], end_pfn);
+ }
+ return 0;
+}
+
+/* temporary shim, will go away soon */
+void __init numa_set_distance(int from, int to, int distance)
+{
+ /* nada */
+}