aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/numa.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/mm/numa.c')
-rw-r--r--arch/x86/mm/numa.c27
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
725static __init int find_near_online_node(int node) 725static 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}