aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/mm/numa.c35
1 files changed, 11 insertions, 24 deletions
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
index ba7a3055a9fc..30b5d6a1d838 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -254,29 +254,17 @@ static int __init find_min_common_depth(void)
254 return depth; 254 return depth;
255} 255}
256 256
257static int __init get_mem_addr_cells(void) 257static void __init get_n_mem_cells(int *n_addr_cells, int *n_size_cells)
258{ 258{
259 struct device_node *memory = NULL; 259 struct device_node *memory = NULL;
260 int rc;
261 260
262 memory = of_find_node_by_type(memory, "memory"); 261 memory = of_find_node_by_type(memory, "memory");
263 if (!memory) 262 if (memory) {
264 return 0; /* it won't matter */ 263 *n_addr_cells = prom_n_addr_cells(memory);
265 264 *n_size_cells = prom_n_size_cells(memory);
266 rc = prom_n_addr_cells(memory); 265 of_node_put(memory);
267 return rc; 266 }
268} 267 /* if (!memory) we are in trouble, let other code error out */
269
270static int __init get_mem_size_cells(void)
271{
272 struct device_node *memory = NULL;
273 int rc;
274
275 memory = of_find_node_by_type(memory, "memory");
276 if (!memory)
277 return 0; /* it won't matter */
278 rc = prom_n_size_cells(memory);
279 return rc;
280} 268}
281 269
282static unsigned long __init read_n_cells(int n, unsigned int **buf) 270static unsigned long __init read_n_cells(int n, unsigned int **buf)
@@ -386,7 +374,7 @@ static int __init parse_numa_properties(void)
386{ 374{
387 struct device_node *cpu = NULL; 375 struct device_node *cpu = NULL;
388 struct device_node *memory = NULL; 376 struct device_node *memory = NULL;
389 int addr_cells, size_cells; 377 int n_addr_cells, n_size_cells;
390 int max_domain; 378 int max_domain;
391 unsigned long i; 379 unsigned long i;
392 380
@@ -425,8 +413,7 @@ static int __init parse_numa_properties(void)
425 } 413 }
426 } 414 }
427 415
428 addr_cells = get_mem_addr_cells(); 416 get_n_mem_cells(&n_addr_cells, &n_size_cells);
429 size_cells = get_mem_size_cells();
430 memory = NULL; 417 memory = NULL;
431 while ((memory = of_find_node_by_type(memory, "memory")) != NULL) { 418 while ((memory = of_find_node_by_type(memory, "memory")) != NULL) {
432 unsigned long start; 419 unsigned long start;
@@ -443,8 +430,8 @@ static int __init parse_numa_properties(void)
443 ranges = memory->n_addrs; 430 ranges = memory->n_addrs;
444new_range: 431new_range:
445 /* these are order-sensitive, and modify the buffer pointer */ 432 /* these are order-sensitive, and modify the buffer pointer */
446 start = read_n_cells(addr_cells, &memcell_buf); 433 start = read_n_cells(n_addr_cells, &memcell_buf);
447 size = read_n_cells(size_cells, &memcell_buf); 434 size = read_n_cells(n_size_cells, &memcell_buf);
448 435
449 numa_domain = of_node_numa_domain(memory); 436 numa_domain = of_node_numa_domain(memory);
450 437