static vmr_t* __vmr_alloc(uintptr_t addr, size_t length, file_t* file, size_t offset, unsigned refcnt, int prot) { if (!vmrs) { spinlock_lock(&vm_lock); if (!vmrs) vmrs = (vmr_t*)__page_alloc(); spinlock_unlock(&vm_lock); } for (vmr_t* v = vmrs; v < vmrs + MAX_VMR; v++) { if (v->refcnt == 0) { if (file) file_incref(file); v->addr = addr; v->length = length; v->file = file; v->offset = offset; v->refcnt = refcnt; v->prot = prot; return v; } } return NULL; }
static vmr_t* __vmr_alloc(uintptr_t addr, size_t length, file_t* file, size_t offset, unsigned refcnt, int prot) { for (vmr_t* v = vmrs; v < vmrs + MAX_VMR; v++) { if (v->refcnt == 0) { if (file) file_incref(file); v->addr = addr; v->length = length; v->file = file; v->offset = offset; v->refcnt = refcnt; v->prot = prot; return v; } } return NULL; }