kern

diff src/vm.c @ 64:c2692696f9ab

forgot to handle the cow argument to clone_vm
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 17 Aug 2011 05:43:47 +0300
parents 437360696883
children 0a205396e1a0
line diff
     1.1 --- a/src/vm.c	Wed Aug 17 05:42:44 2011 +0300
     1.2 +++ b/src/vm.c	Wed Aug 17 05:43:47 2011 +0300
     1.3 @@ -609,11 +609,13 @@
     1.4  	/* user space */
     1.5  	for(i=0; i<kstart_dirent; i++) {
     1.6  		if(pgdir[i] & PG_PRESENT) {
     1.7 -			/* first go through all the entries of the existing
     1.8 -			 * page table and unset the writable bits.
     1.9 -			 */
    1.10 -			for(j=0; j<1024; j++) {
    1.11 -				PGTBL(i)[j] &= ~(uint32_t)PG_WRITABLE;
    1.12 +			if(cow) {
    1.13 +				/* first go through all the entries of the existing
    1.14 +				 * page table and unset the writable bits.
    1.15 +				 */
    1.16 +				for(j=0; j<1024; j++) {
    1.17 +					PGTBL(i)[j] &= ~(uint32_t)PG_WRITABLE;
    1.18 +				}
    1.19  			}
    1.20  
    1.21  			/* allocate a page table for the clone */
    1.22 @@ -635,8 +637,10 @@
    1.23  		ndir[i] = pgdir[i];
    1.24  	}
    1.25  
    1.26 -	/* we just changed all the page protection bits, so we need to flush the TLB */
    1.27 -	flush_tlb();
    1.28 +	if(cow) {
    1.29 +		/* we just changed all the page protection bits, so we need to flush the TLB */
    1.30 +		flush_tlb();
    1.31 +	}
    1.32  
    1.33  	paddr = virt_to_phys((uint32_t)ndir);
    1.34