|
@@ -368,6 +368,19 @@ static void __init bootmem_init(void)
|
|
end = PFN_DOWN(boot_mem_map.map[i].addr
|
|
end = PFN_DOWN(boot_mem_map.map[i].addr
|
|
+ boot_mem_map.map[i].size);
|
|
+ boot_mem_map.map[i].size);
|
|
|
|
|
|
|
|
+#ifndef CONFIG_HIGHMEM
|
|
|
|
+ /*
|
|
|
|
+ * Skip highmem here so we get an accurate max_low_pfn if low
|
|
|
|
+ * memory stops short of high memory.
|
|
|
|
+ * If the region overlaps HIGHMEM_START, end is clipped so
|
|
|
|
+ * max_pfn excludes the highmem portion.
|
|
|
|
+ */
|
|
|
|
+ if (start >= PFN_DOWN(HIGHMEM_START))
|
|
|
|
+ continue;
|
|
|
|
+ if (end > PFN_DOWN(HIGHMEM_START))
|
|
|
|
+ end = PFN_DOWN(HIGHMEM_START);
|
|
|
|
+#endif
|
|
|
|
+
|
|
if (end > max_low_pfn)
|
|
if (end > max_low_pfn)
|
|
max_low_pfn = end;
|
|
max_low_pfn = end;
|
|
if (start < min_low_pfn)
|
|
if (start < min_low_pfn)
|