diff mbox

drm/i915/bdw: Clean up execlist queue items in retire_work

Message ID 1413809499-5209-1-git-send-email-thomas.daniel@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Thomas Daniel Oct. 20, 2014, 12:51 p.m. UTC
No longer create a work item to clean each execlist queue item.
Instead, move retired execlist requests to a queue and clean up the
items during retire_requests.

Issue: VIZ-4274
Signed-off-by: Thomas Daniel <thomas.daniel@intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c         |    1 +
 drivers/gpu/drm/i915/intel_lrc.c        |   52 ++++++++++++++++++-------------
 drivers/gpu/drm/i915/intel_lrc.h        |    2 +-
 drivers/gpu/drm/i915/intel_ringbuffer.h |    1 +
 4 files changed, 33 insertions(+), 23 deletions(-)

Comments

Shuang He Oct. 20, 2014, 1:47 p.m. UTC | #1
Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
-------------------------------------Summary-------------------------------------
Platform: baseline_drm_intel_nightly_pass_rate->patch_applied_pass_rate
BYT: pass/total=1/1->1/1
PNV: pass/total=1/1->1/1
ILK: pass/total=1/1->1/1
IVB: pass/total=1/1->1/1
SNB: pass/total=1/1->1/1
HSW: pass/total=1/1->1/1
BDW: pass/total=1/1->1/1
-------------------------------------Detailed-------------------------------------
test_platform: test_suite, test_case, result_with_drm_intel_nightly->result_with_patch_applied
Shuang He Oct. 20, 2014, 2:20 p.m. UTC | #2
> -----Original Message-----
> From: He, Shuang
> Sent: Monday, October 20, 2014 9:47 PM
> To: He, Shuang; intel-gfx@lists.freedesktop.org; Daniel, Thomas
> Subject: RE: [Intel-gfx] [PATCH] drm/i915/bdw: Clean up execlist queue items in
> 
> Tested-By: PRC QA PRTS (Patch Regression Test System Contact:
> shuang.he@intel.com)
[He, Shuang] Hello, there's definitely something wrong with this test result, I will check what happened

Thanks
	--Shuang
> -------------------------------------Summary-------------------------------------
> Platform: baseline_drm_intel_nightly_pass_rate->patch_applied_pass_rate
> BYT: pass/total=1/1->1/1
> PNV: pass/total=1/1->1/1
> ILK: pass/total=1/1->1/1
> IVB: pass/total=1/1->1/1
> SNB: pass/total=1/1->1/1
> HSW: pass/total=1/1->1/1
> BDW: pass/total=1/1->1/1
> -------------------------------------Detailed-------------------------------------
> test_platform: test_suite, test_case,
> result_with_drm_intel_nightly->result_with_patch_applied
Shuang He Oct. 21, 2014, 8:32 a.m. UTC | #3
Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
-------------------------------------Summary-------------------------------------
Platform: baseline_drm_intel_nightly_pass_rate->patch_applied_pass_rate
BYT: pass/total=19/19->3/19
PNV: pass/total=2/2->1/2
ILK: pass/total=15/15->3/15
IVB: pass/total=2/2->1/2
SNB: pass/total=16/16->3/16
HSW: pass/total=2/2->1/2
BDW: pass/total=17/17->3/17
-------------------------------------Detailed-------------------------------------
test_platform: test_suite, test_case, result_with_drm_intel_nightly->result_with_patch_applied
BYT: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_hangman_ring-stop-sysfs-entry, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_drv_missed_irq_hang, PASS->TIMEOUT
BYT: Intel_gpu_tools, igt_gem_bad_length, PASS->TIMEOUT
PNV: Sanity, boot, PASS->FAIL
ILK: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
ILK: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
IVB: Sanity, boot, PASS->FAIL
SNB: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
SNB: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
HSW: Sanity, boot, PASS->FAIL
BDW: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
BDW: Intel_gpu_tools, igt_drv_hangman_ring-stop-sysfs-entry, PASS->TIMEOUT
Daniel Vetter Oct. 21, 2014, 12:13 p.m. UTC | #4
On Tue, Oct 21, 2014 at 01:32:44AM -0700, shuang.he@intel.com wrote:
> Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
> -------------------------------------Summary-------------------------------------
> Platform: baseline_drm_intel_nightly_pass_rate->patch_applied_pass_rate
> BYT: pass/total=19/19->3/19
> PNV: pass/total=2/2->1/2
> ILK: pass/total=15/15->3/15
> IVB: pass/total=2/2->1/2
> SNB: pass/total=16/16->3/16
> HSW: pass/total=2/2->1/2
> BDW: pass/total=17/17->3/17
> -------------------------------------Detailed-------------------------------------
> test_platform: test_suite, test_case, result_with_drm_intel_nightly->result_with_patch_applied
> BYT: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_hangman_ring-stop-sysfs-entry, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_drv_missed_irq_hang, PASS->TIMEOUT
> BYT: Intel_gpu_tools, igt_gem_bad_length, PASS->TIMEOUT
> PNV: Sanity, boot, PASS->FAIL
> ILK: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
> ILK: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
> IVB: Sanity, boot, PASS->FAIL
> SNB: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
> SNB: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
> HSW: Sanity, boot, PASS->FAIL
> BDW: Intel_gpu_tools, igt_core_getclient, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_core_get_client_auth_master-drop, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_core_get_client_auth_simple, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_core_getstats, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_core_getversion, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_debugfs_emon_crash, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drm_vma_limiter, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drm_vma_limiter_cached, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_debugfs_reader, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_hangman_error-state-basic, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_hangman_error-state-capture-render, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_hangman_error-state-debugfs-entry, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_hangman_error-state-sysfs-entry, PASS->TIMEOUT
> BDW: Intel_gpu_tools, igt_drv_hangman_ring-stop-sysfs-entry, PASS->TIMEOUT

