drm/i915: Generalize default context setup
authorBen Widawsky <benjamin.widawsky@intel.com>
Fri, 6 Dec 2013 22:11:05 +0000 (14:11 -0800)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 18 Dec 2013 14:27:56 +0000 (15:27 +0100)
The plan to to make every file descriptor have a default context. To
accommodate this, generalize out default context setup function so it
can be used at file open time.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_context.c

index 08e48b29a8d2ced7121d9e68c15890093048472e..149cf007c38eadf9f81e4c08398e600e0dc32f5c 100644 (file)
@@ -212,9 +212,9 @@ static inline bool is_default_context(struct i915_hw_context *ctx)
  * context state of the GPU for applications that don't utilize HW contexts, as
  * well as an idle case.
  */
-static int create_default_context(struct drm_device *dev)
+static struct i915_hw_context *
+create_default_context(struct drm_device *dev)
 {
-       struct drm_i915_private *dev_priv = dev->dev_private;
        struct i915_hw_context *ctx;
        int ret;
 
@@ -222,7 +222,7 @@ static int create_default_context(struct drm_device *dev)
 
        ctx = create_hw_context(dev, NULL);
        if (IS_ERR(ctx))
-               return PTR_ERR(ctx);
+               return ctx;
 
        /* We may need to do things with the shrinker which require us to
         * immediately switch back to the default context. This can cause a
@@ -237,14 +237,12 @@ static int create_default_context(struct drm_device *dev)
                goto err_destroy;
        }
 
-       dev_priv->ring[RCS].default_context = ctx;
-
        DRM_DEBUG_DRIVER("Default HW context loaded\n");
-       return 0;
+       return ctx;
 
 err_destroy:
        i915_gem_context_unreference(ctx);
-       return ret;
+       return ERR_PTR(ret);
 }
 
 void i915_gem_context_reset(struct drm_device *dev)
@@ -294,7 +292,7 @@ int i915_gem_context_init(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_ring_buffer *ring;
-       int i, ret;
+       int i;
 
        if (!HAS_HW_CONTEXTS(dev))
                return 0;
@@ -311,11 +309,12 @@ int i915_gem_context_init(struct drm_device *dev)
                return -E2BIG;
        }
 
-       ret = create_default_context(dev);
-       if (ret) {
-               DRM_DEBUG_DRIVER("Disabling HW Contexts; create failed %d\n",
-                                ret);
-               return ret;
+
+       dev_priv->ring[RCS].default_context = create_default_context(dev);
+       if (IS_ERR_OR_NULL(dev_priv->ring[RCS].default_context)) {
+               DRM_DEBUG_DRIVER("Disabling HW Contexts; create failed %ld\n",
+                                PTR_ERR(dev_priv->ring[RCS].default_context));
+               return PTR_ERR(dev_priv->ring[RCS].default_context);
        }
 
        for (i = RCS + 1; i < I915_NUM_RINGS; i++) {