Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
kernel
topology.c
Go to the documentation of this file.
1
/*
2
* Populate sysfs with topology information
3
*
4
* Written by: Matthew Dobson, IBM Corporation
5
* Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
6
*
7
* Copyright (C) 2002, IBM Corp.
8
*
9
* All rights reserved.
10
*
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.
15
*
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
20
* details.
21
*
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.
25
*
26
* Send feedback to <
[email protected]
>
27
*/
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
>
33
#include <asm/cpu.h>
34
35
static
DEFINE_PER_CPU
(
struct
x86_cpu
, cpu_devices);
36
37
#ifdef CONFIG_HOTPLUG_CPU
38
int
__ref
arch_register_cpu(
int
num)
39
{
40
/*
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
44
* BSP.
45
*
46
* Also certain PCI quirks require not to enable hotplug control
47
* for all CPU's.
48
*/
49
if
(num)
50
per_cpu
(cpu_devices, num).cpu.hotpluggable = 1;
51
52
return
register_cpu
(&
per_cpu
(cpu_devices, num).
cpu
, num);
53
}
54
EXPORT_SYMBOL
(arch_register_cpu);
55
56
void
arch_unregister_cpu(
int
num)
57
{
58
unregister_cpu(&
per_cpu
(cpu_devices, num).
cpu
);
59
}
60
EXPORT_SYMBOL
(arch_unregister_cpu);
61
#else
/* CONFIG_HOTPLUG_CPU */
62
63
static
int
__init
arch_register_cpu(
int
num)
64
{
65
return
register_cpu
(&
per_cpu
(cpu_devices, num).
cpu
, num);
66
}
67
#endif
/* CONFIG_HOTPLUG_CPU */
68
69
static
int
__init
topology_init(
void
)
70
{
71
int
i
;
72
73
#ifdef CONFIG_NUMA
74
for_each_online_node
(i)
75
register_one_node
(i);
76
#endif
77
78
for_each_present_cpu
(i)
79
arch_register_cpu(i);
80
81
return
0;
82
}
83
subsys_initcall
(topology_init);
Generated on Thu Jan 10 2013 12:56:25 for Linux Kernel by
1.8.2