diff options
| author | Tony Luck <tony.luck@intel.com> | 2005-11-10 13:38:41 -0500 |
|---|---|---|
| committer | Tony Luck <tony.luck@intel.com> | 2005-11-10 13:38:41 -0500 |
| commit | 4ddccb8eb9d1c57c7dd3838d8328690bf1869145 (patch) | |
| tree | 67843de19158f639bf9cf42268acbf03b03519f7 /arch | |
| parent | cf1d469ec10015f8ced338c00e7944941f816e89 (diff) | |
| parent | 97835245768a638002722a36ba9a3b76d0910f68 (diff) | |
Pull memoryless-node-allocation into release branch
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/ia64/mm/discontig.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index a88cdb7232f8..0f776b032d31 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
| @@ -350,14 +350,12 @@ static void __init initialize_pernode_data(void) | |||
| 350 | * for best. | 350 | * for best. |
| 351 | * @nid: node id | 351 | * @nid: node id |
| 352 | * @pernodesize: size of this node's pernode data | 352 | * @pernodesize: size of this node's pernode data |
| 353 | * @align: alignment to use for this node's pernode data | ||
| 354 | */ | 353 | */ |
| 355 | static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize, | 354 | static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) |
| 356 | unsigned long align) | ||
| 357 | { | 355 | { |
| 358 | void *ptr = NULL; | 356 | void *ptr = NULL; |
| 359 | u8 best = 0xff; | 357 | u8 best = 0xff; |
| 360 | int bestnode = -1, node; | 358 | int bestnode = -1, node, anynode = 0; |
| 361 | 359 | ||
| 362 | for_each_online_node(node) { | 360 | for_each_online_node(node) { |
| 363 | if (node_isset(node, memory_less_mask)) | 361 | if (node_isset(node, memory_less_mask)) |
| @@ -366,13 +364,15 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize, | |||
| 366 | best = node_distance(nid, node); | 364 | best = node_distance(nid, node); |
| 367 | bestnode = node; | 365 | bestnode = node; |
| 368 | } | 366 | } |
| 367 | anynode = node; | ||
| 369 | } | 368 | } |
| 370 | 369 | ||
| 371 | ptr = __alloc_bootmem_node(mem_data[bestnode].pgdat, | 370 | if (bestnode == -1) |
| 372 | pernodesize, align, __pa(MAX_DMA_ADDRESS)); | 371 | bestnode = anynode; |
| 372 | |||
| 373 | ptr = __alloc_bootmem_node(mem_data[bestnode].pgdat, pernodesize, | ||
| 374 | PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); | ||
| 373 | 375 | ||
| 374 | if (!ptr) | ||
| 375 | panic("NO memory for memory less node\n"); | ||
| 376 | return ptr; | 376 | return ptr; |
| 377 | } | 377 | } |
| 378 | 378 | ||
| @@ -413,8 +413,7 @@ static void __init memory_less_nodes(void) | |||
| 413 | 413 | ||
| 414 | for_each_node_mask(node, memory_less_mask) { | 414 | for_each_node_mask(node, memory_less_mask) { |
| 415 | pernodesize = compute_pernodesize(node); | 415 | pernodesize = compute_pernodesize(node); |
| 416 | pernode = memory_less_node_alloc(node, pernodesize, | 416 | pernode = memory_less_node_alloc(node, pernodesize); |
| 417 | (node) ? (node * PERCPU_PAGE_SIZE) : (1024*1024)); | ||
| 418 | fill_pernode(node, __pa(pernode), pernodesize); | 417 | fill_pernode(node, __pa(pernode), pernodesize); |
| 419 | } | 418 | } |
| 420 | 419 | ||
