Messages in this thread | | | From | "Liu Yu" <> | Subject | Wrong use of MAX_JIFFY_OFFSET? | Date | Wed, 28 Mar 2012 15:12:24 +0800 |
| |
Hi guys,
I saw a couple of places in current kernel have this kind of code:
> static inline unsigned int elapsed_jiffies_msecs(unsigned long start) > { > unsigned long end = jiffies; > > if (end >= start) > return jiffies_to_msecs(end - start); > > return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1); > }
As you know, jiffies has a type of unsigned long, so if we know which is the end and which is the start, then (end - start) can simply figure out how much jiffies flies, without worry about the overflow.
Look at the code above, assume that there is just an overflow happening on jiffies: end=0 and start=~0UL. Since end < start, then the return value of the function is jiffies_to_msecs(MAX_JIFFY_OFFSET+2). But shouldn't the correct value be jiffies_to_msecs(1)?
could someone tell me that am I missing anything?
Thanks, Yu
| |