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

more const

上级 51097e28
......@@ -14,17 +14,17 @@ struct vmnode {
atomic<char*> page[128];
atomic<u64> ref;
const enum vmntype type;
struct inode *ip;
u64 offset;
u64 sz;
struct inode *const ip;
const u64 offset;
const u64 sz;
vmnode(u64 npg, vmntype type = EAGER);
vmnode(u64 npg, vmntype type = EAGER,
inode *i = 0, u64 off = 0, u64 s = 0);
~vmnode();
void decref();
int allocpg();
vmnode* copy();
int load(inode *ip, u64 offset, u64 sz);
int demand_load();
};
......
......@@ -54,15 +54,8 @@ dosegment(uptr a0, u64 a1)
uptr va_end = PGROUNDUP(ph.vaddr + ph.memsz);
int npg = (va_end - va_start) / PGSIZE;
if (odp) {
if ((vmn = new vmnode(npg, ONDEMAND)) == 0)
goto bad;
} else {
if ((vmn = new vmnode(npg)) == 0)
goto bad;
}
if(vmn->load(args->ip, ph.offset, ph.filesz) < 0)
if ((vmn = new vmnode(npg, odp ? ONDEMAND : EAGER,
args->ip, ph.offset, ph.filesz)) == 0)
goto bad;
if(args->vmap->insert(vmn, ph.vaddr) < 0)
......
......@@ -20,14 +20,17 @@ enum { vm_debug = 0 };
* vmnode
*/
vmnode::vmnode(u64 npg, vmntype ntype)
: npages(npg), ref(0), type(ntype), ip(0), offset(0), sz(0)
vmnode::vmnode(u64 npg, vmntype ntype, inode *i, u64 off, u64 s)
: npages(npg), ref(0), type(ntype), ip(i), offset(off), sz(s)
{
if (npg > NELEM(page))
panic("vmnode too big\n");
memset(page, 0, sizeof(page));
if (type == EAGER)
if (type == EAGER) {
assert(allocpg() == 0);
if (ip)
assert(demand_load() == 0);
}
}
vmnode::~vmnode()
......@@ -38,10 +41,8 @@ vmnode::~vmnode()
page[i] = 0;
}
}
if (ip) {
if (ip)
iput(ip);
ip = 0;
}
}
void
......@@ -74,16 +75,12 @@ vmnode::allocpg()
vmnode *
vmnode::copy()
{
vmnode *c = new vmnode(npages, type);
vmnode *c = new vmnode(npages, type,
(type==ONDEMAND) ? idup(ip) : 0,
offset, sz);
if(c == 0)
return 0;
if (type == ONDEMAND) {
c->ip = idup(ip);
c->offset = offset;
c->sz = c->sz;
}
if (!page[0]) // If first page is absent, all pages are absent
return c;
......@@ -120,18 +117,6 @@ vmnode::demand_load()
return 0;
}
int
vmnode::load(inode *iparg, u64 offarg, u64 szarg)
{
ip = iparg;
offset = offarg;
sz = szarg;
if (type == ONDEMAND)
return 0;
return demand_load();
}
/*
* vma
*/
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论