---
 drivers/gpu/drm/i915/intel_guc_submission.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c 
b/drivers/gpu/drm/i915/intel_guc_submission.c
index eae668442ebe..e1d5463a04e6 100644
--- a/drivers/gpu/drm/i915/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/intel_guc_submission.c
@@ -610,11 +610,13 @@ static void inject_preempt_context(struct work_struct 
*work)
        data[5] = guc->execbuf_client->stage_id;
        data[6] = intel_guc_ggtt_offset(guc, guc->shared_data);
 
+       tasklet_disable(&engine->execlists.tasklet);
        if (WARN_ON(intel_guc_send(guc, data, ARRAY_SIZE(data)))) {
                execlists_clear_active(&engine->execlists,
                                       EXECLISTS_ACTIVE_PREEMPT);
                tasklet_schedule(&engine->execlists.tasklet);
        }
+       tasklet_enable(&engine->execlists.tasklet);
 }
 
 /*
@@ -654,11 +656,10 @@ static void complete_preempt_context(struct 
intel_engine_cs *engine)
        if (inject_preempt_hang(execlists))
                return;
 
+       wait_for_guc_preempt_report(engine);
+
        execlists_cancel_port_requests(execlists);
        execlists_unwind_incomplete_requests(execlists);
-
-       wait_for_guc_preempt_report(engine);
-       intel_write_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX, 0);
 }
 
 /**
@@ -726,6 +727,9 @@ static bool __guc_dequeue(struct intel_engine_cs *engine)
                        int prio = execlists->queue_priority;
 
                        if (__execlists_need_preempt(prio, port_prio(port))) {
+                               intel_write_status_page(engine,
+                                                       
I915_GEM_HWS_PREEMPT_INDEX,
+                                                       0);
                                execlists_set_active(execlists,
                                                     EXECLISTS_ACTIVE_PREEMPT);
                                queue_work(engine->i915->guc.preempt_wq,
@@ -816,8 +820,7 @@ static void guc_submission_tasklet(unsigned long data)
        }
 
        if (execlists_is_active(execlists, EXECLISTS_ACTIVE_PREEMPT) &&
-           intel_read_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX) ==
-           GUC_PREEMPT_FINISHED)
+           intel_read_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX))
                complete_preempt_context(engine);
 
        if (!execlists_is_active(execlists, EXECLISTS_ACTIVE_PREEMPT))
-- 
2.19.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to