summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/mmzone_64.h
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-12-12 11:53:43 +0100
committerIngo Molnar <mingo@elte.hu>2008-12-12 11:53:43 +0100
commite18d7af85296cb6999aae171e8a9f8612bea5ae0 (patch)
tree97a675ecc17bef2f710c50f5ea2a480df0e362c0 /arch/x86/include/asm/mmzone_64.h
parent3555105333ae55414d0fe051557bd7dc590f5255 (diff)
parent8b1fae4e4200388b64dd88065639413cb3f1051c (diff)
downloadlinux-e18d7af85296cb6999aae171e8a9f8612bea5ae0.tar.gz
linux-e18d7af85296cb6999aae171e8a9f8612bea5ae0.tar.bz2
linux-e18d7af85296cb6999aae171e8a9f8612bea5ae0.zip
Merge commit 'v2.6.28-rc8' into x86/mm
Diffstat (limited to 'arch/x86/include/asm/mmzone_64.h')
-rw-r--r--arch/x86/include/asm/mmzone_64.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/arch/x86/include/asm/mmzone_64.h b/arch/x86/include/asm/mmzone_64.h
new file mode 100644
index 000000000000..a5b3817d4b9e
--- /dev/null
+++ b/arch/x86/include/asm/mmzone_64.h
@@ -0,0 +1,51 @@
+/* K8 NUMA support */
+/* Copyright 2002,2003 by Andi Kleen, SuSE Labs */
+/* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */
+#ifndef _ASM_X86_MMZONE_64_H
+#define _ASM_X86_MMZONE_64_H
+
+
+#ifdef CONFIG_NUMA
+
+#include <linux/mmdebug.h>
+
+#include <asm/smp.h>
+
+/* Simple perfect hash to map physical addresses to node numbers */
+struct memnode {
+ int shift;
+ unsigned int mapsize;
+ s16 *map;
+ s16 embedded_map[64 - 8];
+} ____cacheline_aligned; /* total size = 128 bytes */
+extern struct memnode memnode;
+#define memnode_shift memnode.shift
+#define memnodemap memnode.map
+#define memnodemapsize memnode.mapsize
+
+extern struct pglist_data *node_data[];
+
+static inline __attribute__((pure)) int phys_to_nid(unsigned long addr)
+{
+ unsigned nid;
+ VIRTUAL_BUG_ON(!memnodemap);
+ nid = memnodemap[addr >> memnode_shift];
+ VIRTUAL_BUG_ON(nid >= MAX_NUMNODES || !node_data[nid]);
+ return nid;
+}
+
+#define NODE_DATA(nid) (node_data[nid])
+
+#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
+#define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \
+ NODE_DATA(nid)->node_spanned_pages)
+
+extern int early_pfn_to_nid(unsigned long pfn);
+
+#ifdef CONFIG_NUMA_EMU
+#define FAKE_NODE_MIN_SIZE (64 * 1024 * 1024)
+#define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL))
+#endif
+
+#endif
+#endif /* _ASM_X86_MMZONE_64_H */