2
* Populate sysfs with topology information
4
* Written by: Matthew Dobson, IBM Corporation
5
* Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
7
* Copyright (C) 2002, IBM Corp.
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2 of the License, or
14
* (at your option) any later version.
16
* This program is distributed in the hope that it will be useful, but
17
* WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
19
* NON INFRINGEMENT. See the GNU General Public License for more
22
* You should have received a copy of the GNU General Public License
23
* along with this program; if not, write to the Free Software
24
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26
* Send feedback to <colpatch@us.ibm.com>
28
#include <linux/nodemask.h>
29
#include <linux/export.h>
30
#include <linux/mmzone.h>
31
#include <linux/init.h>
32
#include <linux/smp.h>
35
static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);
37
#ifdef CONFIG_HOTPLUG_CPU
38
int __ref arch_register_cpu(int num)
41
* CPU0 cannot be offlined due to several
42
* restrictions and assumptions in kernel. This basically
43
* doesn't add a control file, one cannot attempt to offline
46
* Also certain PCI quirks require not to enable hotplug control
50
per_cpu(cpu_devices, num).cpu.hotpluggable = 1;
52
return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
54
EXPORT_SYMBOL(arch_register_cpu);
56
void arch_unregister_cpu(int num)
58
unregister_cpu(&per_cpu(cpu_devices, num).cpu);
60
EXPORT_SYMBOL(arch_unregister_cpu);
61
#else /* CONFIG_HOTPLUG_CPU */
63
static int __init arch_register_cpu(int num)
65
return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
67
#endif /* CONFIG_HOTPLUG_CPU */
69
static int __init topology_init(void)
74
for_each_online_node(i)
78
for_each_present_cpu(i)
83
subsys_initcall(topology_init);