|
@@ -34,17 +34,32 @@
|
|
|
|
|
|
/*
|
|
|
* This is how much memory *in addition to the memory covered up to
|
|
|
- * and including _end* we need mapped initially. We need one bit for
|
|
|
- * each possible page, but only in low memory, which means
|
|
|
- * 2^32/4096/8 = 128K worst case (4G/4G split.)
|
|
|
+ * and including _end* we need mapped initially.
|
|
|
+ * We need:
|
|
|
+ * - one bit for each possible page, but only in low memory, which means
|
|
|
+ * 2^32/4096/8 = 128K worst case (4G/4G split.)
|
|
|
+ * - enough space to map all low memory, which means
|
|
|
+ * (2^32/4096) / 1024 pages (worst case, non PAE)
|
|
|
+ * (2^32/4096) / 512 + 4 pages (worst case for PAE)
|
|
|
+ * - a few pages for allocator use before the kernel pagetable has
|
|
|
+ * been set up
|
|
|
*
|
|
|
* Modulo rounding, each megabyte assigned here requires a kilobyte of
|
|
|
* memory, which is currently unreclaimed.
|
|
|
*
|
|
|
* This should be a multiple of a page.
|
|
|
*/
|
|
|
-#define INIT_MAP_BEYOND_END (128*1024)
|
|
|
+LOW_PAGES = 1<<(32-PAGE_SHIFT_asm)
|
|
|
|
|
|
+#if PTRS_PER_PMD > 1
|
|
|
+PAGE_TABLE_SIZE = (LOW_PAGES / PTRS_PER_PMD) + PTRS_PER_PGD
|
|
|
+#else
|
|
|
+PAGE_TABLE_SIZE = (LOW_PAGES / PTRS_PER_PGD)
|
|
|
+#endif
|
|
|
+BOOTBITMAP_SIZE = LOW_PAGES / 8
|
|
|
+ALLOCATOR_SLOP = 4
|
|
|
+
|
|
|
+INIT_MAP_BEYOND_END = BOOTBITMAP_SIZE + (PAGE_TABLE_SIZE + ALLOCATOR_SLOP)*PAGE_SIZE_asm
|
|
|
|
|
|
/*
|
|
|
* 32-bit kernel entrypoint; only used by the boot CPU. On entry,
|