|
@@ -662,6 +662,36 @@ u64 nsec_to_clock_t(u64 x)
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
|
|
|
|
+ *
|
|
|
|
+ * @n: nsecs in u64
|
|
|
|
+ *
|
|
|
|
+ * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
|
|
|
|
+ * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
|
|
|
|
+ * for scheduler, not for use in device drivers to calculate timeout value.
|
|
|
|
+ *
|
|
|
|
+ * note:
|
|
|
|
+ * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
|
|
|
|
+ * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
|
|
|
|
+ */
|
|
|
|
+unsigned long nsecs_to_jiffies(u64 n)
|
|
|
|
+{
|
|
|
|
+#if (NSEC_PER_SEC % HZ) == 0
|
|
|
|
+ /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
|
|
|
|
+ return div_u64(n, NSEC_PER_SEC / HZ);
|
|
|
|
+#elif (HZ % 512) == 0
|
|
|
|
+ /* overflow after 292 years if HZ = 1024 */
|
|
|
|
+ return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
|
|
|
|
+#else
|
|
|
|
+ /*
|
|
|
|
+ * Generic case - optimized for cases where HZ is a multiple of 3.
|
|
|
|
+ * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
|
|
|
|
+ */
|
|
|
|
+ return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
#if (BITS_PER_LONG < 64)
|
|
#if (BITS_PER_LONG < 64)
|
|
u64 get_jiffies_64(void)
|
|
u64 get_jiffies_64(void)
|
|
{
|
|
{
|