diff options
| author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-05-30 09:16:30 -0400 |
|---|---|---|
| committer | Jani Nikula <jani.nikula@intel.com> | 2014-06-24 07:48:41 -0400 |
| commit | 967ab6b177ee7111383585639e375d9f67638010 (patch) | |
| tree | 6489fb3261415c7fa26465aab87fc8b208c94d23 | |
| parent | 56c4b63aaf4c2cd91966b2a5e69e5367bea60bbe (diff) | |
drm/i915: Only mark the ctx as initialised after a SET_CONTEXT operation
Fallout from
commit 46470fc932ac8a0e8317a220b3f4ea4ed903338e
Author: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Date: Wed May 21 19:01:06 2014 +0300
drm/i915: Add null state batch to active list
undid the earlier fix of only marking the ctx as initialised after it is
saved by the hardware during a SET_CONTEXT operation:
commit ad1d219974a3d13412268525309c5892f6779ae9
Author: Ben Widawsky <benjamin.widawsky@intel.com>
Date: Sat Dec 28 13:31:49 2013 -0800
drm/i915: set ctx->initialized only after RCS
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Damien Lespiau <damien.lespiau@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
[Jani: add reference to the earlier fix in the commit messsage.]
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_context.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index 3ffe308d5893..a5ddf3bce9c3 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c | |||
| @@ -598,6 +598,7 @@ static int do_switch(struct intel_engine_cs *ring, | |||
| 598 | struct intel_context *from = ring->last_context; | 598 | struct intel_context *from = ring->last_context; |
| 599 | struct i915_hw_ppgtt *ppgtt = ctx_to_ppgtt(to); | 599 | struct i915_hw_ppgtt *ppgtt = ctx_to_ppgtt(to); |
| 600 | u32 hw_flags = 0; | 600 | u32 hw_flags = 0; |
| 601 | bool uninitialized = false; | ||
| 601 | int ret, i; | 602 | int ret, i; |
| 602 | 603 | ||
| 603 | if (from != NULL && ring == &dev_priv->ring[RCS]) { | 604 | if (from != NULL && ring == &dev_priv->ring[RCS]) { |
| @@ -696,19 +697,20 @@ static int do_switch(struct intel_engine_cs *ring, | |||
| 696 | i915_gem_context_unreference(from); | 697 | i915_gem_context_unreference(from); |
| 697 | } | 698 | } |
| 698 | 699 | ||
| 700 | uninitialized = !to->is_initialized && from == NULL; | ||
| 701 | to->is_initialized = true; | ||
| 702 | |||
| 699 | done: | 703 | done: |
| 700 | i915_gem_context_reference(to); | 704 | i915_gem_context_reference(to); |
| 701 | ring->last_context = to; | 705 | ring->last_context = to; |
| 702 | to->last_ring = ring; | 706 | to->last_ring = ring; |
| 703 | 707 | ||
| 704 | if (ring->id == RCS && !to->is_initialized && from == NULL) { | 708 | if (uninitialized) { |
| 705 | ret = i915_gem_render_state_init(ring); | 709 | ret = i915_gem_render_state_init(ring); |
| 706 | if (ret) | 710 | if (ret) |
| 707 | DRM_ERROR("init render state: %d\n", ret); | 711 | DRM_ERROR("init render state: %d\n", ret); |
| 708 | } | 712 | } |
| 709 | 713 | ||
| 710 | to->is_initialized = true; | ||
| 711 | |||
| 712 | return 0; | 714 | return 0; |
| 713 | 715 | ||
| 714 | unpin_out: | 716 | unpin_out: |
