Lines Matching defs:mmo
288 struct i915_mmap_offset *mmo = area->vm_private_data;
289 struct drm_i915_gem_object *obj = mmo->obj;
367 struct i915_mmap_offset *mmo = area->vm_private_data;
368 struct drm_i915_gem_object *obj = mmo->obj;
384 obj_offset = area->vm_pgoff - drm_vma_node_start(&mmo->vma_node);
498 /* Track the mmo associated with the fenced vma */
499 vma->mmo = mmo;
534 struct i915_mmap_offset *mmo = area->vm_private_data;
535 struct drm_i915_gem_object *obj = mmo->obj;
615 vm_fault_cpu(struct i915_mmap_offset *mmo, struct uvm_faultinfo *ufi,
619 struct drm_i915_gem_object *obj = mmo->obj;
646 switch (mmo->mmap_type) {
735 vm_fault_gtt(struct i915_mmap_offset *mmo, struct uvm_faultinfo *ufi,
740 struct drm_i915_gem_object *obj = mmo->obj;
756 obj_offset = (entry->offset >> PAGE_SHIFT) - drm_vma_node_start(&mmo->vma_node);
871 /* Track the mmo associated with the fenced vma */
872 vma->mmo = mmo;
913 struct i915_mmap_offset *mmo = NULL;
920 mmo = container_of(node, struct i915_mmap_offset, vma_node);
922 if (!mmo) {
927 KASSERT(gem_obj == &mmo->obj->base);
929 if (mmo->mmap_type == I915_MMAP_TYPE_GTT)
930 return vm_fault_gtt(mmo, ufi, vaddr, access_type);
932 return vm_fault_cpu(mmo, ufi, access_type);
1014 struct i915_mmap_offset *mmo, *mn;
1019 spin_lock(&obj->mmo.lock);
1020 rbtree_postorder_for_each_entry_safe(mmo, mn,
1021 &obj->mmo.offsets, offset) {
1026 if (mmo->mmap_type == I915_MMAP_TYPE_GTT)
1029 spin_unlock(&obj->mmo.lock);
1031 drm_vma_node_unmap(&mmo->vma_node,
1034 spin_lock(&obj->mmo.lock);
1036 spin_unlock(&obj->mmo.lock);
1045 spin_lock(&obj->mmo.lock);
1046 rb = obj->mmo.offsets.rb_node;
1048 struct i915_mmap_offset *mmo =
1049 rb_entry(rb, typeof(*mmo), offset);
1051 if (mmo->mmap_type == mmap_type) {
1052 spin_unlock(&obj->mmo.lock);
1053 return mmo;
1056 if (mmo->mmap_type < mmap_type)
1061 spin_unlock(&obj->mmo.lock);
1067 insert_mmo(struct drm_i915_gem_object *obj, struct i915_mmap_offset *mmo)
1071 spin_lock(&obj->mmo.lock);
1073 p = &obj->mmo.offsets.rb_node;
1080 if (pos->mmap_type == mmo->mmap_type) {
1081 spin_unlock(&obj->mmo.lock);
1083 &mmo->vma_node);
1084 kfree(mmo);
1088 if (pos->mmap_type < mmo->mmap_type)
1093 rb_link_node(&mmo->offset, rb, p);
1094 rb_insert_color(&mmo->offset, &obj->mmo.offsets);
1095 spin_unlock(&obj->mmo.lock);
1097 return mmo;
1106 struct i915_mmap_offset *mmo;
1111 mmo = lookup_mmo(obj, mmap_type);
1112 if (mmo)
1115 mmo = kmalloc(sizeof(*mmo), GFP_KERNEL);
1116 if (!mmo)
1119 mmo->obj = obj;
1120 mmo->mmap_type = mmap_type;
1121 drm_vma_node_reset(&mmo->vma_node);
1124 &mmo->vma_node, obj->base.size / PAGE_SIZE);
1136 &mmo->vma_node, obj->base.size / PAGE_SIZE);
1141 mmo = insert_mmo(obj, mmo);
1142 GEM_BUG_ON(lookup_mmo(obj, mmap_type) != mmo);
1145 drm_vma_node_allow_once(&mmo->vma_node, file);
1146 return mmo;
1149 kfree(mmo);
1158 struct i915_mmap_offset *mmo;
1179 mmo = mmap_offset_attach(obj, mmap_type, file);
1180 if (IS_ERR(mmo))
1181 return PTR_ERR(mmo);
1183 *offset = drm_vma_node_offset_addr(&mmo->vma_node);
1307 struct i915_mmap_offset *mmo = vma->vm_private_data;
1308 struct drm_i915_gem_object *obj = mmo->obj;
1316 struct i915_mmap_offset *mmo = vma->vm_private_data;
1317 struct drm_i915_gem_object *obj = mmo->obj;
1379 struct i915_mmap_offset *mmo,
1403 * We keep the ref on mmo->obj, not vm_file, but we require
1421 vma->vm_private_data = mmo;
1423 switch (mmo->mmap_type) {
1467 struct i915_mmap_offset *mmo = NULL;
1484 mmo = container_of(node, struct i915_mmap_offset, vma_node);
1485 obj = i915_gem_object_get_rcu(mmo->obj);
1501 return i915_gem_object_mmap(obj, mmo, vma);
1520 struct i915_mmap_offset *mmo = NULL;
1537 mmo = container_of(node, struct i915_mmap_offset, vma_node);
1538 obj = i915_gem_object_get_rcu(mmo->obj);
1574 struct i915_mmap_offset *mmo = NULL;
1591 mmo = mmap_offset_attach(obj, mmap_type, NULL);
1592 if (IS_ERR(mmo))
1593 return PTR_ERR(mmo);
1595 vma->vm_pgoff += drm_vma_node_start(&mmo->vma_node);
1605 return i915_gem_object_mmap(obj, mmo, vma);