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

more const

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