
9 Aug
2010
9 Aug
'10
8:55 a.m.
Hello Wolfgang
Am 07.08.2010 23:35, schrieb Wolfgang Denk:
Dear Matthias Weisser,
In message1280734550-18403-2-git-send-email-weisserm@arcor.de you wrote:
+void __udelay(unsigned long usec) +{
- unsigned long long tmp;
- ulong tmo;
- tmo = usec_to_tick(usec);
- tmp = get_ticks() + tmo; /* get current timestamp */
- while (get_ticks()< tmp) /* loop till event */
/*NOP*/;
This is broken when the timer wraps around. Compare the limit against the difference, to make use of unsigned arithmetics.
Isn't this a theoretical problem? The timer increments with approx. 160kHz. get_ticks() returns a 64 bit value which wraps all ~ 3*10^6 years. I don't expect my hardware to work that long without a reboot.
Can you point me to an example where the timer stuff is done right? I see it done differently on nearly all ARM SOCs.
Thanks for the review Matthias