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
include
asm
topology.h
Go to the documentation of this file.
1
/*
2
* Written by: Matthew Dobson, IBM Corporation
3
*
4
* Copyright (C) 2002, IBM Corp.
5
*
6
* All rights reserved.
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
16
* NON INFRINGEMENT. See the GNU General Public License for more
17
* details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
*
23
* Send feedback to <
[email protected]
>
24
*/
25
#ifndef _ASM_X86_TOPOLOGY_H
26
#define _ASM_X86_TOPOLOGY_H
27
28
#ifdef CONFIG_X86_32
29
# ifdef CONFIG_X86_HT
30
# define ENABLE_TOPO_DEFINES
31
# endif
32
#else
33
# ifdef CONFIG_SMP
34
# define ENABLE_TOPO_DEFINES
35
# endif
36
#endif
37
38
/*
39
* to preserve the visibility of NUMA_NO_NODE definition,
40
* moved to there from here. May be used independent of
41
* CONFIG_NUMA.
42
*/
43
#include <
linux/numa.h
>
44
45
#ifdef CONFIG_NUMA
46
#include <
linux/cpumask.h
>
47
48
#include <
asm/mpspec.h
>
49
50
/* Mappings between logical cpu number and node number */
51
DECLARE_EARLY_PER_CPU
(
int
, x86_cpu_to_node_map);
52
53
#ifdef CONFIG_DEBUG_PER_CPU_MAPS
54
/*
55
* override generic percpu implementation of cpu_to_node
56
*/
57
extern
int
__cpu_to_node(
int
cpu
);
58
#define cpu_to_node __cpu_to_node
59
60
extern
int
early_cpu_to_node(
int
cpu
);
61
62
#else
/* !CONFIG_DEBUG_PER_CPU_MAPS */
63
64
/* Same function but used if called before per_cpu areas are setup */
65
static
inline
int
early_cpu_to_node(
int
cpu
)
66
{
67
return
early_per_cpu
(x86_cpu_to_node_map, cpu);
68
}
69
70
#endif
/* !CONFIG_DEBUG_PER_CPU_MAPS */
71
72
/* Mappings between node number and cpus on that node. */
73
extern
cpumask_var_t
node_to_cpumask_map
[
MAX_NUMNODES
];
74
75
#ifdef CONFIG_DEBUG_PER_CPU_MAPS
76
extern
const
struct
cpumask
*
cpumask_of_node
(
int
node
);
77
#else
78
/* Returns a pointer to the cpumask of CPUs on Node 'node'. */
79
static
inline
const
struct
cpumask
*
cpumask_of_node
(
int
node
)
80
{
81
return
node_to_cpumask_map
[
node
];
82
}
83
#endif
84
85
extern
void
setup_node_to_cpumask_map
(
void
);
86
87
/*
88
* Returns the number of the node containing Node 'node'. This
89
* architecture is flat, so it is a pretty simple function!
90
*/
91
#define parent_node(node) (node)
92
93
#define pcibus_to_node(bus) __pcibus_to_node(bus)
94
95
extern
int
__node_distance
(
int
,
int
);
96
#define node_distance(a, b) __node_distance(a, b)
97
98
#else
/* !CONFIG_NUMA */
99
100
static
inline
int
numa_node_id
(
void
)
101
{
102
return
0;
103
}
104
/*
105
* indicate override:
106
*/
107
#define numa_node_id numa_node_id
108
109
static
inline
int
early_cpu_to_node(
int
cpu
)
110
{
111
return
0;
112
}
113
114
static
inline
void
setup_node_to_cpumask_map
(
void
) { }
115
116
#endif
117
118
#include <
asm-generic/topology.h
>
119
120
extern
const
struct
cpumask
*
cpu_coregroup_mask
(
int
cpu
);
121
122
#ifdef ENABLE_TOPO_DEFINES
123
#define topology_physical_package_id(cpu) (cpu_data(cpu).phys_proc_id)
124
#define topology_core_id(cpu) (cpu_data(cpu).cpu_core_id)
125
#define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu))
126
#define topology_thread_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu))
127
128
/* indicates that pointers to the topology cpumask_t maps are valid */
129
#define arch_provides_topology_pointers yes
130
#endif
131
132
static
inline
void
arch_fix_phys_package_id
(
int
num,
u32
slot
)
133
{
134
}
135
136
struct
pci_bus
;
137
void
x86_pci_root_bus_resources
(
int
bus
,
struct
list_head
*
resources
);
138
139
#ifdef CONFIG_SMP
140
#define mc_capable() ((boot_cpu_data.x86_max_cores > 1) && \
141
(cpumask_weight(cpu_core_mask(0)) != nr_cpu_ids))
142
#define smt_capable() (smp_num_siblings > 1)
143
#endif
144
145
#ifdef CONFIG_NUMA
146
extern
int
get_mp_bus_to_node(
int
busnum
);
147
extern
void
set_mp_bus_to_node(
int
busnum
,
int
node
);
148
#else
149
static
inline
int
get_mp_bus_to_node(
int
busnum
)
150
{
151
return
0;
152
}
153
static
inline
void
set_mp_bus_to_node(
int
busnum
,
int
node
)
154
{
155
}
156
#endif
157
158
#endif
/* _ASM_X86_TOPOLOGY_H */
Generated on Thu Jan 10 2013 12:50:43 for Linux Kernel by
1.8.2