Fix for SuSE 9.0 2.4.21 kernel. Simplify jiffies_to_msecs() and
authorIan Abbott <abbotti@mev.co.uk>
Mon, 21 Aug 2006 16:25:12 +0000 (16:25 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Mon, 21 Aug 2006 16:25:12 +0000 (16:25 +0000)
msecs_to_jiffies() to avoid preprocessor optimisations that depend on
HZ being a C constant expression.  Just round the result up to the nearest
integer.  The supported range of input values (avoiding arithmetic overflow)
is now less than that of the Linux versions of these functions for common
values of HZ, but that's unlikely to cause any problems (and if it does we
can fix it by making the functions more complicated).

include/linux/time.h

index fccbff54b2139f6c9ca026da4e8a8ecd7d306ce4..4fdf7eb09e2319a6f7cfbc8e23377c1dfebfe364 100644 (file)
 
 static inline unsigned int jiffies_to_msecs(const unsigned long j)
 {
-#if HZ <= 1000 && !(1000 % HZ)
-       return (1000 / HZ) * j;
-#elif HZ > 1000 && !(HZ % 1000)
-       return (j + (HZ / 1000) - 1)/(HZ / 1000);
-#else
-       return (j * 1000) / HZ;
-#endif
+       /* This works for jiffies values up to ((ULONG_MAX + 1 - HZ) / 1000) */
+       return (j * 1000 + HZ - 1) / HZ;
 }
 
 static inline unsigned long msecs_to_jiffies(const unsigned int m)
 {
-#if HZ <= 1000 && !(1000 % HZ)
-       return (m + (1000 / HZ) - 1) / (1000 / HZ);
-#elif HZ > 1000 && !(HZ % 1000)
-       return m * (HZ / 1000);
-#else
+       /* This works for msecs values up to ((ULONG_MAX - 999) / HZ) */
        return (m * HZ + 999) / 1000;
-#endif
 };
 
 #endif