提交 5bca8458 创建 作者: Frans Kaashoek's avatar Frans Kaashoek

x

上级 7f49b2ed
...@@ -629,7 +629,7 @@ vmap_copy_vma(struct kv *kv, void *_st) ...@@ -629,7 +629,7 @@ vmap_copy_vma(struct kv *kv, void *_st)
{ {
struct state *st = (struct state *) _st; struct state *st = (struct state *) _st;
struct vma *e = (struct vma *) kv->val; struct vma *e = (struct vma *) kv->val;
struct vma *c = vma_alloc(); // insert in tree! struct vma *c = vma_alloc();
if (c == 0) { if (c == 0) {
return 0; return 0;
} }
...@@ -856,15 +856,16 @@ pagefault(struct vmap *vmap, uint va, uint err) ...@@ -856,15 +856,16 @@ pagefault(struct vmap *vmap, uint va, uint err)
{ {
pte_t *pte = walkpgdir(vmap->pgdir, (const void *)va, 1); pte_t *pte = walkpgdir(vmap->pgdir, (const void *)va, 1);
// XXX every PTE_COW results in page fault on each access. fix if((*pte & (PTE_P|PTE_U|PTE_W)) == (PTE_P|PTE_U|PTE_W)) { // optimize checks of args to syscals
if((*pte & (PTE_P|PTE_U|PTE_W)) == (PTE_P|PTE_U|PTE_W))
return 0; return 0;
}
// cprintf("%d: pagefault 0x%x err 0x%x pte 0x%x\n", proc->pid, va, err, *pte); // cprintf("%d: pagefault 0x%x err 0x%x pte 0x%x\n", proc->pid, va, err, *pte);
rcu_begin_read(); rcu_begin_read();
struct vma *m = vmap_lookup(vmap, va, 1); struct vma *m = vmap_lookup(vmap, va, 1);
if(m == 0) { if(m == 0) {
// cprintf("pagefault: no vma\n");
rcu_end_read(); rcu_end_read();
return -1; return -1;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论