diff -upN reference/fs/proc/proc_misc.c current/fs/proc/proc_misc.c
--- reference/fs/proc/proc_misc.c	2004-05-09 13:43:52.000000000 -0700
+++ current/fs/proc/proc_misc.c	2004-05-09 13:43:53.000000000 -0700
@@ -342,6 +342,71 @@ static struct file_operations proc_modul
 };
 #endif
 
+#ifdef CONFIG_NUMA
+#define K(x) ((x) << (PAGE_SHIFT - 10))
+static int show_meminfo_numa (struct seq_file *m, void *v)
+{
+	int *d = v;
+	int nid = *d;
+	struct sysinfo i;
+	si_meminfo_node(&i, nid);
+	seq_printf(m, "\n"
+			"Node %d MemTotal:     %8lu kB\n"
+			"Node %d MemFree:      %8lu kB\n"
+			"Node %d MemUsed:      %8lu kB\n"
+			"Node %d HighTotal:    %8lu kB\n"
+			"Node %d HighFree:     %8lu kB\n"
+			"Node %d LowTotal:     %8lu kB\n"
+			"Node %d LowFree:      %8lu kB\n",
+			nid, K(i.totalram),
+			nid, K(i.freeram),
+			nid, K(i.totalram-i.freeram),
+			nid, K(i.totalhigh),
+			nid, K(i.freehigh),
+			nid, K(i.totalram-i.totalhigh),
+			nid, K(i.freeram-i.freehigh));
+
+	return 0;
+}
+#undef K 
+
+extern struct seq_operations meminfo_numa_op;
+static int meminfo_numa_open(struct inode *inode, struct file *file)
+{
+	return seq_open(file,&meminfo_numa_op);
+}
+
+static struct file_operations proc_meminfo_numa_operations = {
+        open:           meminfo_numa_open,
+        read:           seq_read,
+        llseek:         seq_lseek,
+        release:        seq_release,
+};
+
+static void *meminfo_numa_start(struct seq_file *m, loff_t *pos)
+{
+	return  *pos < numnodes ? pos : NULL;
+}
+
+static void *meminfo_numa_next(struct seq_file *m, void *v, loff_t *pos)
+{
+	++*pos;
+	return meminfo_numa_start(m, pos);
+}
+
+static void meminfo_numa_stop(struct seq_file *m, void *v)
+{
+}
+
+struct seq_operations meminfo_numa_op = {
+	.start = meminfo_numa_start,
+	.next  = meminfo_numa_next,
+	.stop  = meminfo_numa_stop,
+	.show  = show_meminfo_numa,
+};
+
+#endif
+
 extern struct seq_operations slabinfo_op;
 extern ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *);
 static int slabinfo_open(struct inode *inode, struct file *file)
@@ -728,6 +793,9 @@ void __init proc_misc_init(void)
 #ifdef CONFIG_MODULES
 	create_seq_entry("modules", 0, &proc_modules_operations);
 #endif
+#ifdef CONFIG_NUMA
+	create_seq_entry("meminfo.numa",0,&proc_meminfo_numa_operations);
+#endif
 #ifdef CONFIG_PROC_KCORE
 	proc_root_kcore = create_proc_entry("kcore", S_IRUSR, NULL);
 	if (proc_root_kcore) {