| .. | .. |
|---|
| 40 | 40 | #ifdef CONFIG_X86_64 |
|---|
| 41 | 41 | # define BOOT_STACK_SIZE 0x4000 |
|---|
| 42 | 42 | |
|---|
| 43 | | -# define BOOT_INIT_PGT_SIZE (6*4096) |
|---|
| 44 | | -# ifdef CONFIG_RANDOMIZE_BASE |
|---|
| 45 | 43 | /* |
|---|
| 46 | | - * Assuming all cross the 512GB boundary: |
|---|
| 47 | | - * 1 page for level4 |
|---|
| 48 | | - * (2+2)*4 pages for kernel, param, cmd_line, and randomized kernel |
|---|
| 49 | | - * 2 pages for first 2M (video RAM: CONFIG_X86_VERBOSE_BOOTUP). |
|---|
| 50 | | - * Total is 19 pages. |
|---|
| 44 | + * Used by decompressor's startup_32() to allocate page tables for identity |
|---|
| 45 | + * mapping of the 4G of RAM in 4-level paging mode: |
|---|
| 46 | + * - 1 level4 table; |
|---|
| 47 | + * - 1 level3 table; |
|---|
| 48 | + * - 4 level2 table that maps everything with 2M pages; |
|---|
| 49 | + * |
|---|
| 50 | + * The additional level5 table needed for 5-level paging is allocated from |
|---|
| 51 | + * trampoline_32bit memory. |
|---|
| 51 | 52 | */ |
|---|
| 52 | | -# ifdef CONFIG_X86_VERBOSE_BOOTUP |
|---|
| 53 | | -# define BOOT_PGT_SIZE (19*4096) |
|---|
| 54 | | -# else /* !CONFIG_X86_VERBOSE_BOOTUP */ |
|---|
| 55 | | -# define BOOT_PGT_SIZE (17*4096) |
|---|
| 56 | | -# endif |
|---|
| 57 | | -# else /* !CONFIG_RANDOMIZE_BASE */ |
|---|
| 58 | | -# define BOOT_PGT_SIZE BOOT_INIT_PGT_SIZE |
|---|
| 59 | | -# endif |
|---|
| 53 | +# define BOOT_INIT_PGT_SIZE (6*4096) |
|---|
| 54 | + |
|---|
| 55 | +/* |
|---|
| 56 | + * Total number of page tables kernel_add_identity_map() can allocate, |
|---|
| 57 | + * including page tables consumed by startup_32(). |
|---|
| 58 | + * |
|---|
| 59 | + * Worst-case scenario: |
|---|
| 60 | + * - 5-level paging needs 1 level5 table; |
|---|
| 61 | + * - KASLR needs to map kernel, boot_params, cmdline and randomized kernel, |
|---|
| 62 | + * assuming all of them cross 256T boundary: |
|---|
| 63 | + * + 4*2 level4 table; |
|---|
| 64 | + * + 4*2 level3 table; |
|---|
| 65 | + * + 4*2 level2 table; |
|---|
| 66 | + * - X86_VERBOSE_BOOTUP needs to map the first 2M (video RAM): |
|---|
| 67 | + * + 1 level4 table; |
|---|
| 68 | + * + 1 level3 table; |
|---|
| 69 | + * + 1 level2 table; |
|---|
| 70 | + * Total: 28 tables |
|---|
| 71 | + * |
|---|
| 72 | + * Add 4 spare table in case decompressor touches anything beyond what is |
|---|
| 73 | + * accounted above. Warn if it happens. |
|---|
| 74 | + */ |
|---|
| 75 | +# define BOOT_PGT_SIZE_WARN (28*4096) |
|---|
| 76 | +# define BOOT_PGT_SIZE (32*4096) |
|---|
| 60 | 77 | |
|---|
| 61 | 78 | #else /* !CONFIG_X86_64 */ |
|---|
| 62 | 79 | # define BOOT_STACK_SIZE 0x1000 |
|---|