sparse warning, or why does jifies_to_msecs() return an int?

From: David Mosberger
Date: Fri Jan 14 2005 - 21:24:09 EST


I'm seeing the following warning from sparse:

include/linux/jiffies.h:262:9: warning: cast truncates bits from constant value (3ffffffffffffffe becomes fffffffe)

it took me a while to realize that this is due to
the jiffies_to_msecs(MAX_JIFFY_OFFSET) call in
msecs_to_jiffies() and due to the fact that
jiffies_to_msecs() returns only an "unsigned int".

Is there are a good reason to constrain the return value to 4 billion
msecs? If so, what's the proper way to shut up sparse?

On a related note, there seem to be some overflow issues in
jiffies_to_{msec,usec}. For example:

return (j * 1000) / HZ;

can overflow if j > MAXULONG/1000, which is the case for
MAX_JIFFY_OFFSET.

I think it would be better to use:

return 1000*(j/HZ) + 1000*(j%HZ)/HZ;

instead. No?

--david
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/