[Intel-gfx] [PATCH 2/2] drm/i915: Use atomic waits for short non-atomic ones
Chris Wilson
chris at chris-wilson.co.uk
Tue Jun 28 13:55:28 UTC 2016
On Tue, Jun 28, 2016 at 02:29:33PM +0100, Tvrtko Ursulin wrote:
> How would you implement it with cpu_clock? What would you do when
> re-scheduled?
unsigned long base;
int cpu;
int ret;
preempt_disable();
cpu = smp_processor_id();
base = local_clock() >> 10;
for (;;) {
u64 now = local_clock() >> 10;
preempt_enable();
if (COND) {
ret = 0;
break;
}
if (now - base >= timeout) {
ret = -ETIMEOUT;
break;
}
cpu_relax();
preempt_disable();
if (unlikely(cpu != smp_processor_id()) {
timeout -= now - base;
cpu = smp_processor_id();
base = local_clock() >> 10;
}
}
ret;
Borrowed from udelay()
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list