From: Austin Clements Date: Fri, 2 Sep 2011 01:29:09 +0000 (-0400) Subject: Skip missing page directories in deallocuvm X-Git-Url: https://git.devinivas.org/?a=commitdiff_plain;h=052e18485d19f26d4182a662054369926d0c4dd0;p=cs3210-lab1.git 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. --- diff --git a/vm.c b/vm.c index c717baf..181b376 100644 --- a/vm.c +++ b/vm.c @@ -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");