OSDN Git Service

drm/i915: Balance context pinning on reset cleanup
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Tue, 13 Jan 2015 09:32:24 +0000 (11:32 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 27 Jan 2015 08:51:06 +0000 (09:51 +0100)
We pin when we submit to execlist queue. Balance
the pinning when the submitted queue is cleaned on reset.

Cc: Dave Gordon <david.s.gordon@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: Thomas Daniel <thomas.daniel@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/intel_lrc.c

index 0195e3f..2a4d1f0 100644 (file)
@@ -2656,6 +2656,10 @@ static void i915_gem_reset_ring_cleanup(struct drm_i915_private *dev_priv,
                                execlist_link);
                list_del(&submit_req->execlist_link);
                intel_runtime_pm_put(dev_priv);
+
+               if (submit_req->ctx != ring->default_context)
+                       intel_lr_context_unpin(ring, submit_req->ctx);
+
                i915_gem_context_unreference(submit_req->ctx);
                kfree(submit_req);
        }
index cbfdbdd..ec3998c 100644 (file)
@@ -1751,6 +1751,7 @@ void intel_lr_context_free(struct intel_context *ctx)
                                intel_unpin_ringbuffer_obj(ringbuf);
                                i915_gem_object_ggtt_unpin(ctx_obj);
                        }
+                       WARN_ON(ctx->engine[ring->id].unpin_count);
                        intel_destroy_ringbuffer_obj(ringbuf);
                        kfree(ringbuf);
                        drm_gem_object_unreference(&ctx_obj->base);