PERFORCE change 30967 for review
Peter Wemm
peter at FreeBSD.org
Sun May 11 15:21:46 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=30967
Change 30967 by peter at peter_overcee on 2003/05/11 15:21:05
I dont know why I didn't think of this before. Duplicate the
same 1GB window over the entire address space for ease of
KERNBASE selection. Very easy.
Affected files ...
.. //depot/projects/hammer/sys/boot/i386/libi386/elf64_freebsd.c#15 edit
Differences ...
==== //depot/projects/hammer/sys/boot/i386/libi386/elf64_freebsd.c#15 (text+ko) ====
@@ -86,20 +86,20 @@
bzero(PT3, PAGE_SIZE);
bzero(PT2, PAGE_SIZE);
- /* single PML4 entry */
- PT4[0] = (p4_entry_t)VTOP((uintptr_t)&PT3[0]);
- PT4[0] |= PG_V | PG_RW | PG_U;
+ /*
+ * This is kinda brutal, but every single 1GB VM memory segment points to
+ * the same first 1GB of physical memory. But it is more than adequate.
+ */
+ for (i = 0; i < 512; i++) {
+ /* Each slot of the level 4 pages points to the same level 3 page */
+ PT4[i] = (p4_entry_t)VTOP((uintptr_t)&PT3[0]);
+ PT4[i] |= PG_V | PG_RW | PG_U;
- /* Direct map 1GB at address zero */
- PT3[0] = (p3_entry_t)VTOP((uintptr_t)&PT2[0]);
- PT3[0] |= PG_V | PG_RW | PG_U;
+ /* Each slot of the level 3 pages points to the same level 2 page */
+ PT3[i] = (p3_entry_t)VTOP((uintptr_t)&PT2[0]);
+ PT3[i] |= PG_V | PG_RW | PG_U;
- /* Direct map 1GB at KERNBASE (hardcoded for now) */
- PT3[1] = (p3_entry_t)VTOP((uintptr_t)&PT2[0]);
- PT3[1] |= PG_V | PG_RW | PG_U;
-
- /* 512 PG_PS (2MB) page mappings for 1GB of direct mapping */
- for (i = 0; i < 512; i++) {
+ /* The level 2 page slots are mapped with 2MB pages for 1GB. */
PT2[i] = i * (2 * 1024 * 1024);
PT2[i] |= PG_V | PG_RW | PG_PS | PG_U;
}
More information about the p4-projects
mailing list