[Intel-gfx] [PATCH] drm/i915: use hrtimer in wait for vblank

Murthy, Arun R arun.r.murthy at intel.com
Mon Mar 24 10:34:35 CET 2014


>> diff --git a/drivers/gpu/drm/i915/intel_drv.h 
>> b/drivers/gpu/drm/i915/intel_drv.h
>> index 44067bc..079280a 100644
>> --- a/drivers/gpu/drm/i915/intel_drv.h
>> +++ b/drivers/gpu/drm/i915/intel_drv.h
>> @@ -52,7 +52,7 @@
>>  			break;						\
>>  		}							\
>>  		if (W && drm_can_sleep())  {				\
>> -			msleep(W);					\
>> +			usleep_range(W * 1000, W * 2 * 1000);		\
>>  		} else {						\
>>  			cpu_relax();					\
>>  		}							\
>
> Ok. But W is still just a random value we picked for being the mininum 
> legal value for msleep(). So just usleep_range(500, 2000) or somesuch 
> will be fine. We can rename W to CAN_SLEEP it that helps.

We do use _wait_for directly from intel_dp.c with W == 10 to not retry so many times on what's expected to be a long wait.

Its not expected to be too long, we tend to get vblank every 16ms.  With using usleep_range
with min and max as 1-2ms, we have observed that this function consuming 4ms to 17ms.
Having 10ms sleep timer, we might tend to be blocking for 6ms in some cases.(from the above data)
Moreover 10ms usleep doesn't guarantee that we get a chance to execute after 10ms, it might
get increased due to scheduling. So ideal solution would be to use useep_range which uses hrtimers.

Thanks and Regards,
Arun R Murthy
------------------ 



More information about the Intel-gfx mailing list