diff options
Diffstat (limited to 'arch/x86/mm/numa.c')
-rw-r--r-- | arch/x86/mm/numa.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index fb682108f4dc..3f35b48d1d9d 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
@@ -722,22 +722,19 @@ void __init x86_numa_init(void) | |||
722 | numa_init(dummy_numa_init); | 722 | numa_init(dummy_numa_init); |
723 | } | 723 | } |
724 | 724 | ||
725 | static __init int find_near_online_node(int node) | 725 | static void __init init_memory_less_node(int nid) |
726 | { | 726 | { |
727 | int n, val; | 727 | unsigned long zones_size[MAX_NR_ZONES] = {0}; |
728 | int min_val = INT_MAX; | 728 | unsigned long zholes_size[MAX_NR_ZONES] = {0}; |
729 | int best_node = -1; | ||
730 | 729 | ||
731 | for_each_online_node(n) { | 730 | /* Allocate and initialize node data. Memory-less node is now online.*/ |
732 | val = node_distance(node, n); | 731 | alloc_node_data(nid); |
732 | free_area_init_node(nid, zones_size, 0, zholes_size); | ||
733 | 733 | ||
734 | if (val < min_val) { | 734 | /* |
735 | min_val = val; | 735 | * All zonelists will be built later in start_kernel() after per cpu |
736 | best_node = n; | 736 | * areas are initialized. |
737 | } | 737 | */ |
738 | } | ||
739 | |||
740 | return best_node; | ||
741 | } | 738 | } |
742 | 739 | ||
743 | /* | 740 | /* |
@@ -766,8 +763,10 @@ void __init init_cpu_to_node(void) | |||
766 | 763 | ||
767 | if (node == NUMA_NO_NODE) | 764 | if (node == NUMA_NO_NODE) |
768 | continue; | 765 | continue; |
766 | |||
769 | if (!node_online(node)) | 767 | if (!node_online(node)) |
770 | node = find_near_online_node(node); | 768 | init_memory_less_node(node); |
769 | |||
771 | numa_set_node(cpu, node); | 770 | numa_set_node(cpu, node); |
772 | } | 771 | } |
773 | } | 772 | } |