提交 ced82a19 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

check for deletion, now that vma is a range

上级 310f8cb8
......@@ -107,6 +107,7 @@ struct range : public rcu_freed {
public:
range(crange *cr, u64 k, u64 sz, int nlevel = 0);
bool deleted() { return next[0].mark(); }
virtual void do_gc() {
delete this;
......
......@@ -441,7 +441,10 @@ vmap::pagefault(uptr va, u32 err)
if (!cmpxch(pte, ptev, ptev | PTE_LOCK))
goto retry;
// XXX check if vma has been deleted, and if so, unlock & goto retry
if (m->deleted()) {
*pte = ptev;
goto retry;
}
if (m->va_type == COW) {
*pte = v2p(m->n->page[npg]) | PTE_P | PTE_U | PTE_COW;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论