Kernel: Expand the kernel memory slot from 16 MiB to 32 MiB

Like in 8cd5477e54, we need to expand the
kernel slot again to be able to boot again.
This commit is contained in:
Liav A 2021-05-14 15:34:26 +03:00 committed by Andreas Kling
parent 7078119c58
commit dac129e10b
Notes: sideshowbarker 2024-07-18 18:00:44 +09:00
3 changed files with 18 additions and 8 deletions

View file

@ -51,7 +51,7 @@ boot_pd0_pt0:
.skip 4096 * 4
.global boot_pd3_pts
boot_pd3_pts:
.skip 4096 * 8
.skip 4096 * 16
.global boot_pd3_pt1023
boot_pd3_pt1023:
.skip 4096
@ -91,7 +91,17 @@ boot_pd3 : 512 pde's
5: boot_pd3_pts[5] (3082-3084MB) (pseudo 512 4KB pages)
6: boot_pd3_pts[6] (3084-3086MB) (pseudo 512 4KB pages)
7: boot_pd3_pts[7] (3086-3088MB) (pseudo 512 4KB pages)
8: boot_pd3_pt1023 (4094-4096MB) (for page table mappings)
8: boot_pd3_pts[8] (3088-3090MB) (pseudo 512 4KB pages)
9: boot_pd3_pts[9] (3090-3076MB) (pseudo 512 4KB pages)
10: boot_pd3_pts[10] (3092-3094MB) (pseudo 512 4KB pages)
11: boot_pd3_pts[11] (3094-3096MB) (pseudo 512 4KB pages)
12: boot_pd3_pts[12] (3096-3098MB) (pseudo 512 4KB pages)
13: boot_pd3_pts[13] (3098-3100MB) (pseudo 512 4KB pages)
14: boot_pd3_pts[14] (3100-3102MB) (pseudo 512 4KB pages)
15: boot_pd3_pts[15] (3102-3104MB) (pseudo 512 4KB pages)
16: boot_pd3_pt1023 (4094-4096MB) (for page table mappings)
the 9 page tables each contain 512 pte's that map individual 4KB pages
@ -145,7 +155,7 @@ start:
/* clear pd3's pt's */
movl $(boot_pd3_pts - 0xc0000000), %edi
movl $(1024 * 9), %ecx
movl $(1024 * 17), %ecx
xorl %eax, %eax
rep stosl
@ -157,7 +167,7 @@ start:
orl $0x3, 0(%edi)
/* add boot_pd3_pts to boot_pd3 */
movl $8, %ecx
movl $16, %ecx
movl $(boot_pd3 - 0xc0000000), %edi
movl $(boot_pd3_pts - 0xc0000000), %eax
@ -182,8 +192,8 @@ start:
addl $4096, %eax
loop 1b
/* pseudo identity map the 3072-3090MB range */
movl $(512 * 8), %ecx
/* pseudo identity map the 3072-3102MB range */
movl $(512 * 16), %ecx
movl $(boot_pd3_pts - 0xc0000000), %edi
xorl %eax, %eax

View file

@ -36,7 +36,7 @@ extern "C" PageDirectoryEntry boot_pd3[1024];
UNMAP_AFTER_INIT PageDirectory::PageDirectory()
{
m_range_allocator.initialize_with_range(VirtualAddress(0xc1000000), 0x30800000);
m_range_allocator.initialize_with_range(VirtualAddress(0xc2000000), 0x2f000000);
m_identity_range_allocator.initialize_with_range(VirtualAddress(FlatPtr(0x00000000)), 0x00200000);
// Adopt the page tables already set up by boot.S

View file

@ -104,7 +104,7 @@ static Processor s_bsp_processor; // global but let's keep it "private"
extern "C" UNMAP_AFTER_INIT [[noreturn]] void init()
{
if ((FlatPtr)&end_of_kernel_image >= 0xc1000000u) {
if ((FlatPtr)&end_of_kernel_image >= 0xc2000000u) {
// The kernel has grown too large again!
asm volatile("cli;hlt");
}