summaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b54c5cbf0200..5a234b64f3ac 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -4187,10 +4187,23 @@ int __meminit __early_pfn_to_nid(unsigned long pfn)
4187{ 4187{
4188 unsigned long start_pfn, end_pfn; 4188 unsigned long start_pfn, end_pfn;
4189 int i, nid; 4189 int i, nid;
4190 /*
4191 * NOTE: The following SMP-unsafe globals are only used early in boot
4192 * when the kernel is running single-threaded.
4193 */
4194 static unsigned long __meminitdata last_start_pfn, last_end_pfn;
4195 static int __meminitdata last_nid;
4196
4197 if (last_start_pfn <= pfn && pfn < last_end_pfn)
4198 return last_nid;
4190 4199
4191 for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) 4200 for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid)
4192 if (start_pfn <= pfn && pfn < end_pfn) 4201 if (start_pfn <= pfn && pfn < end_pfn) {
4202 last_start_pfn = start_pfn;
4203 last_end_pfn = end_pfn;
4204 last_nid = nid;
4193 return nid; 4205 return nid;
4206 }
4194 /* This is a memory hole */ 4207 /* This is a memory hole */
4195 return -1; 4208 return -1;
4196} 4209}