/* * Allocate a new, uninitialized vnode. If 'mp' is non-NULL, this is a * marker vnode. */ vnode_t * vnalloc(struct mount *mp) { vnode_t *vp; vp = pool_cache_get(vnode_cache, PR_WAITOK); KASSERT(vp != NULL); memset(vp, 0, sizeof(*vp)); uvm_obj_init(&vp->v_uobj, &uvm_vnodeops, true, 0); cv_init(&vp->v_cv, "vnode"); /* * Done by memset() above. * LIST_INIT(&vp->v_nclist); * LIST_INIT(&vp->v_dnclist); */ if (mp != NULL) { vp->v_mount = mp; vp->v_type = VBAD; vp->v_iflag = VI_MARKER; } else { rw_init(&vp->v_lock); } return vp; }
void uvm_loan_init(void) { mutex_init(&uvm_loanzero_lock, MUTEX_DEFAULT, IPL_NONE); uvm_obj_init(&uvm_loanzero_object, &ulz_pager, false, 0); uvm_obj_setlock(&uvm_loanzero_object, &uvm_loanzero_lock); UVMHIST_INIT(loanhist, 300); }
/* * Allocate a new marker vnode. */ vnode_t * vnalloc_marker(struct mount *mp) { vnode_impl_t *node; vnode_t *vp; node = pool_cache_get(vcache.pool, PR_WAITOK); memset(node, 0, sizeof(*node)); vp = VIMPL_TO_VNODE(node); uvm_obj_init(&vp->v_uobj, &uvm_vnodeops, true, 0); vp->v_mount = mp; vp->v_type = VBAD; node->vi_state = VS_MARKER; return vp; }
/** * Initialize an already allocated GEM object of the specified size with * no GEM provided backing store. Instead the caller is responsible for * backing the object and handling it. */ int drm_gem_private_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size) { BUG_ON((size & (PAGE_SIZE - 1)) != 0); obj->dev = dev; #ifdef __NetBSD__ obj->gemo_shm_uao = NULL; KASSERT(drm_core_check_feature(dev, DRIVER_GEM)); KASSERT(dev->driver->gem_uvm_ops != NULL); uvm_obj_init(&obj->gemo_uvmobj, dev->driver->gem_uvm_ops, true, 1); #else obj->filp = NULL; #endif kref_init(&obj->refcount); atomic_set(&obj->handle_count, 0); obj->size = size; return 0; }
/** * Initialize an already allocated GEM object of the specified size with * shmfs backing store. */ int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size) { BUG_ON((size & (PAGE_SIZE - 1)) != 0); obj->dev = dev; #ifdef __NetBSD__ obj->gemo_shm_uao = uao_create(size, 0); KASSERT(drm_core_check_feature(dev, DRIVER_GEM)); KASSERT(dev->driver->gem_uvm_ops != NULL); uvm_obj_init(&obj->gemo_uvmobj, dev->driver->gem_uvm_ops, true, 1); #else obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE); if (IS_ERR(obj->filp)) return PTR_ERR(obj->filp); #endif kref_init(&obj->refcount); atomic_set(&obj->handle_count, 0); obj->size = size; return 0; }