[PATCH 4/4] next-guc
Chris Wilson
chris at chris-wilson.co.uk
Fri Oct 12 18:36:40 UTC 2018
---
drivers/gpu/drm/i915/intel_guc.h | 4 +++-
drivers/gpu/drm/i915/intel_guc_submission.c | 17 ++++++++++-------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h
index 0f1c4f9ebfd8..5703e62a3d33 100644
--- a/drivers/gpu/drm/i915/intel_guc.h
+++ b/drivers/gpu/drm/i915/intel_guc.h
@@ -34,6 +34,8 @@
#include "intel_uc_fw.h"
#include "i915_vma.h"
+struct guc_shared_ctx_data;
+
struct guc_preempt_work {
struct work_struct work;
struct intel_engine_cs *engine;
@@ -62,7 +64,7 @@ struct intel_guc {
void *stage_desc_pool_vaddr;
struct ida stage_ids;
struct i915_vma *shared_data;
- void *shared_data_vaddr;
+ struct guc_shared_ctx_data *shared_data_vaddr;
struct intel_guc_client *execbuf_client;
struct intel_guc_client *preempt_client;
diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
index e90e71d9a715..cc1774befb82 100644
--- a/drivers/gpu/drm/i915/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/intel_guc_submission.c
@@ -555,6 +555,8 @@ static void inject_preempt_context(struct work_struct *work)
struct intel_guc_client *client = guc->preempt_client;
struct guc_stage_desc *stage_desc = __get_stage_desc(client);
struct intel_context *ce = to_intel_context(client->owner, engine);
+ struct guc_ctx_report *report =
+ &guc->shared_data_vaddr->preempt_ctx_report[engine->guc_id];
u32 data[7];
if (!ce->ring->emit) { /* recreate upon load/resume */
@@ -587,6 +589,14 @@ static void inject_preempt_context(struct work_struct *work)
GUC_PREEMPT_BREADCRUMB_BYTES / sizeof(u64), 0);
spin_unlock_irq(&client->wq_lock);
+ /*
+ * GuC is expecting that we're also going to clear the affected context
+ * counter, let's also reset the return status to not depend on GuC
+ * resetting it after recieving another preempt action
+ */
+ report->affected_count = 0;
+ report->report_return_status = INTEL_GUC_REPORT_STATUS_UNKNOWN;
+
/*
* If GuC firmware performs an engine reset while that engine had
* a preemption pending, it will set the terminated attribute bit
@@ -638,13 +648,6 @@ static void wait_for_guc_preempt_report(struct intel_engine_cs *engine)
WARN_ON(wait_for_atomic(report->report_return_status ==
INTEL_GUC_REPORT_STATUS_COMPLETE,
GUC_PREEMPT_POSTPROCESS_DELAY_MS));
- /*
- * GuC is expecting that we're also going to clear the affected context
- * counter, let's also reset the return status to not depend on GuC
- * resetting it after recieving another preempt action
- */
- report->affected_count = 0;
- report->report_return_status = INTEL_GUC_REPORT_STATUS_UNKNOWN;
}
static void complete_preempt_context(struct intel_engine_cs *engine)
--
2.19.1
More information about the Intel-gfx-trybot
mailing list