Skip missing page directories in deallocuvm

Previously, deallocuvm scanned from 0 to KERNBASE in one page
increments, which had a noticable effect on boot time.  Now it skips
over missing page directories.
This commit is contained in:
Austin Clements 2011-09-01 21:29:09 -04:00
parent 1eadf4a8fc
commit 052e18485d

4
vm.c
View file

@ -261,7 +261,9 @@ deallocuvm(pde_t *pgdir, uint oldsz, uint newsz)
a = PGROUNDUP(newsz);
for(; a < oldsz; a += PGSIZE){
pte = walkpgdir(pgdir, (char*)a, 0);
if(pte && (*pte & PTE_P) != 0){
if(!pte)
a += (NPTENTRIES - 1) * PGSIZE;
else if((*pte & PTE_P) != 0){
pa = PTE_ADDR(*pte);
if(pa == 0)
panic("kfree");