drm/i915/selftests: wait for active idle event in i915_active_unlock_wait
authorAndrzej Hajda <andrzej.hajda@intel.com>
Tue, 5 Dec 2023 13:09:37 +0000 (14:09 +0100)
committerAndrzej Hajda <andrzej.hajda@intel.com>
Fri, 8 Dec 2023 11:19:26 +0000 (12:19 +0100)
After i915_active_unlock_wait i915_active can be still non-idle due
to barrier async handling in signal_irq_work. As a result one can observe
following errors:
bcs0: heartbeat pulse did not flush idle tasks
*ERROR* pulse active pulse_active [i915]:pulse_retire [i915]
*ERROR* pulse    count: 0
*ERROR* pulse    preallocated barriers? no

To prevent it let's wait explicitly for idleness.

v2: wait only in live_idle tests

Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231205-selftest_wait_for_active_idle_event-v2-1-1437d0bf9829@intel.com
drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c

index 273d440a53e3f4c4d75bfdafdf1cef8c5fef386a..bc441ce7b380d37de01c548c160281b76f1ada9e 100644 (file)
@@ -84,7 +84,7 @@ static struct pulse *pulse_create(void)
 
 static void pulse_unlock_wait(struct pulse *p)
 {
-       i915_active_unlock_wait(&p->active);
+       wait_var_event_timeout(&p->active, i915_active_is_idle(&p->active), HZ);
 }
 
 static int __live_idle_pulse(struct intel_engine_cs *engine,