clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI
[linux/fpc-iii.git] / kernel / time / time.c
bloba5b6d98ea7b1ccaf244ec4146888221f37f09b73
1 /*
2 * linux/kernel/time.c
4 * Copyright (C) 1991, 1992 Linus Torvalds
6 * This file contains the interface functions for the various
7 * time related system calls: time, stime, gettimeofday, settimeofday,
8 * adjtime
9 */
11 * Modification history kernel/time.c
13 * 1993-09-02 Philip Gladstone
14 * Created file with time related functions from sched/core.c and adjtimex()
15 * 1993-10-08 Torsten Duwe
16 * adjtime interface update and CMOS clock write code
17 * 1995-08-13 Torsten Duwe
18 * kernel PLL updated to 1994-12-13 specs (rfc-1589)
19 * 1999-01-16 Ulrich Windl
20 * Introduced error checking for many cases in adjtimex().
21 * Updated NTP code according to technical memorandum Jan '96
22 * "A Kernel Model for Precision Timekeeping" by Dave Mills
23 * Allow time_constant larger than MAXTC(6) for NTP v4 (MAXTC == 10)
24 * (Even though the technical memorandum forbids it)
25 * 2004-07-14 Christoph Lameter
26 * Added getnstimeofday to allow the posix timer functions to return
27 * with nanosecond accuracy
30 #include <linux/export.h>
31 #include <linux/kernel.h>
32 #include <linux/timex.h>
33 #include <linux/capability.h>
34 #include <linux/timekeeper_internal.h>
35 #include <linux/errno.h>
36 #include <linux/syscalls.h>
37 #include <linux/security.h>
38 #include <linux/fs.h>
39 #include <linux/math64.h>
40 #include <linux/ptrace.h>
42 #include <asm/uaccess.h>
43 #include <asm/unistd.h>
45 #include <generated/timeconst.h>
46 #include "timekeeping.h"
49 * The timezone where the local system is located. Used as a default by some
50 * programs who obtain this value by using gettimeofday.
52 struct timezone sys_tz;
54 EXPORT_SYMBOL(sys_tz);
56 #ifdef __ARCH_WANT_SYS_TIME
59 * sys_time() can be implemented in user-level using
60 * sys_gettimeofday(). Is this for backwards compatibility? If so,
61 * why not move it into the appropriate arch directory (for those
62 * architectures that need it).
64 SYSCALL_DEFINE1(time, time_t __user *, tloc)
66 time_t i = get_seconds();
68 if (tloc) {
69 if (put_user(i,tloc))
70 return -EFAULT;
72 force_successful_syscall_return();
73 return i;
77 * sys_stime() can be implemented in user-level using
78 * sys_settimeofday(). Is this for backwards compatibility? If so,
79 * why not move it into the appropriate arch directory (for those
80 * architectures that need it).
83 SYSCALL_DEFINE1(stime, time_t __user *, tptr)
85 struct timespec tv;
86 int err;
88 if (get_user(tv.tv_sec, tptr))
89 return -EFAULT;
91 tv.tv_nsec = 0;
93 err = security_settime(&tv, NULL);
94 if (err)
95 return err;
97 do_settimeofday(&tv);
98 return 0;
101 #endif /* __ARCH_WANT_SYS_TIME */
103 SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
104 struct timezone __user *, tz)
106 if (likely(tv != NULL)) {
107 struct timeval ktv;
108 do_gettimeofday(&ktv);
109 if (copy_to_user(tv, &ktv, sizeof(ktv)))
110 return -EFAULT;
112 if (unlikely(tz != NULL)) {
113 if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
114 return -EFAULT;
116 return 0;
120 * Indicates if there is an offset between the system clock and the hardware
121 * clock/persistent clock/rtc.
123 int persistent_clock_is_local;
126 * Adjust the time obtained from the CMOS to be UTC time instead of
127 * local time.
129 * This is ugly, but preferable to the alternatives. Otherwise we
130 * would either need to write a program to do it in /etc/rc (and risk
131 * confusion if the program gets run more than once; it would also be
132 * hard to make the program warp the clock precisely n hours) or
133 * compile in the timezone information into the kernel. Bad, bad....
135 * - TYT, 1992-01-01
137 * The best thing to do is to keep the CMOS clock in universal time (UTC)
138 * as real UNIX machines always do it. This avoids all headaches about
139 * daylight saving times and warping kernel clocks.
141 static inline void warp_clock(void)
143 if (sys_tz.tz_minuteswest != 0) {
144 struct timespec adjust;
146 persistent_clock_is_local = 1;
147 adjust.tv_sec = sys_tz.tz_minuteswest * 60;
148 adjust.tv_nsec = 0;
149 timekeeping_inject_offset(&adjust);
154 * In case for some reason the CMOS clock has not already been running
155 * in UTC, but in some local time: The first time we set the timezone,
156 * we will warp the clock so that it is ticking UTC time instead of
157 * local time. Presumably, if someone is setting the timezone then we
158 * are running in an environment where the programs understand about
159 * timezones. This should be done at boot time in the /etc/rc script,
160 * as soon as possible, so that the clock can be set right. Otherwise,
161 * various programs will get confused when the clock gets warped.
164 int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz)
166 static int firsttime = 1;
167 int error = 0;
169 if (tv && !timespec64_valid(tv))
170 return -EINVAL;
172 error = security_settime64(tv, tz);
173 if (error)
174 return error;
176 if (tz) {
177 /* Verify we're witin the +-15 hrs range */
178 if (tz->tz_minuteswest > 15*60 || tz->tz_minuteswest < -15*60)
179 return -EINVAL;
181 sys_tz = *tz;
182 update_vsyscall_tz();
183 if (firsttime) {
184 firsttime = 0;
185 if (!tv)
186 warp_clock();
189 if (tv)
190 return do_settimeofday64(tv);
191 return 0;
194 SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv,
195 struct timezone __user *, tz)
197 struct timeval user_tv;
198 struct timespec new_ts;
199 struct timezone new_tz;
201 if (tv) {
202 if (copy_from_user(&user_tv, tv, sizeof(*tv)))
203 return -EFAULT;
205 if (!timeval_valid(&user_tv))
206 return -EINVAL;
208 new_ts.tv_sec = user_tv.tv_sec;
209 new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
211 if (tz) {
212 if (copy_from_user(&new_tz, tz, sizeof(*tz)))
213 return -EFAULT;
216 return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
219 SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p)
221 struct timex txc; /* Local copy of parameter */
222 int ret;
224 /* Copy the user data space into the kernel copy
225 * structure. But bear in mind that the structures
226 * may change
228 if(copy_from_user(&txc, txc_p, sizeof(struct timex)))
229 return -EFAULT;
230 ret = do_adjtimex(&txc);
231 return copy_to_user(txc_p, &txc, sizeof(struct timex)) ? -EFAULT : ret;
235 * current_fs_time - Return FS time
236 * @sb: Superblock.
238 * Return the current time truncated to the time granularity supported by
239 * the fs.
241 struct timespec current_fs_time(struct super_block *sb)
243 struct timespec now = current_kernel_time();
244 return timespec_trunc(now, sb->s_time_gran);
246 EXPORT_SYMBOL(current_fs_time);
249 * Convert jiffies to milliseconds and back.
251 * Avoid unnecessary multiplications/divisions in the
252 * two most common HZ cases:
254 unsigned int jiffies_to_msecs(const unsigned long j)
256 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
257 return (MSEC_PER_SEC / HZ) * j;
258 #elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
259 return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
260 #else
261 # if BITS_PER_LONG == 32
262 return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
263 HZ_TO_MSEC_SHR32;
264 # else
265 return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
266 # endif
267 #endif
269 EXPORT_SYMBOL(jiffies_to_msecs);
271 unsigned int jiffies_to_usecs(const unsigned long j)
274 * Hz usually doesn't go much further MSEC_PER_SEC.
275 * jiffies_to_usecs() and usecs_to_jiffies() depend on that.
277 BUILD_BUG_ON(HZ > USEC_PER_SEC);
279 #if !(USEC_PER_SEC % HZ)
280 return (USEC_PER_SEC / HZ) * j;
281 #else
282 # if BITS_PER_LONG == 32
283 return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
284 # else
285 return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
286 # endif
287 #endif
289 EXPORT_SYMBOL(jiffies_to_usecs);
292 * timespec_trunc - Truncate timespec to a granularity
293 * @t: Timespec
294 * @gran: Granularity in ns.
296 * Truncate a timespec to a granularity. Always rounds down. gran must
297 * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).
299 struct timespec timespec_trunc(struct timespec t, unsigned gran)
301 /* Avoid division in the common cases 1 ns and 1 s. */
302 if (gran == 1) {
303 /* nothing */
304 } else if (gran == NSEC_PER_SEC) {
305 t.tv_nsec = 0;
306 } else if (gran > 1 && gran < NSEC_PER_SEC) {
307 t.tv_nsec -= t.tv_nsec % gran;
308 } else {
309 WARN(1, "illegal file time granularity: %u", gran);
311 return t;
313 EXPORT_SYMBOL(timespec_trunc);
316 * mktime64 - Converts date to seconds.
317 * Converts Gregorian date to seconds since 1970-01-01 00:00:00.
318 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
319 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
321 * [For the Julian calendar (which was used in Russia before 1917,
322 * Britain & colonies before 1752, anywhere else before 1582,
323 * and is still in use by some communities) leave out the
324 * -year/100+year/400 terms, and add 10.]
326 * This algorithm was first published by Gauss (I think).
328 * A leap second can be indicated by calling this function with sec as
329 * 60 (allowable under ISO 8601). The leap second is treated the same
330 * as the following second since they don't exist in UNIX time.
332 * An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
333 * tomorrow - (allowable under ISO 8601) is supported.
335 time64_t mktime64(const unsigned int year0, const unsigned int mon0,
336 const unsigned int day, const unsigned int hour,
337 const unsigned int min, const unsigned int sec)
339 unsigned int mon = mon0, year = year0;
341 /* 1..12 -> 11,12,1..10 */
342 if (0 >= (int) (mon -= 2)) {
343 mon += 12; /* Puts Feb last since it has leap day */
344 year -= 1;
347 return ((((time64_t)
348 (year/4 - year/100 + year/400 + 367*mon/12 + day) +
349 year*365 - 719499
350 )*24 + hour /* now have hours - midnight tomorrow handled here */
351 )*60 + min /* now have minutes */
352 )*60 + sec; /* finally seconds */
354 EXPORT_SYMBOL(mktime64);
357 * set_normalized_timespec - set timespec sec and nsec parts and normalize
359 * @ts: pointer to timespec variable to be set
360 * @sec: seconds to set
361 * @nsec: nanoseconds to set
363 * Set seconds and nanoseconds field of a timespec variable and
364 * normalize to the timespec storage format
366 * Note: The tv_nsec part is always in the range of
367 * 0 <= tv_nsec < NSEC_PER_SEC
368 * For negative values only the tv_sec field is negative !
370 void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec)
372 while (nsec >= NSEC_PER_SEC) {
374 * The following asm() prevents the compiler from
375 * optimising this loop into a modulo operation. See
376 * also __iter_div_u64_rem() in include/linux/time.h
378 asm("" : "+rm"(nsec));
379 nsec -= NSEC_PER_SEC;
380 ++sec;
382 while (nsec < 0) {
383 asm("" : "+rm"(nsec));
384 nsec += NSEC_PER_SEC;
385 --sec;
387 ts->tv_sec = sec;
388 ts->tv_nsec = nsec;
390 EXPORT_SYMBOL(set_normalized_timespec);
393 * ns_to_timespec - Convert nanoseconds to timespec
394 * @nsec: the nanoseconds value to be converted
396 * Returns the timespec representation of the nsec parameter.
398 struct timespec ns_to_timespec(const s64 nsec)
400 struct timespec ts;
401 s32 rem;
403 if (!nsec)
404 return (struct timespec) {0, 0};
406 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
407 if (unlikely(rem < 0)) {
408 ts.tv_sec--;
409 rem += NSEC_PER_SEC;
411 ts.tv_nsec = rem;
413 return ts;
415 EXPORT_SYMBOL(ns_to_timespec);
418 * ns_to_timeval - Convert nanoseconds to timeval
419 * @nsec: the nanoseconds value to be converted
421 * Returns the timeval representation of the nsec parameter.
423 struct timeval ns_to_timeval(const s64 nsec)
425 struct timespec ts = ns_to_timespec(nsec);
426 struct timeval tv;
428 tv.tv_sec = ts.tv_sec;
429 tv.tv_usec = (suseconds_t) ts.tv_nsec / 1000;
431 return tv;
433 EXPORT_SYMBOL(ns_to_timeval);
435 #if BITS_PER_LONG == 32
437 * set_normalized_timespec - set timespec sec and nsec parts and normalize
439 * @ts: pointer to timespec variable to be set
440 * @sec: seconds to set
441 * @nsec: nanoseconds to set
443 * Set seconds and nanoseconds field of a timespec variable and
444 * normalize to the timespec storage format
446 * Note: The tv_nsec part is always in the range of
447 * 0 <= tv_nsec < NSEC_PER_SEC
448 * For negative values only the tv_sec field is negative !
450 void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)
452 while (nsec >= NSEC_PER_SEC) {
454 * The following asm() prevents the compiler from
455 * optimising this loop into a modulo operation. See
456 * also __iter_div_u64_rem() in include/linux/time.h
458 asm("" : "+rm"(nsec));
459 nsec -= NSEC_PER_SEC;
460 ++sec;
462 while (nsec < 0) {
463 asm("" : "+rm"(nsec));
464 nsec += NSEC_PER_SEC;
465 --sec;
467 ts->tv_sec = sec;
468 ts->tv_nsec = nsec;
470 EXPORT_SYMBOL(set_normalized_timespec64);
473 * ns_to_timespec64 - Convert nanoseconds to timespec64
474 * @nsec: the nanoseconds value to be converted
476 * Returns the timespec64 representation of the nsec parameter.
478 struct timespec64 ns_to_timespec64(const s64 nsec)
480 struct timespec64 ts;
481 s32 rem;
483 if (!nsec)
484 return (struct timespec64) {0, 0};
486 ts.tv_sec = div_s64_rem(nsec, NSEC_PER_SEC, &rem);
487 if (unlikely(rem < 0)) {
488 ts.tv_sec--;
489 rem += NSEC_PER_SEC;
491 ts.tv_nsec = rem;
493 return ts;
495 EXPORT_SYMBOL(ns_to_timespec64);
496 #endif
498 * msecs_to_jiffies: - convert milliseconds to jiffies
499 * @m: time in milliseconds
501 * conversion is done as follows:
503 * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
505 * - 'too large' values [that would result in larger than
506 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
508 * - all other values are converted to jiffies by either multiplying
509 * the input value by a factor or dividing it with a factor and
510 * handling any 32-bit overflows.
511 * for the details see __msecs_to_jiffies()
513 * msecs_to_jiffies() checks for the passed in value being a constant
514 * via __builtin_constant_p() allowing gcc to eliminate most of the
515 * code, __msecs_to_jiffies() is called if the value passed does not
516 * allow constant folding and the actual conversion must be done at
517 * runtime.
518 * the _msecs_to_jiffies helpers are the HZ dependent conversion
519 * routines found in include/linux/jiffies.h
521 unsigned long __msecs_to_jiffies(const unsigned int m)
524 * Negative value, means infinite timeout:
526 if ((int)m < 0)
527 return MAX_JIFFY_OFFSET;
528 return _msecs_to_jiffies(m);
530 EXPORT_SYMBOL(__msecs_to_jiffies);
532 unsigned long __usecs_to_jiffies(const unsigned int u)
534 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
535 return MAX_JIFFY_OFFSET;
536 return _usecs_to_jiffies(u);
538 EXPORT_SYMBOL(__usecs_to_jiffies);
541 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
542 * that a remainder subtract here would not do the right thing as the
543 * resolution values don't fall on second boundries. I.e. the line:
544 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
545 * Note that due to the small error in the multiplier here, this
546 * rounding is incorrect for sufficiently large values of tv_nsec, but
547 * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're
548 * OK.
550 * Rather, we just shift the bits off the right.
552 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
553 * value to a scaled second value.
555 static unsigned long
556 __timespec64_to_jiffies(u64 sec, long nsec)
558 nsec = nsec + TICK_NSEC - 1;
560 if (sec >= MAX_SEC_IN_JIFFIES){
561 sec = MAX_SEC_IN_JIFFIES;
562 nsec = 0;
564 return ((sec * SEC_CONVERSION) +
565 (((u64)nsec * NSEC_CONVERSION) >>
566 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
570 static unsigned long
571 __timespec_to_jiffies(unsigned long sec, long nsec)
573 return __timespec64_to_jiffies((u64)sec, nsec);
576 unsigned long
577 timespec64_to_jiffies(const struct timespec64 *value)
579 return __timespec64_to_jiffies(value->tv_sec, value->tv_nsec);
581 EXPORT_SYMBOL(timespec64_to_jiffies);
583 void
584 jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)
587 * Convert jiffies to nanoseconds and separate with
588 * one divide.
590 u32 rem;
591 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
592 NSEC_PER_SEC, &rem);
593 value->tv_nsec = rem;
595 EXPORT_SYMBOL(jiffies_to_timespec64);
598 * We could use a similar algorithm to timespec_to_jiffies (with a
599 * different multiplier for usec instead of nsec). But this has a
600 * problem with rounding: we can't exactly add TICK_NSEC - 1 to the
601 * usec value, since it's not necessarily integral.
603 * We could instead round in the intermediate scaled representation
604 * (i.e. in units of 1/2^(large scale) jiffies) but that's also
605 * perilous: the scaling introduces a small positive error, which
606 * combined with a division-rounding-upward (i.e. adding 2^(scale) - 1
607 * units to the intermediate before shifting) leads to accidental
608 * overflow and overestimates.
610 * At the cost of one additional multiplication by a constant, just
611 * use the timespec implementation.
613 unsigned long
614 timeval_to_jiffies(const struct timeval *value)
616 return __timespec_to_jiffies(value->tv_sec,
617 value->tv_usec * NSEC_PER_USEC);
619 EXPORT_SYMBOL(timeval_to_jiffies);
621 void jiffies_to_timeval(const unsigned long jiffies, struct timeval *value)
624 * Convert jiffies to nanoseconds and separate with
625 * one divide.
627 u32 rem;
629 value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
630 NSEC_PER_SEC, &rem);
631 value->tv_usec = rem / NSEC_PER_USEC;
633 EXPORT_SYMBOL(jiffies_to_timeval);
636 * Convert jiffies/jiffies_64 to clock_t and back.
638 clock_t jiffies_to_clock_t(unsigned long x)
640 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
641 # if HZ < USER_HZ
642 return x * (USER_HZ / HZ);
643 # else
644 return x / (HZ / USER_HZ);
645 # endif
646 #else
647 return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
648 #endif
650 EXPORT_SYMBOL(jiffies_to_clock_t);
652 unsigned long clock_t_to_jiffies(unsigned long x)
654 #if (HZ % USER_HZ)==0
655 if (x >= ~0UL / (HZ / USER_HZ))
656 return ~0UL;
657 return x * (HZ / USER_HZ);
658 #else
659 /* Don't worry about loss of precision here .. */
660 if (x >= ~0UL / HZ * USER_HZ)
661 return ~0UL;
663 /* .. but do try to contain it here */
664 return div_u64((u64)x * HZ, USER_HZ);
665 #endif
667 EXPORT_SYMBOL(clock_t_to_jiffies);
669 u64 jiffies_64_to_clock_t(u64 x)
671 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
672 # if HZ < USER_HZ
673 x = div_u64(x * USER_HZ, HZ);
674 # elif HZ > USER_HZ
675 x = div_u64(x, HZ / USER_HZ);
676 # else
677 /* Nothing to do */
678 # endif
679 #else
681 * There are better ways that don't overflow early,
682 * but even this doesn't overflow in hundreds of years
683 * in 64 bits, so..
685 x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));
686 #endif
687 return x;
689 EXPORT_SYMBOL(jiffies_64_to_clock_t);
691 u64 nsec_to_clock_t(u64 x)
693 #if (NSEC_PER_SEC % USER_HZ) == 0
694 return div_u64(x, NSEC_PER_SEC / USER_HZ);
695 #elif (USER_HZ % 512) == 0
696 return div_u64(x * USER_HZ / 512, NSEC_PER_SEC / 512);
697 #else
699 * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
700 * overflow after 64.99 years.
701 * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
703 return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
704 #endif
707 u64 jiffies64_to_nsecs(u64 j)
709 #if !(NSEC_PER_SEC % HZ)
710 return (NSEC_PER_SEC / HZ) * j;
711 # else
712 return div_u64(j * HZ_TO_NSEC_NUM, HZ_TO_NSEC_DEN);
713 #endif
715 EXPORT_SYMBOL(jiffies64_to_nsecs);
718 * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64
720 * @n: nsecs in u64
722 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
723 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
724 * for scheduler, not for use in device drivers to calculate timeout value.
726 * note:
727 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
728 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
730 u64 nsecs_to_jiffies64(u64 n)
732 #if (NSEC_PER_SEC % HZ) == 0
733 /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
734 return div_u64(n, NSEC_PER_SEC / HZ);
735 #elif (HZ % 512) == 0
736 /* overflow after 292 years if HZ = 1024 */
737 return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
738 #else
740 * Generic case - optimized for cases where HZ is a multiple of 3.
741 * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
743 return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
744 #endif
746 EXPORT_SYMBOL(nsecs_to_jiffies64);
749 * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
751 * @n: nsecs in u64
753 * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
754 * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
755 * for scheduler, not for use in device drivers to calculate timeout value.
757 * note:
758 * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
759 * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
761 unsigned long nsecs_to_jiffies(u64 n)
763 return (unsigned long)nsecs_to_jiffies64(n);
765 EXPORT_SYMBOL_GPL(nsecs_to_jiffies);
768 * Add two timespec values and do a safety check for overflow.
769 * It's assumed that both values are valid (>= 0)
771 struct timespec timespec_add_safe(const struct timespec lhs,
772 const struct timespec rhs)
774 struct timespec res;
776 set_normalized_timespec(&res, lhs.tv_sec + rhs.tv_sec,
777 lhs.tv_nsec + rhs.tv_nsec);
779 if (res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)
780 res.tv_sec = TIME_T_MAX;
782 return res;
786 * Add two timespec64 values and do a safety check for overflow.
787 * It's assumed that both values are valid (>= 0).
788 * And, each timespec64 is in normalized form.
790 struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
791 const struct timespec64 rhs)
793 struct timespec64 res;
795 set_normalized_timespec64(&res, (timeu64_t) lhs.tv_sec + rhs.tv_sec,
796 lhs.tv_nsec + rhs.tv_nsec);
798 if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
799 res.tv_sec = TIME64_MAX;
800 res.tv_nsec = 0;
803 return res;