diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index a2a5b0d12ca0..38cc84c19f00 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -493,9 +493,13 @@ pmap_bootstrap(vm_paddr_t firstaddr) virtual_avail = va; /* - * Leave in place an identity mapping (virt == phys) for the low 1 MB - * physical memory region that is used by the ACPI wakeup code. This - * mapping must not have PG_G set. + * Finish removing the identity mapping (virt == phys) of low memory. + * It was only used for 2 instructions in locore. locore then + * unmapped the first PTD to get some null pointer checks. ACPI + * wakeup will map the first PTD transiently to use it for 1 + * instruction. The double mapping for low memory is not usable in + * normal operation since it breaks trapping of null pointers and + * causes inconsistencies in page tables when combined with PG_G. */ for (i = 1; i < NKPT; i++) PTD[i] = 0;