That's an awful lot of timeouts, especially since the code should only
touch bdw+. Has something gone south with prts hang recovery?
-Daniel
Thomas Daniel Oct. 21, 2014, 12:45 p.m. UTC | #5
> -----Original Message-----
> From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel
> Vetter
> Sent: Tuesday, October 21, 2014 1:14 PM
> To: He, Shuang
> Cc: intel-gfx@lists.freedesktop.org; Daniel, Thomas
> Subject: Re: [Intel-gfx] [PATCH] drm/i915/bdw: Clean up execlist queue
> items in
> 
> On Tue, Oct 21, 2014 at 01:32:44AM -0700, shuang.he@intel.com wrote:
> > Tested-By: PRC QA PRTS (Patch Regression Test System Contact:
> > shuang.he@intel.com)
> > -------------------------------------Summary--------------------------
> > -----------
> > PASS->TIMEOUT
> 
> That's an awful lot of timeouts, especially since the code should only touch
> bdw+. Has something gone south with prts hang recovery?
> -Daniel
Those results do look funky.
The v1 patch won't boot without execlists anyway. V2 results are better.

Thomas.

> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
Shuang He Oct. 22, 2014, 1 a.m. UTC | #6
> -----Original Message-----
> From: Daniel, Thomas
> Sent: Tuesday, October 21, 2014 8:46 PM
> To: Daniel Vetter; He, Shuang
> Cc: intel-gfx@lists.freedesktop.org
> Subject: RE: [Intel-gfx] [PATCH] drm/i915/bdw: Clean up execlist queue items in
> 
> 
> 
> > -----Original Message-----
> > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel
> > Vetter
> > Sent: Tuesday, October 21, 2014 1:14 PM
> > To: He, Shuang
> > Cc: intel-gfx@lists.freedesktop.org; Daniel, Thomas
> > Subject: Re: [Intel-gfx] [PATCH] drm/i915/bdw: Clean up execlist queue
> > items in
> >
> > On Tue, Oct 21, 2014 at 01:32:44AM -0700, shuang.he@intel.com wrote:
> > > Tested-By: PRC QA PRTS (Patch Regression Test System Contact:
> > > shuang.he@intel.com)
> > > -------------------------------------Summary--------------------------
> > > -----------
> > > PASS->TIMEOUT
> >
> > That's an awful lot of timeouts, especially since the code should only touch
> > bdw+. Has something gone south with prts hang recovery?
> > -Daniel
> Those results do look funky.
> The v1 patch won't boot without execlists anyway. V2 results are better.
[He, Shuang] PRTS hang recovery is working as expected here

Thanks
	--Shuang
> 
> Thomas.
> 
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > +41 (0) 79 365 57 48 - http://blog.ffwll.ch
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 895f988..6a3e0ea 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2718,6 +2718,7 @@  i915_gem_retire_requests(struct drm_device *dev)
 	for_each_ring(ring, dev_priv, i) {
 		i915_gem_retire_requests_ring(ring);
 		idle &= list_empty(&ring->request_list);
+			intel_execlists_retire_requests(ring);
 	}
 
 	if (idle)
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 803fc38..666cb28 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -386,7 +386,6 @@  static void execlists_context_unqueue(struct intel_engine_cs *ring)
 {
 	struct intel_ctx_submit_request *req0 = NULL, *req1 = NULL;
 	struct intel_ctx_submit_request *cursor = NULL, *tmp = NULL;
-	struct drm_i915_private *dev_priv = ring->dev->dev_private;
 
 	assert_spin_locked(&ring->execlist_lock);
 
@@ -403,7 +402,8 @@  static void execlists_context_unqueue(struct intel_engine_cs *ring)
 			 * will update tail past first request's workload */
 			cursor->elsp_submitted = req0->elsp_submitted;
 			list_del(&req0->execlist_link);
-			queue_work(dev_priv->wq, &req0->work);
+			list_add_tail(&req0->execlist_link,
+				&ring->execlist_retired_req_list);
 			req0 = cursor;
 		} else {
 			req1 = cursor;
@@ -425,7 +425,6 @@  static void execlists_context_unqueue(struct intel_engine_cs *ring)
 static bool execlists_check_remove_request(struct intel_engine_cs *ring,
 					   u32 request_id)
 {
-	struct drm_i915_private *dev_priv = ring->dev->dev_private;
 	struct intel_ctx_submit_request *head_req;
 
 	assert_spin_locked(&ring->execlist_lock);
@@ -443,7 +442,8 @@  static bool execlists_check_remove_request(struct intel_engine_cs *ring,
 
 			if (--head_req->elsp_submitted <= 0) {
 				list_del(&head_req->execlist_link);
-				queue_work(dev_priv->wq, &head_req->work);
+				list_add_tail(&head_req->execlist_link,
+					&ring->execlist_retired_req_list);
 				return true;
 			}
 		}
@@ -512,22 +512,6 @@  void intel_execlists_handle_ctx_events(struct intel_engine_cs *ring)
 		   ((u32)ring->next_context_status_buffer & 0x07) << 8);
 }
 
