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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to