diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-12-26 06:53:38 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-12-26 06:53:38 -0500 |
commit | 393d68fb9929817cde7ab31c82d66fcb28ad35fc (patch) | |
tree | 8174698205c9a5ff8f063d0bc0f5a6b80d3b1a5f /arch | |
parent | d62720ade82c5e5b8f9585e5ed02c89573ebf111 (diff) |
cpumask: x86: Introduce cpumask_of_{node,pcibus} to replace {node,pcibus}_to_cpumask
Impact: New APIs
The old node_to_cpumask/node_to_pcibus returned a cpumask_t: these
return a pointer to a struct cpumask. Part of removing cpumasks from
the stack.
Also makes __pcibus_to_node take a const pointer.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/include/asm/pci.h | 10 | ||||
-rw-r--r-- | arch/x86/include/asm/topology.h | 35 | ||||
-rw-r--r-- | arch/x86/kernel/setup_percpu.c | 8 |
3 files changed, 35 insertions, 18 deletions
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h index 875b38edf193..52d80d3d94f3 100644 --- a/arch/x86/include/asm/pci.h +++ b/arch/x86/include/asm/pci.h | |||
@@ -98,9 +98,9 @@ static inline void early_quirks(void) { } | |||
98 | 98 | ||
99 | #ifdef CONFIG_NUMA | 99 | #ifdef CONFIG_NUMA |
100 | /* Returns the node based on pci bus */ | 100 | /* Returns the node based on pci bus */ |
101 | static inline int __pcibus_to_node(struct pci_bus *bus) | 101 | static inline int __pcibus_to_node(const struct pci_bus *bus) |
102 | { | 102 | { |
103 | struct pci_sysdata *sd = bus->sysdata; | 103 | const struct pci_sysdata *sd = bus->sysdata; |
104 | 104 | ||
105 | return sd->node; | 105 | return sd->node; |
106 | } | 106 | } |
@@ -109,6 +109,12 @@ static inline cpumask_t __pcibus_to_cpumask(struct pci_bus *bus) | |||
109 | { | 109 | { |
110 | return node_to_cpumask(__pcibus_to_node(bus)); | 110 | return node_to_cpumask(__pcibus_to_node(bus)); |
111 | } | 111 | } |
112 | |||
113 | static inline const struct cpumask * | ||
114 | cpumask_of_pcibus(const struct pci_bus *bus) | ||
115 | { | ||
116 | return cpumask_of_node(__pcibus_to_node(bus)); | ||
117 | } | ||
112 | #endif | 118 | #endif |
113 | 119 | ||
114 | #endif /* _ASM_X86_PCI_H */ | 120 | #endif /* _ASM_X86_PCI_H */ |
diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h index ff386ff50ed7..45da5dc50fc8 100644 --- a/arch/x86/include/asm/topology.h +++ b/arch/x86/include/asm/topology.h | |||
@@ -61,13 +61,19 @@ static inline int cpu_to_node(int cpu) | |||
61 | * | 61 | * |
62 | * Side note: this function creates the returned cpumask on the stack | 62 | * Side note: this function creates the returned cpumask on the stack |
63 | * so with a high NR_CPUS count, excessive stack space is used. The | 63 | * so with a high NR_CPUS count, excessive stack space is used. The |
64 | * node_to_cpumask_ptr function should be used whenever possible. | 64 | * cpumask_of_node function should be used whenever possible. |
65 | */ | 65 | */ |
66 | static inline cpumask_t node_to_cpumask(int node) | 66 | static inline cpumask_t node_to_cpumask(int node) |
67 | { | 67 | { |
68 | return node_to_cpumask_map[node]; | 68 | return node_to_cpumask_map[node]; |
69 | } | 69 | } |
70 | 70 | ||
71 | /* Returns a bitmask of CPUs on Node 'node'. */ | ||
72 | static inline const struct cpumask *cpumask_of_node(int node) | ||
73 | { | ||
74 | return &node_to_cpumask_map[node]; | ||
75 | } | ||
76 | |||
71 | #else /* CONFIG_X86_64 */ | 77 | #else /* CONFIG_X86_64 */ |
72 | 78 | ||
73 | /* Mappings between node number and cpus on that node. */ | 79 | /* Mappings between node number and cpus on that node. */ |
@@ -82,7 +88,7 @@ DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map); | |||
82 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | 88 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS |
83 | extern int cpu_to_node(int cpu); | 89 | extern int cpu_to_node(int cpu); |
84 | extern int early_cpu_to_node(int cpu); | 90 | extern int early_cpu_to_node(int cpu); |
85 | extern const cpumask_t *_node_to_cpumask_ptr(int node); | 91 | extern const cpumask_t *cpumask_of_node(int node); |
86 | extern cpumask_t node_to_cpumask(int node); | 92 | extern cpumask_t node_to_cpumask(int node); |
87 | 93 | ||
88 | #else /* !CONFIG_DEBUG_PER_CPU_MAPS */ | 94 | #else /* !CONFIG_DEBUG_PER_CPU_MAPS */ |
@@ -103,7 +109,7 @@ static inline int early_cpu_to_node(int cpu) | |||
103 | } | 109 | } |
104 | 110 | ||
105 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ | 111 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ |
106 | static inline const cpumask_t *_node_to_cpumask_ptr(int node) | 112 | static inline const cpumask_t *cpumask_of_node(int node) |
107 | { | 113 | { |
108 | return &node_to_cpumask_map[node]; | 114 | return &node_to_cpumask_map[node]; |
109 | } | 115 | } |
@@ -116,12 +122,15 @@ static inline cpumask_t node_to_cpumask(int node) | |||
116 | 122 | ||
117 | #endif /* !CONFIG_DEBUG_PER_CPU_MAPS */ | 123 | #endif /* !CONFIG_DEBUG_PER_CPU_MAPS */ |
118 | 124 | ||
119 | /* Replace default node_to_cpumask_ptr with optimized version */ | 125 | /* |
126 | * Replace default node_to_cpumask_ptr with optimized version | ||
127 | * Deprecated: use "const struct cpumask *mask = cpumask_of_node(node)" | ||
128 | */ | ||
120 | #define node_to_cpumask_ptr(v, node) \ | 129 | #define node_to_cpumask_ptr(v, node) \ |
121 | const cpumask_t *v = _node_to_cpumask_ptr(node) | 130 | const cpumask_t *v = cpumask_of_node(node) |
122 | 131 | ||
123 | #define node_to_cpumask_ptr_next(v, node) \ | 132 | #define node_to_cpumask_ptr_next(v, node) \ |
124 | v = _node_to_cpumask_ptr(node) | 133 | v = cpumask_of_node(node) |
125 | 134 | ||
126 | #endif /* CONFIG_X86_64 */ | 135 | #endif /* CONFIG_X86_64 */ |
127 | 136 | ||
@@ -187,7 +196,7 @@ extern int __node_distance(int, int); | |||
187 | #define cpu_to_node(cpu) 0 | 196 | #define cpu_to_node(cpu) 0 |
188 | #define early_cpu_to_node(cpu) 0 | 197 | #define early_cpu_to_node(cpu) 0 |
189 | 198 | ||
190 | static inline const cpumask_t *_node_to_cpumask_ptr(int node) | 199 | static inline const cpumask_t *cpumask_of_node(int node) |
191 | { | 200 | { |
192 | return &cpu_online_map; | 201 | return &cpu_online_map; |
193 | } | 202 | } |
@@ -200,12 +209,15 @@ static inline int node_to_first_cpu(int node) | |||
200 | return first_cpu(cpu_online_map); | 209 | return first_cpu(cpu_online_map); |
201 | } | 210 | } |
202 | 211 | ||
203 | /* Replace default node_to_cpumask_ptr with optimized version */ | 212 | /* |
213 | * Replace default node_to_cpumask_ptr with optimized version | ||
214 | * Deprecated: use "const struct cpumask *mask = cpumask_of_node(node)" | ||
215 | */ | ||
204 | #define node_to_cpumask_ptr(v, node) \ | 216 | #define node_to_cpumask_ptr(v, node) \ |
205 | const cpumask_t *v = _node_to_cpumask_ptr(node) | 217 | const cpumask_t *v = cpumask_of_node(node) |
206 | 218 | ||
207 | #define node_to_cpumask_ptr_next(v, node) \ | 219 | #define node_to_cpumask_ptr_next(v, node) \ |
208 | v = _node_to_cpumask_ptr(node) | 220 | v = cpumask_of_node(node) |
209 | #endif | 221 | #endif |
210 | 222 | ||
211 | #include <asm-generic/topology.h> | 223 | #include <asm-generic/topology.h> |
@@ -214,8 +226,7 @@ static inline int node_to_first_cpu(int node) | |||
214 | /* Returns the number of the first CPU on Node 'node'. */ | 226 | /* Returns the number of the first CPU on Node 'node'. */ |
215 | static inline int node_to_first_cpu(int node) | 227 | static inline int node_to_first_cpu(int node) |
216 | { | 228 | { |
217 | node_to_cpumask_ptr(mask, node); | 229 | return cpumask_first(cpumask_of_node(node)); |
218 | return first_cpu(*mask); | ||
219 | } | 230 | } |
220 | #endif | 231 | #endif |
221 | 232 | ||
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index 1c2084291f97..8e8b1193add5 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
@@ -334,25 +334,25 @@ static const cpumask_t cpu_mask_none; | |||
334 | /* | 334 | /* |
335 | * Returns a pointer to the bitmask of CPUs on Node 'node'. | 335 | * Returns a pointer to the bitmask of CPUs on Node 'node'. |
336 | */ | 336 | */ |
337 | const cpumask_t *_node_to_cpumask_ptr(int node) | 337 | const cpumask_t *cpumask_of_node(int node) |
338 | { | 338 | { |
339 | if (node_to_cpumask_map == NULL) { | 339 | if (node_to_cpumask_map == NULL) { |
340 | printk(KERN_WARNING | 340 | printk(KERN_WARNING |
341 | "_node_to_cpumask_ptr(%d): no node_to_cpumask_map!\n", | 341 | "cpumask_of_node(%d): no node_to_cpumask_map!\n", |
342 | node); | 342 | node); |
343 | dump_stack(); | 343 | dump_stack(); |
344 | return (const cpumask_t *)&cpu_online_map; | 344 | return (const cpumask_t *)&cpu_online_map; |
345 | } | 345 | } |
346 | if (node >= nr_node_ids) { | 346 | if (node >= nr_node_ids) { |
347 | printk(KERN_WARNING | 347 | printk(KERN_WARNING |
348 | "_node_to_cpumask_ptr(%d): node > nr_node_ids(%d)\n", | 348 | "cpumask_of_node(%d): node > nr_node_ids(%d)\n", |
349 | node, nr_node_ids); | 349 | node, nr_node_ids); |
350 | dump_stack(); | 350 | dump_stack(); |
351 | return &cpu_mask_none; | 351 | return &cpu_mask_none; |
352 | } | 352 | } |
353 | return &node_to_cpumask_map[node]; | 353 | return &node_to_cpumask_map[node]; |
354 | } | 354 | } |
355 | EXPORT_SYMBOL(_node_to_cpumask_ptr); | 355 | EXPORT_SYMBOL(cpumask_of_node); |
356 | 356 | ||
357 | /* | 357 | /* |
358 | * Returns a bitmask of CPUs on Node 'node'. | 358 | * Returns a bitmask of CPUs on Node 'node'. |