Lines Matching refs:mmo
254 struct i915_mmap_offset *mmo = area->vm_private_data;
255 struct drm_i915_gem_object *obj = mmo->obj;
278 obj_offset = area->vm_pgoff - drm_vma_node_start(&mmo->vma_node);
341 struct i915_mmap_offset *mmo = area->vm_private_data;
342 struct drm_i915_gem_object *obj = mmo->obj;
358 obj_offset = area->vm_pgoff - drm_vma_node_start(&mmo->vma_node);
474 /* Track the mmo associated with the fenced vma */
475 vma->mmo = mmo;
510 struct i915_mmap_offset *mmo = area->vm_private_data;
511 struct drm_i915_gem_object *obj = mmo->obj;
633 struct i915_mmap_offset *mmo, *mn;
638 spin_lock(&obj->mmo.lock);
639 rbtree_postorder_for_each_entry_safe(mmo, mn,
640 &obj->mmo.offsets, offset) {
645 if (mmo->mmap_type == I915_MMAP_TYPE_GTT)
648 spin_unlock(&obj->mmo.lock);
649 drm_vma_node_unmap(&mmo->vma_node,
651 spin_lock(&obj->mmo.lock);
653 spin_unlock(&obj->mmo.lock);
662 spin_lock(&obj->mmo.lock);
663 rb = obj->mmo.offsets.rb_node;
665 struct i915_mmap_offset *mmo =
666 rb_entry(rb, typeof(*mmo), offset);
668 if (mmo->mmap_type == mmap_type) {
669 spin_unlock(&obj->mmo.lock);
670 return mmo;
673 if (mmo->mmap_type < mmap_type)
678 spin_unlock(&obj->mmo.lock);
684 insert_mmo(struct drm_i915_gem_object *obj, struct i915_mmap_offset *mmo)
688 spin_lock(&obj->mmo.lock);
690 p = &obj->mmo.offsets.rb_node;
697 if (pos->mmap_type == mmo->mmap_type) {
698 spin_unlock(&obj->mmo.lock);
700 &mmo->vma_node);
701 kfree(mmo);
705 if (pos->mmap_type < mmo->mmap_type)
710 rb_link_node(&mmo->offset, rb, p);
711 rb_insert_color(&mmo->offset, &obj->mmo.offsets);
712 spin_unlock(&obj->mmo.lock);
714 return mmo;
723 struct i915_mmap_offset *mmo;
728 mmo = lookup_mmo(obj, mmap_type);
729 if (mmo)
732 mmo = kmalloc(sizeof(*mmo), GFP_KERNEL);
733 if (!mmo)
736 mmo->obj = obj;
737 mmo->mmap_type = mmap_type;
738 drm_vma_node_reset(&mmo->vma_node);
741 &mmo->vma_node, obj->base.size / PAGE_SIZE);
753 &mmo->vma_node, obj->base.size / PAGE_SIZE);
758 mmo = insert_mmo(obj, mmo);
759 GEM_BUG_ON(lookup_mmo(obj, mmap_type) != mmo);
762 drm_vma_node_allow_once(&mmo->vma_node, file);
763 return mmo;
766 kfree(mmo);
775 struct i915_mmap_offset *mmo;
796 mmo = mmap_offset_attach(obj, mmap_type, file);
797 if (IS_ERR(mmo))
798 return PTR_ERR(mmo);
800 *offset = drm_vma_node_offset_addr(&mmo->vma_node);
922 struct i915_mmap_offset *mmo = vma->vm_private_data;
923 struct drm_i915_gem_object *obj = mmo->obj;
931 struct i915_mmap_offset *mmo = vma->vm_private_data;
932 struct drm_i915_gem_object *obj = mmo->obj;
990 struct i915_mmap_offset *mmo,
1014 * We keep the ref on mmo->obj, not vm_file, but we require
1032 vma->vm_private_data = mmo;
1034 switch (mmo->mmap_type) {
1078 struct i915_mmap_offset *mmo = NULL;
1095 mmo = container_of(node, struct i915_mmap_offset, vma_node);
1096 obj = i915_gem_object_get_rcu(mmo->obj);
1112 return i915_gem_object_mmap(obj, mmo, vma);
1119 struct i915_mmap_offset *mmo = NULL;
1136 mmo = mmap_offset_attach(obj, mmap_type, NULL);
1137 if (IS_ERR(mmo))
1138 return PTR_ERR(mmo);
1140 vma->vm_pgoff += drm_vma_node_start(&mmo->vma_node);
1150 return i915_gem_object_mmap(obj, mmo, vma);