diff options
Diffstat (limited to 'arch/ia64/mm/numa.c')
-rw-r--r-- | arch/ia64/mm/numa.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c index 3efea7d0a351..4248492b9321 100644 --- a/arch/ia64/mm/numa.c +++ b/arch/ia64/mm/numa.c | |||
@@ -61,18 +61,36 @@ paddr_to_nid(unsigned long paddr) | |||
61 | int __meminit __early_pfn_to_nid(unsigned long pfn) | 61 | int __meminit __early_pfn_to_nid(unsigned long pfn) |
62 | { | 62 | { |
63 | int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; | 63 | int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; |
64 | /* | ||
65 | * NOTE: The following SMP-unsafe globals are only used early in boot | ||
66 | * when the kernel is running single-threaded. | ||
67 | */ | ||
68 | static int __meminitdata last_ssec, last_esec; | ||
69 | static int __meminitdata last_nid; | ||
70 | |||
71 | if (section >= last_ssec && section < last_esec) | ||
72 | return last_nid; | ||
64 | 73 | ||
65 | for (i = 0; i < num_node_memblks; i++) { | 74 | for (i = 0; i < num_node_memblks; i++) { |
66 | ssec = node_memblk[i].start_paddr >> PA_SECTION_SHIFT; | 75 | ssec = node_memblk[i].start_paddr >> PA_SECTION_SHIFT; |
67 | esec = (node_memblk[i].start_paddr + node_memblk[i].size + | 76 | esec = (node_memblk[i].start_paddr + node_memblk[i].size + |
68 | ((1L << PA_SECTION_SHIFT) - 1)) >> PA_SECTION_SHIFT; | 77 | ((1L << PA_SECTION_SHIFT) - 1)) >> PA_SECTION_SHIFT; |
69 | if (section >= ssec && section < esec) | 78 | if (section >= ssec && section < esec) { |
79 | last_ssec = ssec; | ||
80 | last_esec = esec; | ||
81 | last_nid = node_memblk[i].nid; | ||
70 | return node_memblk[i].nid; | 82 | return node_memblk[i].nid; |
83 | } | ||
71 | } | 84 | } |
72 | 85 | ||
73 | return -1; | 86 | return -1; |
74 | } | 87 | } |
75 | 88 | ||
89 | void __cpuinit numa_clear_node(int cpu) | ||
90 | { | ||
91 | unmap_cpu_from_node(cpu, NUMA_NO_NODE); | ||
92 | } | ||
93 | |||
76 | #ifdef CONFIG_MEMORY_HOTPLUG | 94 | #ifdef CONFIG_MEMORY_HOTPLUG |
77 | /* | 95 | /* |
78 | * SRAT information is stored in node_memblk[], then we can use SRAT | 96 | * SRAT information is stored in node_memblk[], then we can use SRAT |