svn commit: r202591 - in stable/8/sys: amd64/amd64 i386/i386
Alan Cox
alc at FreeBSD.org
Mon Jan 18 21:17:03 UTC 2010
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);
}
/*
More information about the svn-src-stable
mailing list