From: Greg Kroah-Hartman Date: Wed, 12 Apr 2017 13:54:46 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.10.11~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cc4497a1bce704472b61b1e2b8880efb82a41110;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: revert-drm-i915-execlists-reset-ring-registers-upon-resume.patch --- diff --git a/queue-4.9/revert-drm-i915-execlists-reset-ring-registers-upon-resume.patch b/queue-4.9/revert-drm-i915-execlists-reset-ring-registers-upon-resume.patch new file mode 100644 index 00000000000..b5915159b55 --- /dev/null +++ b/queue-4.9/revert-drm-i915-execlists-reset-ring-registers-upon-resume.patch @@ -0,0 +1,87 @@ +From 15b0378860aab3433da7424bd733d92b189c31cf Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Wed, 12 Apr 2017 15:49:39 +0200 +Subject: [PATCH] Revert "drm/i915/execlists: Reset RING registers upon resume" + +This reverts commit f2a0409a08502d64fbe3990354dff5902b08d2fb which is +commit bafb2f7d4755bf1571bd5e9a03b97f3fc4fe69ae upstream. + +It was reported to have problems. + +Cc: Jani Nikula +Cc: Chris Wilson +Cc: Joonas Lahtinen +Cc: Eric Blau +Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org +--- + drivers/gpu/drm/i915/intel_lrc.c | 58 +++++++++++++++------------------------ + 1 file changed, 23 insertions(+), 35 deletions(-) + +--- a/drivers/gpu/drm/i915/intel_lrc.c ++++ b/drivers/gpu/drm/i915/intel_lrc.c +@@ -2152,42 +2152,30 @@ error_deref_obj: + + void intel_lr_context_resume(struct drm_i915_private *dev_priv) + { ++ struct i915_gem_context *ctx = dev_priv->kernel_context; + struct intel_engine_cs *engine; +- struct i915_gem_context *ctx; + +- /* Because we emit WA_TAIL_DWORDS there may be a disparity +- * between our bookkeeping in ce->ring->head and ce->ring->tail and +- * that stored in context. As we only write new commands from +- * ce->ring->tail onwards, everything before that is junk. If the GPU +- * starts reading from its RING_HEAD from the context, it may try to +- * execute that junk and die. +- * +- * So to avoid that we reset the context images upon resume. For +- * simplicity, we just zero everything out. +- */ +- list_for_each_entry(ctx, &dev_priv->context_list, link) { +- for_each_engine(engine, dev_priv) { +- struct intel_context *ce = &ctx->engine[engine->id]; +- u32 *reg; +- +- if (!ce->state) +- continue; +- +- reg = i915_gem_object_pin_map(ce->state->obj, +- I915_MAP_WB); +- if (WARN_ON(IS_ERR(reg))) +- continue; +- +- reg += LRC_STATE_PN * PAGE_SIZE / sizeof(*reg); +- reg[CTX_RING_HEAD+1] = 0; +- reg[CTX_RING_TAIL+1] = 0; +- +- ce->state->obj->dirty = true; +- i915_gem_object_unpin_map(ce->state->obj); +- +- ce->ring->head = ce->ring->tail = 0; +- ce->ring->last_retired_head = -1; +- intel_ring_update_space(ce->ring); +- } ++ for_each_engine(engine, dev_priv) { ++ struct intel_context *ce = &ctx->engine[engine->id]; ++ void *vaddr; ++ uint32_t *reg_state; ++ ++ if (!ce->state) ++ continue; ++ ++ vaddr = i915_gem_object_pin_map(ce->state->obj, I915_MAP_WB); ++ if (WARN_ON(IS_ERR(vaddr))) ++ continue; ++ ++ reg_state = vaddr + LRC_STATE_PN * PAGE_SIZE; ++ ++ reg_state[CTX_RING_HEAD+1] = 0; ++ reg_state[CTX_RING_TAIL+1] = 0; ++ ++ ce->state->obj->dirty = true; ++ i915_gem_object_unpin_map(ce->state->obj); ++ ++ ce->ring->head = 0; ++ ce->ring->tail = 0; + } + } diff --git a/queue-4.9/series b/queue-4.9/series index 22b5b043e36..e8bab30fb30 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -21,3 +21,4 @@ mips-select-have_irq_exit_on_irq_stack.patch mips-irq-stack-fix-erroneous-jal-to-plat_irq_dispatch.patch crypto-caam-fix-rng-deinstantiation-error-checking.patch crypto-caam-fix-invalid-dereference-in-caam_rsa_init_tfm.patch +revert-drm-i915-execlists-reset-ring-registers-upon-resume.patch