Commit a45d0f6a authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter

drm/i915: Generalize default context setup

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: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 2fa48d8d
...@@ -212,9 +212,9 @@ static inline bool is_default_context(struct i915_hw_context *ctx) ...@@ -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 * context state of the GPU for applications that don't utilize HW contexts, as
* well as an idle case. * 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; struct i915_hw_context *ctx;
int ret; int ret;
...@@ -222,7 +222,7 @@ static int create_default_context(struct drm_device *dev) ...@@ -222,7 +222,7 @@ static int create_default_context(struct drm_device *dev)
ctx = create_hw_context(dev, NULL); ctx = create_hw_context(dev, NULL);
if (IS_ERR(ctx)) if (IS_ERR(ctx))
return PTR_ERR(ctx); return ctx;
/* We may need to do things with the shrinker which require us to /* We may need to do things with the shrinker which require us to
* immediately switch back to the default context. This can cause a * immediately switch back to the default context. This can cause a
...@@ -237,14 +237,12 @@ static int create_default_context(struct drm_device *dev) ...@@ -237,14 +237,12 @@ static int create_default_context(struct drm_device *dev)
goto err_destroy; goto err_destroy;
} }
dev_priv->ring[RCS].default_context = ctx;
DRM_DEBUG_DRIVER("Default HW context loaded\n"); DRM_DEBUG_DRIVER("Default HW context loaded\n");
return 0; return ctx;
err_destroy: err_destroy:
i915_gem_context_unreference(ctx); i915_gem_context_unreference(ctx);
return ret; return ERR_PTR(ret);
} }
void i915_gem_context_reset(struct drm_device *dev) void i915_gem_context_reset(struct drm_device *dev)
...@@ -294,7 +292,7 @@ int i915_gem_context_init(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 drm_i915_private *dev_priv = dev->dev_private;
struct intel_ring_buffer *ring; struct intel_ring_buffer *ring;
int i, ret; int i;
if (!HAS_HW_CONTEXTS(dev)) if (!HAS_HW_CONTEXTS(dev))
return 0; return 0;
...@@ -311,11 +309,12 @@ int i915_gem_context_init(struct drm_device *dev) ...@@ -311,11 +309,12 @@ int i915_gem_context_init(struct drm_device *dev)
return -E2BIG; return -E2BIG;
} }
ret = create_default_context(dev);
if (ret) { dev_priv->ring[RCS].default_context = create_default_context(dev);
DRM_DEBUG_DRIVER("Disabling HW Contexts; create failed %d\n", if (IS_ERR_OR_NULL(dev_priv->ring[RCS].default_context)) {
ret); DRM_DEBUG_DRIVER("Disabling HW Contexts; create failed %ld\n",
return ret; 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++) { for (i = RCS + 1; i < I915_NUM_RINGS; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment