2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * This file contains NUMA specific variables and functions which can
7 * be split away from DISCONTIGMEM and are used on NUMA machines with
9 * 2002/08/07 Erich Focht <efocht@ess.nec.de>
10 * Populate cpu entries in sysfs for non-numa systems as well
11 * Intel Corporation - Ashok Raj
14 #include <linux/config.h>
15 #include <linux/cpu.h>
16 #include <linux/kernel.h>
18 #include <linux/node.h>
19 #include <linux/init.h>
20 #include <linux/bootmem.h>
21 #include <linux/nodemask.h>
22 #include <asm/mmzone.h>
27 static struct node
*sysfs_nodes
;
29 static struct ia64_cpu
*sysfs_cpus
;
31 int arch_register_cpu(int num
)
33 struct node
*parent
= NULL
;
36 parent
= &sysfs_nodes
[cpu_to_node(num
)];
37 #endif /* CONFIG_NUMA */
39 return register_cpu(&sysfs_cpus
[num
].cpu
, num
, parent
);
42 #ifdef CONFIG_HOTPLUG_CPU
44 void arch_unregister_cpu(int num
)
46 struct node
*parent
= NULL
;
49 int node
= cpu_to_node(num
);
50 parent
= &sysfs_nodes
[node
];
51 #endif /* CONFIG_NUMA */
53 return unregister_cpu(&sysfs_cpus
[num
].cpu
, parent
);
55 EXPORT_SYMBOL(arch_register_cpu
);
56 EXPORT_SYMBOL(arch_unregister_cpu
);
57 #endif /*CONFIG_HOTPLUG_CPU*/
60 static int __init
topology_init(void)
65 sysfs_nodes
= kmalloc(sizeof(struct node
) * MAX_NUMNODES
, GFP_KERNEL
);
70 memset(sysfs_nodes
, 0, sizeof(struct node
) * MAX_NUMNODES
);
72 /* MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */
73 for_each_online_node(i
)
74 if ((err
= register_node(&sysfs_nodes
[i
], i
, 0)))
78 sysfs_cpus
= kmalloc(sizeof(struct ia64_cpu
) * NR_CPUS
, GFP_KERNEL
);
83 memset(sysfs_cpus
, 0, sizeof(struct ia64_cpu
) * NR_CPUS
);
85 for_each_present_cpu(i
)
86 if((err
= arch_register_cpu(i
)))
92 __initcall(topology_init
);