The two users were already really similar. By adding the flags (I hope
you like a lot of arguments in your functions), we can satisfy both
callers quite well.

Signed-off-by: Ben Widawsky <b...@bwidawsk.net>
---
 drivers/gpu/drm/i915/i915_drv.h     | 16 ++++++++++++++++
 drivers/gpu/drm/i915/i915_gem.c     | 34 +++++++++++++++++-----------------
 drivers/gpu/drm/i915/i915_gem_gtt.c | 24 +++++++-----------------
 3 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 5f4f631..c1d2bea 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2069,6 +2069,22 @@ void i915_init_vm(struct drm_i915_private *dev_priv,
 void i915_gem_free_object(struct drm_gem_object *obj);
 void i915_gem_vma_destroy(struct i915_vma *vma);
 
+#define MAX_VMA_FIND_RETRY 100
+int i915_gem_find_vm_space_generic(struct i915_address_space *vm,
+                                  struct drm_mm_node *node,
+                                  unsigned long size,
+                                  unsigned long align,
+                                  unsigned long color,
+                                  unsigned long start,
+                                  unsigned long end,
+                                  uint32_t flags,
+                                  enum drm_mm_search_flags sflags,
+                                  enum drm_mm_allocator_flags aflags,
+                                  uint8_t retry);
+#define i915_gem_find_vm_space(vm, node, size, align, color, start, end, 
flags, retry) \
+       i915_gem_find_vm_space_generic(vm, node, size, align, color, \
+                                      start, end, flags, DRM_MM_BOTTOMUP, 
retry)
+
 #define PIN_MAPPABLE 0x1
 #define PIN_NONBLOCK 0x2
 #define PIN_GLOBAL 0x4
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index de98b26..e9599e9 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3216,24 +3216,23 @@ static void i915_gem_verify_gtt(struct drm_device *dev)
 #endif
 }
 
-#define MAX_VMA_FIND_RETRY 100
-static int
-i915_gem_find_vm_space(struct i915_address_space *vm,
-                      struct drm_mm_node *node,
-                      unsigned long size,
-                      unsigned long align,
-                      unsigned long color,
-                      unsigned long start,
-                      unsigned long end,
-                      uint32_t flags,
-                      uint8_t retry)
+int i915_gem_find_vm_space_generic(struct i915_address_space *vm,
+                                   struct drm_mm_node *node,
+                                   unsigned long size,
+                                   unsigned long align,
+                                   unsigned long color,
+                                   unsigned long start,
+                                   unsigned long end,
+                                   uint32_t flags,
+                                   enum drm_mm_search_flags sflags,
+                                   enum drm_mm_allocator_flags aflags,
+                                   uint8_t retry)
 {
        int ret;
        ret = drm_mm_insert_node_in_range_generic(&vm->mm, node,
                                                  size, align, color,
                                                  start, end,
-                                                 DRM_MM_SEARCH_DEFAULT,
-                                                 DRM_MM_CREATE_DEFAULT);
+                                                 sflags, aflags);
        if (ret && (retry < MAX_VMA_FIND_RETRY)) {
                if (WARN_ON(ret != -ENOSPC))
                        return ret;
@@ -3241,10 +3240,11 @@ i915_gem_find_vm_space(struct i915_address_space *vm,
                ret = i915_gem_evict_something(vm->dev, vm, size, align, color,
                                               flags);
                if (ret == 0)
-                       return i915_gem_find_vm_space(vm, node,
-                                                     size, align, color,
-                                                     start, end, flags,
-                                                     retry++);
+                       return i915_gem_find_vm_space_generic(vm, node,
+                                                             size, align, 
color,
+                                                             start, end,
+                                                             sflags, aflags, 
flags,
+                                                             retry++);
        }
 
        return ret;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 66fcfc9..79ae83b 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -1022,7 +1022,6 @@ static int gen6_ppgtt_allocate_page_directories(struct 
i915_hw_ppgtt *ppgtt)
 {
        struct drm_device *dev = ppgtt->base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       bool retried = false;
        int ret;
 
        /* PPGTT PDEs reside in the GGTT and consists of 512 entries. The
@@ -1030,22 +1029,13 @@ static int gen6_ppgtt_allocate_page_directories(struct 
i915_hw_ppgtt *ppgtt)
         * size. We allocate at the top of the GTT to avoid fragmentation.
         */
        BUG_ON(!drm_mm_initialized(&dev_priv->gtt.base.mm));
-alloc:
-       ret = drm_mm_insert_node_in_range_generic(&dev_priv->gtt.base.mm,
-                                                 &ppgtt->node, GEN6_PD_SIZE,
-                                                 GEN6_PD_ALIGN, 0,
-                                                 0, dev_priv->gtt.base.total,
-                                                 DRM_MM_TOPDOWN);
-       if (ret == -ENOSPC && !retried) {
-               ret = i915_gem_evict_something(dev, &dev_priv->gtt.base,
-                                              GEN6_PD_SIZE, GEN6_PD_ALIGN,
-                                              I915_CACHE_NONE, 0);
-               if (ret)
-                       return ret;
-
-               retried = true;
-               goto alloc;
-       }
+       ret = i915_gem_find_vm_space_generic(&dev_priv->gtt.base, &ppgtt->node,
+                                            GEN6_PD_SIZE, GEN6_PD_ALIGN, 0,
+                                            0, dev_priv->gtt.base.total,
+                                            DRM_MM_TOPDOWN, 0,
+                                            MAX_VMA_FIND_RETRY-1);
+       if (ret)
+               return ret;
 
        if (ppgtt->node.start < dev_priv->gtt.mappable_end)
                DRM_DEBUG("Forced to use aperture for PDEs\n");
-- 
1.9.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to