Slight simplification of copyuvm. We could simplify other things now that processes are contiguous, but we'd have to think harder about the error paths.

This commit is contained in:
Austin Clements 2010-09-01 17:14:58 -04:00
parent b1d41d6788
commit d3ecf3eb44

16
vm.c
View file

@ -310,14 +310,14 @@ copyuvm(pde_t *pgdir, uint sz)
for(i = 0; i < sz; i += PGSIZE){ for(i = 0; i < sz; i += PGSIZE){
if(!(pte = walkpgdir(pgdir, (void *)i, 0))) if(!(pte = walkpgdir(pgdir, (void *)i, 0)))
panic("copyuvm: pte should exist\n"); panic("copyuvm: pte should exist\n");
if(*pte & PTE_P){ if(!(*pte & PTE_P))
pa = PTE_ADDR(*pte); panic("copyuvm: page not present\n");
if(!(mem = kalloc())) pa = PTE_ADDR(*pte);
goto bad; if(!(mem = kalloc()))
memmove(mem, (char *)pa, PGSIZE); goto bad;
if(!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U)) memmove(mem, (char *)pa, PGSIZE);
goto bad; if(!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U))
} goto bad;
} }
return d; return d;