Red Hat Bugzilla – Bug 53688
Dubious looking i810 driver code
Last modified: 2007-04-18 12:37:08 EDT
So I wondered about time related bogons and I found very odd looking code
in i810_accel.c - do a grep for GetTimeInMillis
Now consider what happens close to wrap time
On a reload now could reload with 0. Tripping the start = 0 case next loop.
We then fall through into the last_head = ring->head load. The same occurs
during a wrap event where start=0x7FFFFFFFF now=0x80000000 (minus loads).
We mistakenly see it as progress. Fortunately it appears to fail safe as we
merely reset the timer.
Secondly GetTimeInMillis appears to be unsigned, its stuffed into
variables. That doesn't itself seem fatal as the (now-start) maths seems to
wrap safely - but wants checking
Thirdly there is a small delay loop. Or rather in egcs-1.1.2 there is. gcc
2.96 will optimise that to "i=2000" - i must be volatile if that loop is
Can you confirm what that loop is for and if its required ?
XFree86 4.x or 3.3.6? I assume 3.3.6 (XFree86-Servers)..
I'll look at it and ask Alan about it.
Was fixed in 4.2