drm/i915: Remove i915->kernel_context
[linux-2.6-block.git] / drivers / gpu / drm / i915 / gt / intel_reset.c
index 8408cb84e52c66eece05ad2b05a64edf8dd39f34..95c24176ab64149e1b8c77622a409879fbad2c69 100644 (file)
@@ -41,27 +41,29 @@ static void rmw_clear_fw(struct intel_uncore *uncore, i915_reg_t reg, u32 clr)
 static void engine_skip_context(struct i915_request *rq)
 {
        struct intel_engine_cs *engine = rq->engine;
-       struct i915_gem_context *hung_ctx = rq->gem_context;
+       struct intel_context *hung_ctx = rq->context;
 
        if (!i915_request_is_active(rq))
                return;
 
        lockdep_assert_held(&engine->active.lock);
        list_for_each_entry_continue(rq, &engine->active.requests, sched.link)
-               if (rq->gem_context == hung_ctx)
+               if (rq->context == hung_ctx)
                        i915_request_skip(rq, -EIO);
 }
 
-static void client_mark_guilty(struct drm_i915_file_private *file_priv,
-                              const struct i915_gem_context *ctx)
+static void client_mark_guilty(struct i915_gem_context *ctx, bool banned)
 {
-       unsigned int score;
+       struct drm_i915_file_private *file_priv = ctx->file_priv;
        unsigned long prev_hang;
+       unsigned int score;
+
+       if (IS_ERR_OR_NULL(file_priv))
+               return;
 
-       if (i915_gem_context_is_banned(ctx))
+       score = 0;
+       if (banned)
                score = I915_CLIENT_SCORE_CONTEXT_BAN;
-       else
-               score = 0;
 
        prev_hang = xchg(&file_priv->hang_timestamp, jiffies);
        if (time_before(jiffies, prev_hang + I915_CLIENT_FAST_HANG_JIFFIES))
@@ -76,14 +78,19 @@ static void client_mark_guilty(struct drm_i915_file_private *file_priv,
        }
 }
 
-static bool context_mark_guilty(struct i915_gem_context *ctx)
+static bool mark_guilty(struct i915_request *rq)
 {
+       struct i915_gem_context *ctx;
        unsigned long prev_hang;
        bool banned;
        int i;
 
+       ctx = rq->context->gem_context;
+       if (!ctx)
+               return false;
+
        if (i915_gem_context_is_closed(ctx)) {
-               i915_gem_context_set_banned(ctx);
+               intel_context_set_banned(rq->context);
                return true;
        }
 
@@ -110,18 +117,18 @@ static bool context_mark_guilty(struct i915_gem_context *ctx)
        if (banned) {
                DRM_DEBUG_DRIVER("context %s: guilty %d, banned\n",
                                 ctx->name, atomic_read(&ctx->guilty_count));
-               i915_gem_context_set_banned(ctx);
+               intel_context_set_banned(rq->context);
        }
 
-       if (!IS_ERR_OR_NULL(ctx->file_priv))
-               client_mark_guilty(ctx->file_priv, ctx);
+       client_mark_guilty(ctx, banned);
 
        return banned;
 }
 
-static void context_mark_innocent(struct i915_gem_context *ctx)
+static void mark_innocent(struct i915_request *rq)
 {
-       atomic_inc(&ctx->active_count);
+       if (rq->context->gem_context)
+               atomic_inc(&rq->context->gem_context->active_count);
 }
 
 void __i915_request_reset(struct i915_request *rq, bool guilty)
@@ -137,11 +144,11 @@ void __i915_request_reset(struct i915_request *rq, bool guilty)
        rcu_read_lock(); /* protect the GEM context */
        if (guilty) {
                i915_request_skip(rq, -EIO);
-               if (context_mark_guilty(rq->gem_context))
+               if (mark_guilty(rq))
                        engine_skip_context(rq);
        } else {
                dma_fence_set_error(&rq->fence, -EAGAIN);
-               context_mark_innocent(rq->gem_context);
+               mark_innocent(rq);
        }
        rcu_read_unlock();
 }
@@ -742,7 +749,7 @@ static void reset_finish_engine(struct intel_engine_cs *engine)
        engine->reset.finish(engine);
        intel_uncore_forcewake_put(engine->uncore, FORCEWAKE_ALL);
 
-       intel_engine_breadcrumbs_irq(engine);
+       intel_engine_signal_breadcrumbs(engine);
 }
 
 static void reset_finish(struct intel_gt *gt, intel_engine_mask_t awake)
@@ -771,7 +778,7 @@ static void nop_submit_request(struct i915_request *request)
        i915_request_mark_complete(request);
        spin_unlock_irqrestore(&engine->active.lock, flags);
 
-       intel_engine_queue_breadcrumbs(engine);
+       intel_engine_signal_breadcrumbs(engine);
 }
 
 static void __intel_gt_set_wedged(struct intel_gt *gt)
@@ -1089,7 +1096,7 @@ int intel_engine_reset(struct intel_engine_cs *engine, const char *msg)
        bool uses_guc = intel_engine_in_guc_submission_mode(engine);
        int ret;
 
-       GEM_TRACE("%s flags=%lx\n", engine->name, gt->reset.flags);
+       ENGINE_TRACE(engine, "flags=%lx\n", gt->reset.flags);
        GEM_BUG_ON(!test_bit(I915_RESET_ENGINE + engine->id, &gt->reset.flags));
 
        if (!intel_engine_pm_get_if_awake(engine))