[Intel-gfx] [PATCH] drm/i915/guc: Clear preempt status before use
Chris Wilson
chris at chris-wilson.co.uk
Fri Oct 12 16:33:19 UTC 2018
---
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..c257eceef862 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);
+ local_bh_disable();
if (WARN_ON(intel_guc_send(guc, data, ARRAY_SIZE(data)))) {
execlists_clear_active(&engine->execlists,
EXECLISTS_ACTIVE_PREEMPT);
tasklet_schedule(&engine->execlists.tasklet);
}
+ local_bh_enable();
}
/*
@@ -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
More information about the Intel-gfx
mailing list