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

oops, forgetting to set succ for new range!

上级 45c455ee
...@@ -515,6 +515,9 @@ crange_locked::replace(range *repl) ...@@ -515,6 +515,9 @@ crange_locked::replace(range *repl)
newlast = e; newlast = e;
} }
if (newlast)
newlast->next[0] = succ_;
// do compare-exchange first, and only then mark the old ranges as deleted; // do compare-exchange first, and only then mark the old ranges as deleted;
// otherwise, concurrent readers may not find either old or new ranges. // otherwise, concurrent readers may not find either old or new ranges.
assert(prev_->next[0].cmpxch(first_?:succ_, repl?:succ_)); assert(prev_->next[0].cmpxch(first_?:succ_, repl?:succ_));
......
...@@ -277,17 +277,17 @@ vmap::insert(vmnode *n, uptr vma_start) ...@@ -277,17 +277,17 @@ vmap::insert(vmnode *n, uptr vma_start)
// XXX handle overlaps // XXX handle overlaps
vma *e = new vma(); vma *e = new vma();
if (e == 0) if (e == 0) {
cprintf("vmap::insert: out of vmas\n");
return -1; return -1;
}
e->vma_start = vma_start; e->vma_start = vma_start;
e->vma_end = vma_start + len; e->vma_end = vma_start + len;
e->n = n; e->n = n;
n->ref++; n->ref++;
span.replace(new range(&cr, vma_start, len, e, 0)); span.replace(new range(&cr, vma_start, len, e, 0));
updatepages(pml4, (void*) e->vma_start, (void*) (e->vma_end-1), 0); updatepages(pml4, (void*) e->vma_start, (void*) (e->vma_end-1), 0);
return 0; return 0;
} }
...@@ -307,10 +307,8 @@ vmap::remove(uptr vma_start, uptr len) ...@@ -307,10 +307,8 @@ vmap::remove(uptr vma_start, uptr len)
// XXX handle partial unmap // XXX handle partial unmap
span.replace(0); span.replace(0);
updatepages(pml4, (void*) vma_start, (void*) (vma_start + len - 1), 0); updatepages(pml4, (void*) vma_start, (void*) (vma_start + len - 1), 0);
tlbflush(); tlbflush();
return 0; return 0;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论