Rearrange the initialization code to try to special case the aliasing
PPGTT less, and provide usable interfaces for the general case later.

Signed-off-by: Ben Widawsky <b...@bwidawsk.net>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 4aca8b2..89df963 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -890,15 +890,11 @@ err_pt_alloc:
        return ret;
 }
 
-static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
+static int i915_gem_init_ppgtt(struct drm_device *dev,
+                              struct i915_hw_ppgtt *ppgtt)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct i915_hw_ppgtt *ppgtt;
-       int ret;
-
-       ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
-       if (!ppgtt)
-               return -ENOMEM;
+       int ret = 0;
 
        ppgtt->base.dev = dev;
 
@@ -909,13 +905,9 @@ static int i915_gem_init_aliasing_ppgtt(struct drm_device 
*dev)
        else
                BUG();
 
-       if (ret)
-               kfree(ppgtt);
-       else {
-               dev_priv->mm.aliasing_ppgtt = ppgtt;
+       if (!ret)
                drm_mm_init(&ppgtt->base.mm, ppgtt->base.start,
                            ppgtt->base.total);
-       }
 
        return ret;
 }
@@ -1432,11 +1424,23 @@ void i915_gem_init_global_gtt(struct drm_device *dev)
 
        i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
        if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
+               struct i915_hw_ppgtt *ppgtt;
                int ret;
 
-               ret = i915_gem_init_aliasing_ppgtt(dev);
-               if (ret)
-                       DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
+               ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
+               if (!ppgtt) {
+                       DRM_ERROR("Aliased PPGTT setup failed -ENOMEM\n");
+                       return;
+               }
+
+               ret = i915_gem_init_ppgtt(dev, ppgtt);
+               if (!ret) {
+                       dev_priv->mm.aliasing_ppgtt = ppgtt;
+                       return;
+               }
+
+               kfree(ppgtt);
+               DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
        }
 }
 
-- 
1.8.4.2

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

Reply via email to