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: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
2fa48d8d4a
commit
a45d0f6a7f
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
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++) {
|
||||||
|
|
Loading…
Reference in New Issue