Author: alc
Date: Mon Jan 18 21:17:03 2010
New Revision: 202591
URL: http://svn.freebsd.org/changeset/base/202591

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

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

Modified: stable/8/sys/amd64/amd64/pmap.c
==============================================================================
--- stable/8/sys/amd64/amd64/pmap.c     Mon Jan 18 21:00:29 2010        
(r202590)
+++ stable/8/sys/amd64/amd64/pmap.c     Mon Jan 18 21:17:03 2010        
(r202591)
@@ -626,7 +626,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;
@@ -635,18 +634,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/8/sys/i386/i386/locore.s
==============================================================================
--- stable/8/sys/i386/i386/locore.s     Mon Jan 18 21:00:29 2010        
(r202590)
+++ stable/8/sys/i386/i386/locore.s     Mon Jan 18 21:17:03 2010        
(r202591)
@@ -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/8/sys/i386/i386/pmap.c
==============================================================================
--- stable/8/sys/i386/i386/pmap.c       Mon Jan 18 21:00:29 2010        
(r202590)
+++ stable/8/sys/i386/i386/pmap.c       Mon Jan 18 21:17:03 2010        
(r202591)
@@ -206,6 +206,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;
@@ -649,13 +650,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);
        }
 
        /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to