Simplify pmap_growkernel(), making the i386 version more like the amd64
version. MFC after: 3 weeks
This commit is contained in:
parent
0d9014f354
commit
a57d0d8e1d
@ -207,8 +207,8 @@ vm_offset_t virtual_end; /* VA of last avail page (end of kernel AS) */
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user