phys addr arg of 0 must be possible for pt_writemap too (instead of meaning
unmap).
This commit is contained in:
		
							parent
							
								
									b740ff055f
								
							
						
					
					
						commit
						866a4a667e
					
				@ -206,7 +206,7 @@ PRIVATE void vm_freepages(vir_bytes vir, vir_bytes phys, int pages, int reason)
 | 
			
		||||
		FREE_MEM(ABS2CLICK(phys), pages);
 | 
			
		||||
		if(pt_writemap(&vmp->vm_pt,
 | 
			
		||||
			vir + CLICK2ABS(vmp->vm_arch.vm_seg[D].mem_phys),
 | 
			
		||||
			0, pages*I386_PAGE_SIZE, 0, WMF_OVERWRITE) != OK)
 | 
			
		||||
			MAP_NONE, pages*I386_PAGE_SIZE, 0, WMF_OVERWRITE) != OK)
 | 
			
		||||
				vm_panic("vm_freepages: pt_writemap failed",
 | 
			
		||||
					NO_NUM);
 | 
			
		||||
	} else {
 | 
			
		||||
@ -378,11 +378,15 @@ PUBLIC int pt_writemap(pt_t *pt, vir_bytes v, phys_bytes physaddr,
 | 
			
		||||
 | 
			
		||||
	pages = bytes / I386_PAGE_SIZE;
 | 
			
		||||
 | 
			
		||||
	/* MAP_NONE means to clear the mapping. It doesn't matter
 | 
			
		||||
	 * what's actually written into the PTE if I386_VM_PRESENT
 | 
			
		||||
	 * isn't on, so we can just write MAP_NONE into it.
 | 
			
		||||
	 */
 | 
			
		||||
#if SANITYCHECKS
 | 
			
		||||
	if(physaddr && !(flags & I386_VM_PRESENT)) {
 | 
			
		||||
	if(physaddr != MAP_NONE && !(flags & I386_VM_PRESENT)) {
 | 
			
		||||
		vm_panic("pt_writemap: writing dir with !P\n", NO_NUM);
 | 
			
		||||
	}
 | 
			
		||||
	if(!physaddr && flags) {
 | 
			
		||||
	if(physaddr == MAP_NONE && flags) {
 | 
			
		||||
		vm_panic("pt_writemap: writing 0 with flags\n", NO_NUM);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
@ -901,7 +905,7 @@ PUBLIC int pt_copy(pt_t *src, pt_t *dst)
 | 
			
		||||
 | 
			
		||||
#define PHYSMAGIC 0x7b9a0590
 | 
			
		||||
 | 
			
		||||
#define PHYS_UNMAP if(OK != pt_writemap(&vmp->vm_pt, varmap_loc, 0, 	\
 | 
			
		||||
#define PHYS_UNMAP if(OK != pt_writemap(&vmp->vm_pt, varmap_loc, MAP_NONE,\
 | 
			
		||||
	I386_PAGE_SIZE, 0, WMF_OVERWRITE)) {				\
 | 
			
		||||
		vm_panic("PHYS_UNMAP: pt_writemap failed", NO_NUM); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -932,7 +932,7 @@ PUBLIC int map_unmap_region(struct vmproc *vmp, struct vir_region *region)
 | 
			
		||||
	SANITYCHECK(SCL_DETAIL);
 | 
			
		||||
 | 
			
		||||
	if(pt_writemap(&vmp->vm_pt, r->vaddr,
 | 
			
		||||
	  0, r->length, 0, WMF_OVERWRITE) != OK) {
 | 
			
		||||
	  MAP_NONE, r->length, 0, WMF_OVERWRITE) != OK) {
 | 
			
		||||
	    printf("VM: map_unmap_region: pt_writemap failed\n");
 | 
			
		||||
	    return ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user