aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/mm
diff options
context:
space:
mode:
authorDavid Rientjes <rientjes@google.com>2007-05-02 13:27:09 -0400
committerAndi Kleen <andi@basil.nowhere.org>2007-05-02 13:27:09 -0400
commit14694d736bb66d0ec250d05c81c6e98a19c229c6 (patch)
tree76e752f310859c9904ee772068b2915b138e6572 /arch/x86_64/mm
parent8b8ca80e192b10eecc01fc44a2902510af86f73b (diff)
[PATCH] x86-64: split remaining fake nodes equally
Extends the numa=fake x86_64 command-line option to split the remaining system memory into equal-sized nodes. For example: numa=fake=2*512,4* gives two 512M nodes and the remaining system memory is split into four approximately equal chunks. This is beneficial for systems where the exact size of RAM is unknown or not necessarily relevant, but the granularity with which nodes shall be allocated is known. Cc: Andi Kleen <ak@suse.de> Signed-off-by: David Rientjes <rientjes@google.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Paul Jackson <pj@sgi.com> Cc: Christoph Lameter <clameter@engr.sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'arch/x86_64/mm')
-rw-r--r--arch/x86_64/mm/numa.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c
index c55936bc6be6..0ae2d9d5d7ea 100644
--- a/arch/x86_64/mm/numa.c
+++ b/arch/x86_64/mm/numa.c
@@ -418,11 +418,25 @@ static int __init numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
418done: 418done:
419 if (!num_nodes) 419 if (!num_nodes)
420 return -1; 420 return -1;
421 /* Fill remainder of system RAM with a final node, if appropriate. */ 421 /* Fill remainder of system RAM, if appropriate. */
422 if (addr < max_addr) { 422 if (addr < max_addr) {
423 setup_node_range(num_nodes, nodes, &addr, max_addr - addr, 423 switch (*(cmdline - 1)) {
424 max_addr); 424 case '*':
425 num_nodes++; 425 /* Split remaining nodes into coeff chunks */
426 if (coeff <= 0)
427 break;
428 num_nodes += split_nodes_equally(nodes, &addr, max_addr,
429 num_nodes, coeff);
430 break;
431 case ',':
432 /* Do not allocate remaining system RAM */
433 break;
434 default:
435 /* Give one final node */
436 setup_node_range(num_nodes, nodes, &addr,
437 max_addr - addr, max_addr);
438 num_nodes++;
439 }
426 } 440 }
427out: 441out:
428 memnode_shift = compute_hash_shift(nodes, num_nodes); 442 memnode_shift = compute_hash_shift(nodes, num_nodes);