On Fri, Jul 13, 2012 at 02:14:04PM +0100, Chris Wilson wrote: > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk> > Cc: Ben Widawsky <ben at bwidawsk.net> > --- > drivers/gpu/drm/i915/i915_gem_context.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c > index 9ae3f2c..90857f8 100644 > --- a/drivers/gpu/drm/i915/i915_gem_context.c > +++ b/drivers/gpu/drm/i915/i915_gem_context.c > @@ -225,6 +225,13 @@ static int create_default_context(struct drm_i915_private *dev_priv) > return ret; > } > > + ret = i915_gem_object_set_to_gtt_domain(ctx->obj, true); > + if (ret) { > + i915_gem_object_unpin(ctx->obj); > + do_destroy(ctx); > + return ret; > + } > + > ret = do_switch(NULL, ctx, 0); > if (ret) { > i915_gem_object_unpin(ctx->obj); > @@ -396,8 +403,6 @@ static int do_switch(struct drm_i915_gem_object *from_obj, > * MI_SET_CONTEXT instead of when the next seqno has completed. > */ > if (from_obj != NULL) { > - from_obj->base.read_domains = I915_GEM_DOMAIN_INSTRUCTION; > - i915_gem_object_move_to_active(from_obj, ring, seqno); > /* As long as MI_SET_CONTEXT is serializing, ie. it flushes the > * whole damn pipeline, we don't need to explicitly mark the > * object dirty. The only exception is that the context must be > @@ -405,6 +410,9 @@ static int do_switch(struct drm_i915_gem_object *from_obj, > * able to defer doing this until we know the object would be > * swapped, but there is no way to do that yet. > */ > + from_obj->base.write_domain = I915_GEM_DOMAIN_INSTRUCTION; > + from_obj->base.read_domains = I915_GEM_DOMAIN_INSTRUCTION; > + i915_gem_object_move_to_active(from_obj, ring, seqno); > from_obj->dirty = 1; > BUG_ON(from_obj->ring != to->ring); > i915_gem_object_unpin(from_obj); I think only the first hunk should be part of this patch - the later two hunks make more sense squashed together with the last patch. At least that would avoid me going a bit wtf here and then again on the last patch where the from_obj->dirty=1 gets removed and smashed into move_to_active. Until I've realized what's going on here ;-) -Daniel -- Daniel Vetter Mail: daniel at ffwll.ch Mobile: +41 (0)79 365 57 48