[Intel-gfx] [PATCH v2] Remove custom dumb_map_offset implementations in i915 driver

2023-11-10 Thread Dipam Turkar
Making i915 use drm_gem_create_mmap_offset() instead of its custom
implementations for associating GEM object with a fake offset.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 21 -
 drivers/gpu/drm/i915/gem/i915_gem_mman.h |  4 
 drivers/gpu/drm/i915/i915_driver.c   |  3 ++-
 3 files changed, 2 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index aa4d842d4c5a..71d621a1f249 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -771,27 +771,6 @@ __assign_mmap_offset_handle(struct drm_file *file,
return err;
 }
 
-int
-i915_gem_dumb_mmap_offset(struct drm_file *file,
- struct drm_device *dev,
- u32 handle,
- u64 *offset)
-{
-   struct drm_i915_private *i915 = to_i915(dev);
-   enum i915_mmap_type mmap_type;
-
-   if (HAS_LMEM(to_i915(dev)))
-   mmap_type = I915_MMAP_TYPE_FIXED;
-   else if (pat_enabled())
-   mmap_type = I915_MMAP_TYPE_WC;
-   else if (!i915_ggtt_has_aperture(to_gt(i915)->ggtt))
-   return -ENODEV;
-   else
-   mmap_type = I915_MMAP_TYPE_GTT;
-
-   return __assign_mmap_offset_handle(file, handle, mmap_type, offset);
-}
-
 /**
  * i915_gem_mmap_offset_ioctl - prepare an object for GTT mmap'ing
  * @dev: DRM device
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.h 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.h
index 196417fd0f5c..253435795caf 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.h
@@ -20,10 +20,6 @@ struct mutex;
 int i915_gem_mmap_gtt_version(void);
 int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma);
 
-int i915_gem_dumb_mmap_offset(struct drm_file *file_priv,
- struct drm_device *dev,
- u32 handle, u64 *offset);
-
 void __i915_gem_object_release_mmap_gtt(struct drm_i915_gem_object *obj);
 void i915_gem_object_release_mmap_gtt(struct drm_i915_gem_object *obj);
 
diff --git a/drivers/gpu/drm/i915/i915_driver.c 
b/drivers/gpu/drm/i915/i915_driver.c
index d50347e5773a..48d7e53c49d6 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -42,6 +42,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -1826,7 +1827,7 @@ static const struct drm_driver i915_drm_driver = {
.gem_prime_import = i915_gem_prime_import,
 
.dumb_create = i915_gem_dumb_create,
-   .dumb_map_offset = i915_gem_dumb_mmap_offset,
+   .dumb_map_offset = drm_gem_dumb_map_offset,
 
.ioctls = i915_ioctls,
.num_ioctls = ARRAY_SIZE(i915_ioctls),
-- 
2.34.1



[Intel-gfx] [PATCH] Remove custom dumb_map_offset implementations in i915 driver

2023-11-10 Thread Dipam Turkar
Making i915 use drm_gem_create_mmap_offset() instead of its custom
implementations for associating GEM object with a fake offset.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 192 ---
 drivers/gpu/drm/i915/gem/i915_gem_mman.h |   4 -
 drivers/gpu/drm/i915/i915_driver.c   |   3 +-
 3 files changed, 2 insertions(+), 197 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index aa4d842d4c5a..6b73fe509270 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -600,198 +600,6 @@ void i915_gem_object_release_mmap_offset(struct 
drm_i915_gem_object *obj)
spin_unlock(>mmo.lock);
 }
 
-static struct i915_mmap_offset *
-lookup_mmo(struct drm_i915_gem_object *obj,
-  enum i915_mmap_type mmap_type)
-{
-   struct rb_node *rb;
-
-   spin_lock(>mmo.lock);
-   rb = obj->mmo.offsets.rb_node;
-   while (rb) {
-   struct i915_mmap_offset *mmo =
-   rb_entry(rb, typeof(*mmo), offset);
-
-   if (mmo->mmap_type == mmap_type) {
-   spin_unlock(>mmo.lock);
-   return mmo;
-   }
-
-   if (mmo->mmap_type < mmap_type)
-   rb = rb->rb_right;
-   else
-   rb = rb->rb_left;
-   }
-   spin_unlock(>mmo.lock);
-
-   return NULL;
-}
-
-static struct i915_mmap_offset *
-insert_mmo(struct drm_i915_gem_object *obj, struct i915_mmap_offset *mmo)
-{
-   struct rb_node *rb, **p;
-
-   spin_lock(>mmo.lock);
-   rb = NULL;
-   p = >mmo.offsets.rb_node;
-   while (*p) {
-   struct i915_mmap_offset *pos;
-
-   rb = *p;
-   pos = rb_entry(rb, typeof(*pos), offset);
-
-   if (pos->mmap_type == mmo->mmap_type) {
-   spin_unlock(>mmo.lock);
-   drm_vma_offset_remove(obj->base.dev->vma_offset_manager,
- >vma_node);
-   kfree(mmo);
-   return pos;
-   }
-
-   if (pos->mmap_type < mmo->mmap_type)
-   p = >rb_right;
-   else
-   p = >rb_left;
-   }
-   rb_link_node(>offset, rb, p);
-   rb_insert_color(>offset, >mmo.offsets);
-   spin_unlock(>mmo.lock);
-
-   return mmo;
-}
-
-static struct i915_mmap_offset *
-mmap_offset_attach(struct drm_i915_gem_object *obj,
-  enum i915_mmap_type mmap_type,
-  struct drm_file *file)
-{
-   struct drm_i915_private *i915 = to_i915(obj->base.dev);
-   struct i915_mmap_offset *mmo;
-   int err;
-
-   GEM_BUG_ON(obj->ops->mmap_offset || obj->ops->mmap_ops);
-
-   mmo = lookup_mmo(obj, mmap_type);
-   if (mmo)
-   goto out;
-
-   mmo = kmalloc(sizeof(*mmo), GFP_KERNEL);
-   if (!mmo)
-   return ERR_PTR(-ENOMEM);
-
-   mmo->obj = obj;
-   mmo->mmap_type = mmap_type;
-   drm_vma_node_reset(>vma_node);
-
-   err = drm_vma_offset_add(obj->base.dev->vma_offset_manager,
->vma_node, obj->base.size / PAGE_SIZE);
-   if (likely(!err))
-   goto insert;
-
-   /* Attempt to reap some mmap space from dead objects */
-   err = intel_gt_retire_requests_timeout(to_gt(i915), 
MAX_SCHEDULE_TIMEOUT,
-  NULL);
-   if (err)
-   goto err;
-
-   i915_gem_drain_freed_objects(i915);
-   err = drm_vma_offset_add(obj->base.dev->vma_offset_manager,
->vma_node, obj->base.size / PAGE_SIZE);
-   if (err)
-   goto err;
-
-insert:
-   mmo = insert_mmo(obj, mmo);
-   GEM_BUG_ON(lookup_mmo(obj, mmap_type) != mmo);
-out:
-   if (file)
-   drm_vma_node_allow_once(>vma_node, file);
-   return mmo;
-
-err:
-   kfree(mmo);
-   return ERR_PTR(err);
-}
-
-static int
-__assign_mmap_offset(struct drm_i915_gem_object *obj,
-enum i915_mmap_type mmap_type,
-u64 *offset, struct drm_file *file)
-{
-   struct i915_mmap_offset *mmo;
-
-   if (i915_gem_object_never_mmap(obj))
-   return -ENODEV;
-
-   if (obj->ops->mmap_offset)  {
-   if (mmap_type != I915_MMAP_TYPE_FIXED)
-   return -ENODEV;
-
-   *offset = obj->ops->mmap_offset(obj);
-   return 0;
-   }
-
-   if (mmap_type == I915_MMAP_TYPE_FIXED)
-   return -ENODEV;
-
-   if (mmap_type != I915_MMAP_TYPE_GTT &&
-   !i915_gem_object_has_struct_page(obj) &&am