|
@@ -483,9 +483,11 @@ struct timespec64 ns_to_timespec64(const s64 nsec)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(ns_to_timespec64);
|
|
EXPORT_SYMBOL(ns_to_timespec64);
|
|
#endif
|
|
#endif
|
|
-/*
|
|
|
|
- * When we convert to jiffies then we interpret incoming values
|
|
|
|
- * the following way:
|
|
|
|
|
|
+/**
|
|
|
|
+ * msecs_to_jiffies: - convert milliseconds to jiffies
|
|
|
|
+ * @m: time in milliseconds
|
|
|
|
+ *
|
|
|
|
+ * conversion is done as follows:
|
|
*
|
|
*
|
|
* - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
|
|
* - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
|
|
*
|
|
*
|
|
@@ -493,51 +495,28 @@ EXPORT_SYMBOL(ns_to_timespec64);
|
|
* MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
|
|
* MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
|
|
*
|
|
*
|
|
* - all other values are converted to jiffies by either multiplying
|
|
* - all other values are converted to jiffies by either multiplying
|
|
- * the input value by a factor or dividing it with a factor
|
|
|
|
- *
|
|
|
|
- * We must also be careful about 32-bit overflows.
|
|
|
|
|
|
+ * the input value by a factor or dividing it with a factor and
|
|
|
|
+ * handling any 32-bit overflows.
|
|
|
|
+ * for the details see __msecs_to_jiffies()
|
|
|
|
+ *
|
|
|
|
+ * msecs_to_jiffies() checks for the passed in value being a constant
|
|
|
|
+ * via __builtin_constant_p() allowing gcc to eliminate most of the
|
|
|
|
+ * code, __msecs_to_jiffies() is called if the value passed does not
|
|
|
|
+ * allow constant folding and the actual conversion must be done at
|
|
|
|
+ * runtime.
|
|
|
|
+ * the _msecs_to_jiffies helpers are the HZ dependent conversion
|
|
|
|
+ * routines found in include/linux/jiffies.h
|
|
*/
|
|
*/
|
|
-unsigned long msecs_to_jiffies(const unsigned int m)
|
|
|
|
|
|
+unsigned long __msecs_to_jiffies(const unsigned int m)
|
|
{
|
|
{
|
|
/*
|
|
/*
|
|
* Negative value, means infinite timeout:
|
|
* Negative value, means infinite timeout:
|
|
*/
|
|
*/
|
|
if ((int)m < 0)
|
|
if ((int)m < 0)
|
|
return MAX_JIFFY_OFFSET;
|
|
return MAX_JIFFY_OFFSET;
|
|
-
|
|
|
|
-#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
|
|
|
|
- /*
|
|
|
|
- * HZ is equal to or smaller than 1000, and 1000 is a nice
|
|
|
|
- * round multiple of HZ, divide with the factor between them,
|
|
|
|
- * but round upwards:
|
|
|
|
- */
|
|
|
|
- return (m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ);
|
|
|
|
-#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
|
|
|
|
- /*
|
|
|
|
- * HZ is larger than 1000, and HZ is a nice round multiple of
|
|
|
|
- * 1000 - simply multiply with the factor between them.
|
|
|
|
- *
|
|
|
|
- * But first make sure the multiplication result cannot
|
|
|
|
- * overflow:
|
|
|
|
- */
|
|
|
|
- if (m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
|
|
|
|
- return MAX_JIFFY_OFFSET;
|
|
|
|
-
|
|
|
|
- return m * (HZ / MSEC_PER_SEC);
|
|
|
|
-#else
|
|
|
|
- /*
|
|
|
|
- * Generic case - multiply, round and divide. But first
|
|
|
|
- * check that if we are doing a net multiplication, that
|
|
|
|
- * we wouldn't overflow:
|
|
|
|
- */
|
|
|
|
- if (HZ > MSEC_PER_SEC && m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
|
|
|
|
- return MAX_JIFFY_OFFSET;
|
|
|
|
-
|
|
|
|
- return (MSEC_TO_HZ_MUL32 * m + MSEC_TO_HZ_ADJ32)
|
|
|
|
- >> MSEC_TO_HZ_SHR32;
|
|
|
|
-#endif
|
|
|
|
|
|
+ return _msecs_to_jiffies(m);
|
|
}
|
|
}
|
|
-EXPORT_SYMBOL(msecs_to_jiffies);
|
|
|
|
|
|
+EXPORT_SYMBOL(__msecs_to_jiffies);
|
|
|
|
|
|
unsigned long usecs_to_jiffies(const unsigned int u)
|
|
unsigned long usecs_to_jiffies(const unsigned int u)
|
|
{
|
|
{
|