[Intel-gfx] [PATCH] drm/i915: Use ktime on wait_for

Sagar Arun Kamble sagar.a.kamble at intel.com
Fri Apr 20 10:23:50 UTC 2018



On 4/20/2018 3:24 PM, Mika Kuoppala wrote:
> We use jiffies to determine when wait expires. However
> Imre did find out that jiffies can and will do a >1
> increments on certain situations [1]. When this happens
> in a wait_for loop, we return timeout errorneously
> much earlier than what the real wallclock would say.
>
> We can't afford our waits to timeout prematurely.
> Discard jiffies and change to ktime to detect timeouts.
>
> Reported-by: Imre Deak <imre.deak at intel.com>
> References: https://lkml.org/lkml/2018/4/18/798 [1]
> Cc: Imre Deak <imre.deak at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Signed-off-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
>   drivers/gpu/drm/i915/intel_drv.h | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 8b20824e806e..ac7565220aa3 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -49,12 +49,12 @@
>    * check the condition before the timeout.
>    */
>   #define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
> -	unsigned long timeout__ = jiffies + usecs_to_jiffies(US) + 1;	\
> +	const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
Is ktime_get_raw() monotonic? Thomas suggested ktime_get()
>   	long wait__ = (Wmin); /* recommended min for usleep is 10 us */	\
>   	int ret__;							\
>   	might_sleep();							\
>   	for (;;) {							\
> -		bool expired__ = time_after(jiffies, timeout__);	\
> +		const bool expired__ = ktime_after(ktime_get_raw(), end__); \
>   		OP;							\
>   		if (COND) {						\
>   			ret__ = 0;					\

-- 
Thanks,
Sagar



More information about the Intel-gfx mailing list