Re: [Intel-gfx] [PATCH 3/5] drm/i915/contexts: Switch to default on resume

2012-08-15 Thread Chris Wilson
On Tue, 14 Aug 2012 14:35:15 -0700, Ben Widawsky b...@bwidawsk.net wrote:
 In order to make the HW state CCID match with what we think it should
 be, we must order a switch to the default context.
 
 The really sad thing here is that the switch can potentially fail, and
 as such we have to assume contexts no longer work. There is likely room
 for improvement but until we actually start seeing the case occur, I
 think it should be fine.
 
 This was accidentally left this out of the first series, noticed by
 Chris Wilson.

However that do_switch() is a no-op as it spots that the
ring-last_ctx_obj is the DEFAULT_CONTEXT (saved across sr) and we exit
early.

The only clean way I could see was to extract the actual set_switch
portion of do_switch() (i.e. discard the initial checks and pre-/post-op
pinning). Which brings you nicely into the next few patches...
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 3/5] drm/i915/contexts: Switch to default on resume

2012-08-15 Thread Ben Widawsky

On 2012-08-15 02:18, Chris Wilson wrote:
On Tue, 14 Aug 2012 14:35:15 -0700, Ben Widawsky b...@bwidawsk.net 
wrote:
In order to make the HW state CCID match with what we think it 
should

be, we must order a switch to the default context.

The really sad thing here is that the switch can potentially fail, 
and
as such we have to assume contexts no longer work. There is likely 
room

for improvement but until we actually start seeing the case occur, I
think it should be fine.

This was accidentally left this out of the first series, noticed by
Chris Wilson.


However that do_switch() is a no-op as it spots that the
ring-last_ctx_obj is the DEFAULT_CONTEXT (saved across sr) and we 
exit

early.

The only clean way I could see was to extract the actual set_switch
portion of do_switch() (i.e. discard the initial checks and 
pre-/post-op

pinning). Which brings you nicely into the next few patches...
-Chris


Agreed, I was thinking re-ordering the series would just magically 
solve all such issues :-)


--
Ben Widawsky, Intel Open Source Technology Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 3/5] drm/i915/contexts: Switch to default on resume

2012-08-14 Thread Ben Widawsky
In order to make the HW state CCID match with what we think it should
be, we must order a switch to the default context.

The really sad thing here is that the switch can potentially fail, and
as such we have to assume contexts no longer work. There is likely room
for improvement but until we actually start seeing the case occur, I
think it should be fine.

This was accidentally left this out of the first series, noticed by
Chris Wilson.

Signed-off-by: Ben Widawsky b...@bwidawsk.net
---
 drivers/gpu/drm/i915/i915_gem_context.c | 17 ++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
b/drivers/gpu/drm/i915/i915_gem_context.c
index 5c2d354..3e884dc 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -244,15 +244,26 @@ void i915_gem_context_init(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev-dev_private;
uint32_t ctx_size;
 
+   if (dev_priv-hw_contexts_disabled)
+   return;
+
if (!HAS_HW_CONTEXTS(dev)) {
dev_priv-hw_contexts_disabled = true;
return;
}
 
-   /* If called from reset, or thaw... we've been here already */
-   if (dev_priv-hw_contexts_disabled ||
-   dev_priv-ring[RCS].default_context)
+   /* If called from reset, or thaw we want to switch back to the default
+* context so our HW CCID matches what we think it should be in 
software.
+*/
+   if (dev_priv-ring[RCS].default_context) {
+   int ret = do_switch(dev_priv-ring[RCS].default_context);
+   if (ret) {
+   DRM_ERROR(HW contexts were broken after resume\n);
+   i915_gem_context_fini(dev);
+   dev_priv-hw_contexts_disabled = true;
+   }
return;
+   }
 
ctx_size = get_context_size(dev);
dev_priv-hw_context_size = get_context_size(dev);
-- 
1.7.11.4

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