Try to force heap allocation of vmaps

上级 909c7ad2
......@@ -69,13 +69,12 @@ struct vmap {
struct radix rx;
#endif
static vmap* alloc();
atomic<u64> ref;
pgmap *const pml4; // Page table
char *const kshared;
vmap();
~vmap();
bool replace_vma(vma *a, vma *b);
void decref();
......@@ -88,11 +87,15 @@ struct vmap {
int copyout(uptr va, void *p, u64 len);
int sbrk(ssize_t n, uptr *addr);
NEW_DELETE_OPS(vmap)
uptr brk_; // Top of heap
private:
private:
vmap();
vmap(const vmap&);
vmap& operator=(const vmap&);
~vmap();
NEW_DELETE_OPS(vmap)
int pagefault_wcow(vma *m);
struct spinlock brklock_;
};
......@@ -168,7 +168,7 @@ exec(const char *path, char **argv)
if(elf.magic != ELF_MAGIC)
goto bad;
if((vmp = new vmap()) == 0)
if((vmp = vmap::alloc()) == 0)
goto bad;
// Arguments for work queue
......
......@@ -243,7 +243,7 @@ inituser(void)
if (p->ftable == nullptr)
panic("userinit: new filetable");
bootproc = p;
if((p->vmap = new vmap()) == 0)
if((p->vmap = vmap::alloc()) == 0)
panic("userinit: out of vmaps?");
vmnode *vmn = new vmnode(PGROUNDUP(_initcode_size) / PGSIZE);
if(vmn == 0)
......@@ -481,7 +481,7 @@ threadalloc(void (*fn)(void *), void *arg)
if (p == nullptr)
return 0;
p->vmap = new vmap();
p->vmap = vmap::alloc();
if (p->vmap == nullptr) {
freeproc(p);
return 0;
......
......@@ -138,6 +138,12 @@ vma::~vma()
* vmap
*/
vmap*
vmap::alloc(void)
{
return new vmap();
}
vmap::vmap() :
#if VM_CRANGE
cr(10),
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论