unmap VR_DIRECT mappings too (fix for X)
This commit is contained in:
parent
76a02db5e7
commit
0b713b0de5
@ -499,7 +499,9 @@ PRIVATE int map_subfree(struct vmproc *vmp,
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
vm_assert(pr->ph->refcount == 1);
|
vm_assert(pr->ph->refcount == 1);
|
||||||
FREE_MEM(ABS2CLICK(pr->ph->phys), ABS2CLICK(sublen));
|
if(!(region->flags & VR_DIRECT)) {
|
||||||
|
FREE_MEM(ABS2CLICK(pr->ph->phys), ABS2CLICK(sublen));
|
||||||
|
}
|
||||||
USE(pr, pr->offset += sublen;);
|
USE(pr, pr->offset += sublen;);
|
||||||
USE(pr->ph,
|
USE(pr->ph,
|
||||||
pr->ph->phys += sublen;
|
pr->ph->phys += sublen;
|
||||||
@ -1214,8 +1216,8 @@ PUBLIC int map_unmap_region(struct vmproc *vmp, struct vir_region *region,
|
|||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(r->flags & VR_ANON)) {
|
if(!(r->flags & (VR_ANON|VR_DIRECT))) {
|
||||||
printf("VM: only unmap anonymous memory\n");
|
printf("VM: only unmap anonymous or direct memory\n");
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user