소스 검색

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

Like in 8cd5477e54a19d5476e9a31d0677e58c9a4ce12d, we need to expand the
kernel slot again to be able to boot again.
Liav A 4 년 전
부모
커밋
dac129e10b
3개의 변경된 파일18개의 추가작업 그리고 8개의 파일을 삭제
  1. 16 6
      Kernel/Arch/i386/Boot/boot.S
  2. 1 1
      Kernel/VM/PageDirectory.cpp
  3. 1 1
      Kernel/init.cpp

+ 16 - 6
Kernel/Arch/i386/Boot/boot.S

@@ -51,7 +51,7 @@ boot_pd0_pt0:
 .skip 4096 * 4
 .skip 4096 * 4
 .global boot_pd3_pts
 .global boot_pd3_pts
 boot_pd3_pts:
 boot_pd3_pts:
-.skip 4096 * 8
+.skip 4096 * 16
 .global boot_pd3_pt1023
 .global boot_pd3_pt1023
 boot_pd3_pt1023:
 boot_pd3_pt1023:
 .skip 4096
 .skip 4096
@@ -91,7 +91,17 @@ boot_pd3 : 512 pde's
     5: boot_pd3_pts[5] (3082-3084MB) (pseudo 512 4KB pages)
     5: boot_pd3_pts[5] (3082-3084MB) (pseudo 512 4KB pages)
     6: boot_pd3_pts[6] (3084-3086MB) (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)
     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
 the 9 page tables each contain 512 pte's that map individual 4KB pages
 
 
@@ -145,7 +155,7 @@ start:
 
 
     /* clear pd3's pt's */
     /* clear pd3's pt's */
     movl $(boot_pd3_pts - 0xc0000000), %edi
     movl $(boot_pd3_pts - 0xc0000000), %edi
-    movl $(1024 * 9), %ecx
+    movl $(1024 * 17), %ecx
     xorl %eax, %eax
     xorl %eax, %eax
     rep stosl
     rep stosl
 
 
@@ -157,7 +167,7 @@ start:
     orl $0x3, 0(%edi)
     orl $0x3, 0(%edi)
 
 
     /* add boot_pd3_pts to boot_pd3 */
     /* add boot_pd3_pts to boot_pd3 */
-    movl $8, %ecx
+    movl $16, %ecx
     movl $(boot_pd3 - 0xc0000000), %edi
     movl $(boot_pd3 - 0xc0000000), %edi
     movl $(boot_pd3_pts - 0xc0000000), %eax
     movl $(boot_pd3_pts - 0xc0000000), %eax
 
 
@@ -182,8 +192,8 @@ start:
     addl $4096, %eax
     addl $4096, %eax
     loop 1b
     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
     movl $(boot_pd3_pts - 0xc0000000), %edi
     xorl %eax, %eax
     xorl %eax, %eax
 
 

+ 1 - 1
Kernel/VM/PageDirectory.cpp

@@ -36,7 +36,7 @@ extern "C" PageDirectoryEntry boot_pd3[1024];
 
 
 UNMAP_AFTER_INIT PageDirectory::PageDirectory()
 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);
     m_identity_range_allocator.initialize_with_range(VirtualAddress(FlatPtr(0x00000000)), 0x00200000);
 
 
     // Adopt the page tables already set up by boot.S
     // Adopt the page tables already set up by boot.S

+ 1 - 1
Kernel/init.cpp

@@ -104,7 +104,7 @@ static Processor s_bsp_processor; // global but let's keep it "private"
 
 
 extern "C" UNMAP_AFTER_INIT [[noreturn]] void init()
 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!
         // The kernel has grown too large again!
         asm volatile("cli;hlt");
         asm volatile("cli;hlt");
     }
     }