PageRenderTime 19ms CodeModel.GetById 7ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/ia64/kernel/topology.c

https://bitbucket.org/evzijst/gittest
C | 92 lines | 63 code | 16 blank | 13 comment | 4 complexity | 4c7d5377ba63e57106d507271664572d MD5 | raw file
 1/*
 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
 4 * for more details.
 5 *
 6 * This file contains NUMA specific variables and functions which can
 7 * be split away from DISCONTIGMEM and are used on NUMA machines with
 8 * contiguous memory.
 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
12 */
13
14#include <linux/config.h>
15#include <linux/cpu.h>
16#include <linux/kernel.h>
17#include <linux/mm.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>
23#include <asm/numa.h>
24#include <asm/cpu.h>
25
26#ifdef CONFIG_NUMA
27static struct node *sysfs_nodes;
28#endif
29static struct ia64_cpu *sysfs_cpus;
30
31int arch_register_cpu(int num)
32{
33	struct node *parent = NULL;
34	
35#ifdef CONFIG_NUMA
36	parent = &sysfs_nodes[cpu_to_node(num)];
37#endif /* CONFIG_NUMA */
38
39	return register_cpu(&sysfs_cpus[num].cpu, num, parent);
40}
41
42#ifdef CONFIG_HOTPLUG_CPU
43
44void arch_unregister_cpu(int num)
45{
46	struct node *parent = NULL;
47
48#ifdef CONFIG_NUMA
49	int node = cpu_to_node(num);
50	parent = &sysfs_nodes[node];
51#endif /* CONFIG_NUMA */
52
53	return unregister_cpu(&sysfs_cpus[num].cpu, parent);
54}
55EXPORT_SYMBOL(arch_register_cpu);
56EXPORT_SYMBOL(arch_unregister_cpu);
57#endif /*CONFIG_HOTPLUG_CPU*/
58
59
60static int __init topology_init(void)
61{
62	int i, err = 0;
63
64#ifdef CONFIG_NUMA
65	sysfs_nodes = kmalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL);
66	if (!sysfs_nodes) {
67		err = -ENOMEM;
68		goto out;
69	}
70	memset(sysfs_nodes, 0, sizeof(struct node) * MAX_NUMNODES);
71
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)))
75			goto out;
76#endif
77
78	sysfs_cpus = kmalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL);
79	if (!sysfs_cpus) {
80		err = -ENOMEM;
81		goto out;
82	}
83	memset(sysfs_cpus, 0, sizeof(struct ia64_cpu) * NR_CPUS);
84
85	for_each_present_cpu(i)
86		if((err = arch_register_cpu(i)))
87			goto out;
88out:
89	return err;
90}
91
92__initcall(topology_init);