On Sunday 01 June 2008 07:25:17 pm Andi Kleen wrote: > > static void delay_tsc(unsigned long loops) > > { > > - unsigned long bclock, now; > > + unsigned prev, prev_1, now; > > + unsigned left = loops; > > + unsigned prev_cpu, cpu; > > + > > + preempt_disable(); > > + rdtscl(prev); > > > The unsigneds should be probably u64 and the rdtsc rdtscll. > Otherwise this will all overflow for longer waits on a very > fast systems (e.g. a 5Ghz system wraps 32bit in ~1.1 seconds) > Normally such delays shouldn't be that long, but why risk > overflow even in extreme cases? Yes in principles, but the overflow (that could happen between rdtscl(prev) and rdtscl(now) is taken into account the same way as in time_after()/time_before() macros, (differences only) see: + left -= now - prev; ......... + } while ((now-prev) < left); If more than one overflow happen between rdtscl(prev) and rdtscl(now) (the task is suspended for a long time between two readings) all overflows after the first one will be lost. But the patch was submitted to guaranty minimum udelay() initially. Sure, I could change to u64 if we reach a concensus. Best regards. Marin Mitov > > -Andi > -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html