svn commit: r205773 - head/sys/i386/i386
Alan Cox
alc at FreeBSD.org
Sat Mar 27 18:24:28 UTC 2010
Author: alc
Date: Sat Mar 27 18:24:27 2010
New Revision: 205773
URL: http://svn.freebsd.org/changeset/base/205773
Log:
Simplify pmap_growkernel(), making the i386 version more like the amd64
version.
MFC after: 3 weeks
Modified:
head/sys/i386/i386/pmap.c
Modified: head/sys/i386/i386/pmap.c
==============================================================================
--- head/sys/i386/i386/pmap.c Sat Mar 27 18:15:18 2010 (r205772)
+++ head/sys/i386/i386/pmap.c Sat Mar 27 18:24:27 2010 (r205773)
@@ -207,8 +207,8 @@ vm_offset_t virtual_end; /* VA of last a
int pgeflag = 0; /* PG_G or-in */
int pseflag = 0; /* PG_PS or-in */
-static int nkpt;
-vm_offset_t kernel_vm_end;
+static int nkpt = NKPT;
+vm_offset_t kernel_vm_end = KERNBASE + NKPT * NBPDR;
extern u_int32_t KERNend;
extern u_int32_t KPTphys;
@@ -395,7 +395,6 @@ pmap_bootstrap(vm_paddr_t firstaddr)
mtx_lock_spin(&allpmaps_lock);
LIST_INSERT_HEAD(&allpmaps, kernel_pmap, pm_list);
mtx_unlock_spin(&allpmaps_lock);
- nkpt = NKPT;
/*
* Reserve some special page table entries/VA space for temporary
@@ -2032,24 +2031,12 @@ pmap_growkernel(vm_offset_t addr)
pd_entry_t newpdir;
mtx_assert(&kernel_map->system_mtx, MA_OWNED);
- if (kernel_vm_end == 0) {
- kernel_vm_end = KERNBASE;
- nkpt = 0;
- while (pdir_pde(PTD, kernel_vm_end)) {
- kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
- nkpt++;
- if (kernel_vm_end - 1 >= kernel_map->max_offset) {
- kernel_vm_end = kernel_map->max_offset;
- break;
- }
- }
- }
- addr = roundup2(addr, PAGE_SIZE * NPTEPG);
+ addr = roundup2(addr, NBPDR);
if (addr - 1 >= kernel_map->max_offset)
addr = kernel_map->max_offset;
while (kernel_vm_end < addr) {
if (pdir_pde(PTD, kernel_vm_end)) {
- kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+ kernel_vm_end = (kernel_vm_end + NBPDR) & ~PDRMASK;
if (kernel_vm_end - 1 >= kernel_map->max_offset) {
kernel_vm_end = kernel_map->max_offset;
break;
@@ -2072,7 +2059,7 @@ pmap_growkernel(vm_offset_t addr)
pdir_pde(KPTD, kernel_vm_end) = pgeflag | newpdir;
pmap_kenter_pde(kernel_vm_end, newpdir);
- kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+ kernel_vm_end = (kernel_vm_end + NBPDR) & ~PDRMASK;
if (kernel_vm_end - 1 >= kernel_map->max_offset) {
kernel_vm_end = kernel_map->max_offset;
break;
More information about the svn-src-all
mailing list