[Intel-gfx] [PATCH] drm/i915/selftests: Disable preemption while setting up fence-timers

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Mar 14 11:37:19 UTC 2019


On 13/03/2019 20:59, Chris Wilson wrote:
> The impossible happens and a future fence expired while we were still
> initialising. The probable cause is that the test was preempted and we
> lost our scheduler cpu slice. Disable preemption during this test to
> rule out preemption as a source of timer disruption.
> 
> References: https://bugs.freedesktop.org/show_bug.cgi?id=110039
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/selftests/i915_sw_fence.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> index cdbc8f134e5e..cbf45d85cbff 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> @@ -571,21 +571,27 @@ static int test_timer(void *arg)
>   	unsigned long target, delay;
>   	struct timed_fence tf;
>   
> +	preempt_disable();
>   	timed_fence_init(&tf, target = jiffies);
>   	if (!i915_sw_fence_done(&tf.fence)) {
>   		pr_err("Fence with immediate expiration not signaled\n");
>   		goto err;
>   	}
> +	preempt_enable();
>   	timed_fence_fini(&tf);
>   
>   	for_each_prime_number(delay, i915_selftest.timeout_jiffies/2) {
> +		preempt_disable();
>   		timed_fence_init(&tf, target = jiffies + delay);
>   		if (i915_sw_fence_done(&tf.fence)) {
>   			pr_err("Fence with future expiration (%lu jiffies) already signaled\n", delay);
>   			goto err;
>   		}
> +		preempt_enable();
>   
>   		i915_sw_fence_wait(&tf.fence);
> +
> +		preempt_disable();
>   		if (!i915_sw_fence_done(&tf.fence)) {
>   			pr_err("Fence not signaled after wait\n");
>   			goto err;
> @@ -595,13 +601,14 @@ static int test_timer(void *arg)
>   			       target, jiffies);
>   			goto err;
>   		}
> -
> +		preempt_enable();
>   		timed_fence_fini(&tf);
>   	}
>   
>   	return 0;
>   
>   err:
> +	preempt_enable();
>   	timed_fence_fini(&tf);
>   	return -EINVAL;
>   }
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list