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

forkexectree can run for a long time now, although it still eventually crashes

上级 2b285c52
......@@ -37,6 +37,6 @@ class scoped_gc_epoch {
void initgc(void);
void initprocgc(struct proc *);
void gc_start(void);
void gc_delayed(rcu_freed *);
void gc_wakeup(void);
......@@ -203,6 +203,12 @@ void gc_dumpstat(void)
}
}
void
gc_wakeup(void)
{
for (int i = 0; i < NCPU; i++)
cv_wakeup(&gc_state[i].cv);
}
static void
gc_worker(void *x)
......
......@@ -72,7 +72,11 @@ initpg(void)
while (va < KBASEEND) {
auto pdp = descend(&kpml4, va, 0, 1, 3);
assert(pdp);
auto pd = descend(pdp, va, 0, 1, 2);
assert(pd);
atomic<pme_t> *sp = &pd->e[PX(1,va)];
u64 flags = PTE_W | PTE_P | PTE_PS | PTE_NX;
*sp = pa | flags;
......
......@@ -98,6 +98,7 @@ syscall(u64 a0, u64 a1, u64 a2, u64 a3, u64 a4, u64 num)
}
} catch (retryable& e) {
cprintf("%d: syscall retry\n", myproc()->pid);
gc_wakeup();
yield();
}
}
......
......@@ -225,6 +225,7 @@ vmap::vmap() :
ksfree(slab_kshared, kshared);
if (pml4)
freevm(pml4);
throw std::bad_alloc();
}
vmap::~vmap()
......@@ -647,6 +648,8 @@ pagefault(struct vmap *vmap, uptr va, u32 err)
return vmap->pagefault(va, err);
} catch (retryable& e) {
cprintf("%d: pagefault retry\n", myproc()->pid);
gc_wakeup();
yield();
}
}
}
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论