-static void execlists_free_request_task(struct work_struct *work)
-{
-	struct intel_ctx_submit_request *req =
-		container_of(work, struct intel_ctx_submit_request, work);
-	struct drm_device *dev = req->ring->dev;
-	struct drm_i915_private *dev_priv = dev->dev_private;
-
-	intel_runtime_pm_put(dev_priv);
-
-	mutex_lock(&dev->struct_mutex);
-	i915_gem_context_unreference(req->ctx);
-	mutex_unlock(&dev->struct_mutex);
-
-	kfree(req);
-}
-
 static int execlists_context_queue(struct intel_engine_cs *ring,
 				   struct intel_context *to,
 				   u32 tail)
@@ -544,7 +528,6 @@  static int execlists_context_queue(struct intel_engine_cs *ring,
 	i915_gem_context_reference(req->ctx);
 	req->ring = ring;
 	req->tail = tail;
-	INIT_WORK(&req->work, execlists_free_request_task);
 
 	intel_runtime_pm_get(dev_priv);
 
@@ -565,7 +548,8 @@  static int execlists_context_queue(struct intel_engine_cs *ring,
 			WARN(tail_req->elsp_submitted != 0,
 			     "More than 2 already-submitted reqs queued\n");
 			list_del(&tail_req->execlist_link);
-			queue_work(dev_priv->wq, &tail_req->work);
+			list_add_tail(&tail_req->execlist_link,
+				&ring->execlist_retired_req_list);
 		}
 	}
 
@@ -733,6 +717,29 @@  int intel_execlists_submission(struct drm_device *dev, struct drm_file *file,
 	return 0;
 }
 
+void intel_execlists_retire_requests(struct intel_engine_cs *ring)
+{
+	struct intel_ctx_submit_request *req, *tmp;
+	struct drm_i915_private *dev_priv = ring->dev->dev_private;
+	unsigned long flags;
+	struct list_head retired_list;
+
+	WARN_ON(!mutex_is_locked(&ring->dev->struct_mutex));
+	if (list_empty(&ring->execlist_retired_req_list))
+		return;
+
+	INIT_LIST_HEAD(&retired_list);
+	spin_lock_irqsave(&ring->execlist_lock, flags);
+	list_replace_init(&ring->execlist_retired_req_list, &retired_list);
+	spin_unlock_irqrestore(&ring->execlist_lock, flags);
+
+	list_for_each_entry_safe(req, tmp, &retired_list, execlist_link) {
+		intel_runtime_pm_put(dev_priv);
+		i915_gem_context_unreference(req->ctx);
+		list_del(&req->execlist_link);
+	}
+}
+
 void intel_logical_ring_stop(struct intel_engine_cs *ring)
 {
 	struct drm_i915_private *dev_priv = ring->dev->dev_private;
@@ -1248,6 +1255,7 @@  static int logical_ring_init(struct drm_device *dev, struct intel_engine_cs *rin
 	init_waitqueue_head(&ring->irq_queue);
 
 	INIT_LIST_HEAD(&ring->execlist_queue);
+	INIT_LIST_HEAD(&ring->execlist_retired_req_list);
 	spin_lock_init(&ring->execlist_lock);
 	ring->next_context_status_buffer = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index 33c3b4b..84bbf19 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -104,11 +104,11 @@  struct intel_ctx_submit_request {
 	u32 tail;
 
 	struct list_head execlist_link;
-	struct work_struct work;
 
 	int elsp_submitted;
 };
 
 void intel_execlists_handle_ctx_events(struct intel_engine_cs *ring);
+void intel_execlists_retire_requests(struct intel_engine_cs *ring);
 
 #endif /* _INTEL_LRC_H_ */
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 96479c8..8c002d2 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -235,6 +235,7 @@  struct  intel_engine_cs {
 	/* Execlists */
 	spinlock_t execlist_lock;
 	struct list_head execlist_queue;
+	struct list_head execlist_retired_req_list;
 	u8 next_context_status_buffer;
 	u32             irq_keep_mask; /* bitmask for interrupts that should not be masked */
 	int		(*emit_request)(struct intel_ringbuffer *ringbuf);