svn commit: r202599 - in stable/7/sys: amd64/amd64 i386/i386

Alan Cox alc at FreeBSD.org
Mon Jan 18 22:48:42 UTC 2010


Author: alc
Date: Mon Jan 18 22:48:41 2010
New Revision: 202599
URL: http://svn.freebsd.org/changeset/base/202599

Log:
  MFC r202085
    Simplify pmap_init().  Additionally, correct a harmless misbehavior on
    i386.

Modified:
  stable/7/sys/amd64/amd64/pmap.c
  stable/7/sys/i386/i386/locore.s
  stable/7/sys/i386/i386/pmap.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/amd64/amd64/pmap.c
==============================================================================
--- stable/7/sys/amd64/amd64/pmap.c	Mon Jan 18 22:46:06 2010	(r202598)
+++ stable/7/sys/amd64/amd64/pmap.c	Mon Jan 18 22:48:41 2010	(r202599)
@@ -629,7 +629,6 @@ pmap_page_init(vm_page_t m)
 void
 pmap_init(void)
 {
-	pd_entry_t *pd;
 	vm_page_t mpte;
 	vm_size_t s;
 	int i, pv_npg;
@@ -638,18 +637,13 @@ pmap_init(void)
 	 * Initialize the vm page array entries for the kernel pmap's
 	 * page table pages.
 	 */ 
-	pd = pmap_pde(kernel_pmap, KERNBASE);
 	for (i = 0; i < NKPT; i++) {
-		if ((pd[i] & (PG_PS | PG_V)) == (PG_PS | PG_V))
-			continue;
-		KASSERT((pd[i] & PG_V) != 0,
-		    ("pmap_init: page table page is missing"));
-		mpte = PHYS_TO_VM_PAGE(pd[i] & PG_FRAME);
+		mpte = PHYS_TO_VM_PAGE(KPTphys + (i << PAGE_SHIFT));
 		KASSERT(mpte >= vm_page_array &&
 		    mpte < &vm_page_array[vm_page_array_size],
 		    ("pmap_init: page table page is out of range"));
 		mpte->pindex = pmap_pde_pindex(KERNBASE) + i;
-		mpte->phys_addr = pd[i] & PG_FRAME;
+		mpte->phys_addr = KPTphys + (i << PAGE_SHIFT);
 	}
 
 	/*

Modified: stable/7/sys/i386/i386/locore.s
==============================================================================
--- stable/7/sys/i386/i386/locore.s	Mon Jan 18 22:46:06 2010	(r202598)
+++ stable/7/sys/i386/i386/locore.s	Mon Jan 18 22:48:41 2010	(r202599)
@@ -104,9 +104,7 @@ IdlePTD:	.long	0		/* phys addr of kernel
 IdlePDPT:	.long	0		/* phys addr of kernel PDPT */
 #endif
 
-#ifdef SMP
 	.globl	KPTphys
-#endif
 KPTphys:	.long	0		/* phys addr of kernel page tables */
 
 	.globl	proc0kstack

Modified: stable/7/sys/i386/i386/pmap.c
==============================================================================
--- stable/7/sys/i386/i386/pmap.c	Mon Jan 18 22:46:06 2010	(r202598)
+++ stable/7/sys/i386/i386/pmap.c	Mon Jan 18 22:48:41 2010	(r202599)
@@ -205,6 +205,7 @@ int pseflag = 0;		/* PG_PS or-in */
 static int nkpt;
 vm_offset_t kernel_vm_end;
 extern u_int32_t KERNend;
+extern u_int32_t KPTphys;
 
 #ifdef PAE
 pt_entry_t pg_nx;
@@ -642,13 +643,13 @@ pmap_init(void)
 	 * Initialize the vm page array entries for the kernel pmap's
 	 * page table pages.
 	 */ 
-	for (i = 0; i < nkpt; i++) {
-		mpte = PHYS_TO_VM_PAGE(PTD[i + KPTDI] & PG_FRAME);
+	for (i = 0; i < NKPT; i++) {
+		mpte = PHYS_TO_VM_PAGE(KPTphys + (i << PAGE_SHIFT));
 		KASSERT(mpte >= vm_page_array &&
 		    mpte < &vm_page_array[vm_page_array_size],
 		    ("pmap_init: page table page is out of range"));
 		mpte->pindex = i + KPTDI;
-		mpte->phys_addr = PTD[i + KPTDI] & PG_FRAME;
+		mpte->phys_addr = KPTphys + (i << PAGE_SHIFT);
 	}
 
 	/*


More information about the svn-src-stable-7 mailing list