diff mbox

[v2] drm/i915/selftests: Don't try to queue a request with zero delay

Message ID 20171025100601.15167-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson Oct. 25, 2017, 10:06 a.m. UTC
Instead of trying to create a timer with zero delay (i.e. with expires
set to the current jiffies and not the future, an already expired
timer), execute that request immediately.

v2: Refactor list_del_init+signal into its own little function.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171024220855.30155-1-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
 drivers/gpu/drm/i915/selftests/mock_engine.c | 29 +++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

Comments

Chris Wilson Oct. 25, 2017, 10:11 a.m. UTC | #1
Quoting Chris Wilson (2017-10-25 11:06:01)
> Instead of trying to create a timer with zero delay (i.e. with expires
> set to the current jiffies and not the future, an already expired
> timer), execute that request immediately.
> 
> v2: Refactor list_del_init+signal into its own little function.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Link: https://patchwork.freedesktop.org/patch/msgid/20171024220855.30155-1-chris@chris-wilson.co.uk
> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>

Scratch that, the refactor was nice, because it made 
> -       request = first_request(engine);
> -       if (request) {
> -               list_del_init(&request->link);
> -               mock_seqno_advance(&engine->base, request->base.global_seqno);
> +       while ((request = first_request(engine))) {
> +               advance(engine, request);
> +               if (request->delay)
> +                       break;

this stand out as bogus.
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/selftests/mock_engine.c b/drivers/gpu/drm/i915/selftests/mock_engine.c
index 331c2b09869e..964fd9366813 100644
--- a/drivers/gpu/drm/i915/selftests/mock_engine.c
+++ b/drivers/gpu/drm/i915/selftests/mock_engine.c
@@ -32,6 +32,13 @@  static struct mock_request *first_request(struct mock_engine *engine)
 					link);
 }
 
+static void advance(struct mock_engine *engine,
+		    struct mock_request *request)
+{
+	list_del_init(&request->link);
+	mock_seqno_advance(&engine->base, request->base.global_seqno);
+}
+
 static void hw_delay_complete(struct timer_list *t)
 {
 	struct mock_engine *engine = from_timer(engine, t, hw_delay);
@@ -39,15 +46,15 @@  static void hw_delay_complete(struct timer_list *t)
 
 	spin_lock(&engine->hw_lock);
 
-	request = first_request(engine);
-	if (request) {
-		list_del_init(&request->link);
-		mock_seqno_advance(&engine->base, request->base.global_seqno);
+	while ((request = first_request(engine))) {
+		advance(engine, request);
+		if (request->delay)
+			break;
 	}
-
-	request = first_request(engine);
-	if (request)
+	if (request) {
+		GEM_BUG_ON(!request->delay);
 		mod_timer(&engine->hw_delay, jiffies + request->delay);
+	}
 
 	spin_unlock(&engine->hw_lock);
 }
@@ -98,8 +105,12 @@  static void mock_submit_request(struct drm_i915_gem_request *request)
 
 	spin_lock_irq(&engine->hw_lock);
 	list_add_tail(&mock->link, &engine->hw_queue);
-	if (mock->link.prev == &engine->hw_queue)
-		mod_timer(&engine->hw_delay, jiffies + mock->delay);
+	if (mock->link.prev == &engine->hw_queue) {
+		if (mock->delay)
+			mod_timer(&engine->hw_delay, jiffies + mock->delay);
+		else
+			advance(engine, mock);
+	}
 	spin_unlock_irq(&engine->hw_lock);
 }