From: Tulio A M Mendes Date: Fri, 6 Feb 2026 11:47:32 +0000 (-0300) Subject: x86/boot: reduce early identity map to 64MB X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=f9c252ad3ec247e4111d4822a9e7b6ab0c766622;p=AdrOS.git x86/boot: reduce early identity map to 64MB --- diff --git a/src/arch/x86/boot.S b/src/arch/x86/boot.S index e01f6dd5..9c85e4ff 100644 --- a/src/arch/x86/boot.S +++ b/src/arch/x86/boot.S @@ -70,13 +70,11 @@ _start: */ /* - * Map 0-512MB using 128 page tables. - * Multiboot2 info is a physical pointer (EBX) and GRUB may place it high. - * Keeping a wide identity + higher-half window avoids early page faults - * while PMM/VMM/heap are coming up. + * Map 0-64MB using 16 page tables. + * This keeps enough low physical memory identity-mapped for bring-up. */ - /* Fill PTs (boot_pt0..boot_pt127) */ + /* Fill PTs (boot_pt0..boot_pt15) */ mov $boot_pt0, %edi sub $KERNEL_VIRT_BASE, %edi /* Physical address of PT0 */ xor %ebx, %ebx /* pt_index = 0 */ @@ -97,14 +95,14 @@ _start: loop 2b inc %ebx - cmp $128, %ebx + cmp $16, %ebx jne 1b /* 3. Get Physical Address of Page Directory */ mov $boot_pd, %edi sub $KERNEL_VIRT_BASE, %edi - /* Link PT0..PT127 into PD for both identity and higher-half mapping */ + /* Link PT0..PT15 into PD for both identity and higher-half mapping */ mov $boot_pt0, %edx sub $KERNEL_VIRT_BASE, %edx /* pt_phys = physical address of PT0 */ mov $0, %ebx /* i = 0 */ @@ -116,7 +114,7 @@ _start: mov %eax, 3072(%edi,%ebx,4) /* PD[768+i] */ add $4096, %edx inc %ebx - cmp $128, %ebx + cmp $16, %ebx jne 3b /* 6. Recursive Mapping (Optional, good for VMM later) at index 1023 */ @@ -187,7 +185,7 @@ boot_pd: .skip 4096 .global boot_pt0 boot_pt0: - .skip 4096*128 + .skip 4096*16 .align 16 .global arch_boot_args diff --git a/src/kernel/scheduler.c b/src/kernel/scheduler.c index 742103fb..c521b5ec 100644 --- a/src/kernel/scheduler.c +++ b/src/kernel/scheduler.c @@ -30,7 +30,7 @@ static void* pmm_alloc_page_low(void) { void* p = pmm_alloc_page(); if (!p) return 0; // boot.S currently identity-maps a large low window; keep allocations within it. - if ((uint32_t)p < 0x20000000) { + if ((uint32_t)p < 0x04000000) { return p; } // Not safe to touch yet; put it back.