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:
parent
1eadf4a8fc
commit
052e18485d
1 changed files with 3 additions and 1 deletions
4
vm.c
4
vm.c
|
@ -261,7 +261,9 @@ deallocuvm(pde_t *pgdir, uint oldsz, uint newsz)
|
||||||
a = PGROUNDUP(newsz);
|
a = PGROUNDUP(newsz);
|
||||||
for(; a < oldsz; a += PGSIZE){
|
for(; a < oldsz; a += PGSIZE){
|
||||||
pte = walkpgdir(pgdir, (char*)a, 0);
|
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);
|
pa = PTE_ADDR(*pte);
|
||||||
if(pa == 0)
|
if(pa == 0)
|
||||||
panic("kfree");
|
panic("kfree");
|
||||||
|
|
Loading…
Reference in a new issue