|
@@ -418,11 +418,25 @@ static int __init numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
|
|
|
done:
|
|
|
if (!num_nodes)
|
|
|
return -1;
|
|
|
- /* Fill remainder of system RAM with a final node, if appropriate. */
|
|
|
+ /* Fill remainder of system RAM, if appropriate. */
|
|
|
if (addr < max_addr) {
|
|
|
- setup_node_range(num_nodes, nodes, &addr, max_addr - addr,
|
|
|
- max_addr);
|
|
|
- num_nodes++;
|
|
|
+ switch (*(cmdline - 1)) {
|
|
|
+ case '*':
|
|
|
+ /* Split remaining nodes into coeff chunks */
|
|
|
+ if (coeff <= 0)
|
|
|
+ break;
|
|
|
+ num_nodes += split_nodes_equally(nodes, &addr, max_addr,
|
|
|
+ num_nodes, coeff);
|
|
|
+ break;
|
|
|
+ case ',':
|
|
|
+ /* Do not allocate remaining system RAM */
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ /* Give one final node */
|
|
|
+ setup_node_range(num_nodes, nodes, &addr,
|
|
|
+ max_addr - addr, max_addr);
|
|
|
+ num_nodes++;
|
|
|
+ }
|
|
|
}
|
|
|
out:
|
|
|
memnode_shift = compute_hash_shift(nodes, num_nodes);
|