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