xref: /linux/kernel/time/time.c (revision f8b946772554ea11380fe03fc446376794a81a36)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  Copyright (C) 1991, 1992  Linus Torvalds
4  *
5  *  This file contains the interface functions for the various time related
6  *  system calls: time, stime, gettimeofday, settimeofday, adjtime
7  *
8  * Modification history:
9  *
10  * 1993-09-02    Philip Gladstone
11  *      Created file with time related functions from sched/core.c and adjtimex()
12  * 1993-10-08    Torsten Duwe
13  *      adjtime interface update and CMOS clock write code
14  * 1995-08-13    Torsten Duwe
15  *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
16  * 1999-01-16    Ulrich Windl
17  *	Introduced error checking for many cases in adjtimex().
18  *	Updated NTP code according to technical memorandum Jan '96
19  *	"A Kernel Model for Precision Timekeeping" by Dave Mills
20  *	Allow time_constant larger than MAXTC(6) for NTP v4 (MAXTC == 10)
21  *	(Even though the technical memorandum forbids it)
22  * 2004-07-14	 Christoph Lameter
23  *	Added getnstimeofday to allow the posix timer functions to return
24  *	with nanosecond accuracy
25  */
26 
27 #include <linux/export.h>
28 #include <linux/kernel.h>
29 #include <linux/timex.h>
30 #include <linux/capability.h>
31 #include <linux/timekeeper_internal.h>
32 #include <linux/errno.h>
33 #include <linux/syscalls.h>
34 #include <linux/security.h>
35 #include <linux/fs.h>
36 #include <linux/math64.h>
37 #include <linux/ptrace.h>
38 
39 #include <linux/uaccess.h>
40 #include <linux/compat.h>
41 #include <asm/unistd.h>
42 
43 #include <generated/timeconst.h>
44 #include "timekeeping.h"
45 
46 #if defined(CONFIG_64BIT) || defined(CONFIG_COMPAT_32BIT_TIME)
47 #define __WANT_OLD_TIME_TYPE_SYSCALL 1
48 #endif
49 
50 static_assert(sizeof(__kernel_old_time_t) == 8 ? IS_ENABLED(__WANT_OLD_TIME_TYPE_SYSCALL) : true);
51 
52 /*
53  * The timezone where the local system is located.  Used as a default by some
54  * programs who obtain this value by using gettimeofday.
55  */
56 struct timezone sys_tz;
57 
58 EXPORT_SYMBOL(sys_tz);
59 
60 #if defined(__ARCH_WANT_SYS_TIME) && defined(__WANT_OLD_TIME_TYPE_SYSCALL)
61 
62 /*
63  * sys_time() can be implemented in user-level using
64  * sys_gettimeofday().  Is this for backwards compatibility?  If so,
65  * why not move it into the appropriate arch directory (for those
66  * architectures that need it).
67  */
68 SYSCALL_DEFINE1(time, __kernel_old_time_t __user *, tloc)
69 {
70 	__kernel_old_time_t i = (__kernel_old_time_t)ktime_get_real_seconds();
71 
72 	if (tloc) {
73 		if (put_user(i,tloc))
74 			return -EFAULT;
75 	}
76 	force_successful_syscall_return();
77 	return i;
78 }
79 
80 /*
81  * sys_stime() can be implemented in user-level using
82  * sys_settimeofday().  Is this for backwards compatibility?  If so,
83  * why not move it into the appropriate arch directory (for those
84  * architectures that need it).
85  */
86 
87 SYSCALL_DEFINE1(stime, __kernel_old_time_t __user *, tptr)
88 {
89 	struct timespec64 tv;
90 	int err;
91 
92 	if (get_user(tv.tv_sec, tptr))
93 		return -EFAULT;
94 
95 	tv.tv_nsec = 0;
96 
97 	err = security_settime64(&tv, NULL);
98 	if (err)
99 		return err;
100 
101 	do_settimeofday64(&tv);
102 	return 0;
103 }
104 
105 #endif /* __ARCH_WANT_SYS_TIME && __WANT_OLD_TIME_TYPE_SYSCALL */
106 
107 #ifdef CONFIG_COMPAT_32BIT_TIME
108 #ifdef __ARCH_WANT_SYS_TIME32
109 
110 /* old_time32_t is a 32 bit "long" and needs to get converted. */
111 SYSCALL_DEFINE1(time32, old_time32_t __user *, tloc)
112 {
113 	old_time32_t i;
114 
115 	i = (old_time32_t)ktime_get_real_seconds();
116 
117 	if (tloc) {
118 		if (put_user(i,tloc))
119 			return -EFAULT;
120 	}
121 	force_successful_syscall_return();
122 	return i;
123 }
124 
125 SYSCALL_DEFINE1(stime32, old_time32_t __user *, tptr)
126 {
127 	struct timespec64 tv;
128 	int err;
129 
130 	if (get_user(tv.tv_sec, tptr))
131 		return -EFAULT;
132 
133 	tv.tv_nsec = 0;
134 
135 	err = security_settime64(&tv, NULL);
136 	if (err)
137 		return err;
138 
139 	do_settimeofday64(&tv);
140 	return 0;
141 }
142 
143 #endif /* __ARCH_WANT_SYS_TIME32 */
144 #endif
145 
146 #ifdef __WANT_OLD_TIME_TYPE_SYSCALL
147 SYSCALL_DEFINE2(gettimeofday, struct __kernel_old_timeval __user *, tv,
148 		struct timezone __user *, tz)
149 {
150 	if (likely(tv != NULL)) {
151 		struct timespec64 ts;
152 
153 		ktime_get_real_ts64(&ts);
154 		if (put_user(ts.tv_sec, &tv->tv_sec) ||
155 		    put_user(ts.tv_nsec / 1000, &tv->tv_usec))
156 			return -EFAULT;
157 	}
158 	if (unlikely(tz != NULL)) {
159 		if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
160 			return -EFAULT;
161 	}
162 	return 0;
163 }
164 #endif /* __WANT_OLD_TIME_TYPE_SYSCALL */
165 
166 /*
167  * In case for some reason the CMOS clock has not already been running
168  * in UTC, but in some local time: The first time we set the timezone,
169  * we will warp the clock so that it is ticking UTC time instead of
170  * local time. Presumably, if someone is setting the timezone then we
171  * are running in an environment where the programs understand about
172  * timezones. This should be done at boot time in the /etc/rc script,
173  * as soon as possible, so that the clock can be set right. Otherwise,
174  * various programs will get confused when the clock gets warped.
175  */
176 
177 int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz)
178 {
179 	static int firsttime = 1;
180 	int error = 0;
181 
182 	if (tv && !timespec64_valid_settod(tv))
183 		return -EINVAL;
184 
185 	error = security_settime64(tv, tz);
186 	if (error)
187 		return error;
188 
189 	if (tz) {
190 		/* Verify we're within the +-15 hrs range */
191 		if (tz->tz_minuteswest > 15*60 || tz->tz_minuteswest < -15*60)
192 			return -EINVAL;
193 
194 		sys_tz = *tz;
195 		update_vsyscall_tz();
196 		if (firsttime) {
197 			firsttime = 0;
198 			if (!tv)
199 				timekeeping_warp_clock();
200 		}
201 	}
202 	if (tv)
203 		return do_settimeofday64(tv);
204 	return 0;
205 }
206 
207 SYSCALL_DEFINE2(settimeofday, struct __kernel_old_timeval __user *, tv,
208 		struct timezone __user *, tz)
209 {
210 	struct timespec64 new_ts;
211 	struct timezone new_tz;
212 
213 	if (tv) {
214 		if (!IS_ENABLED(__WANT_OLD_TIME_TYPE_SYSCALL))
215 			return -EINVAL;
216 
217 		if (get_user(new_ts.tv_sec, &tv->tv_sec) ||
218 		    get_user(new_ts.tv_nsec, &tv->tv_usec))
219 			return -EFAULT;
220 
221 		if (new_ts.tv_nsec >= USEC_PER_SEC || new_ts.tv_nsec < 0)
222 			return -EINVAL;
223 
224 		new_ts.tv_nsec *= NSEC_PER_USEC;
225 	}
226 	if (tz) {
227 		if (copy_from_user(&new_tz, tz, sizeof(*tz)))
228 			return -EFAULT;
229 	}
230 
231 	return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
232 }
233 
234 #ifdef CONFIG_COMPAT_32BIT_TIME
235 COMPAT_SYSCALL_DEFINE2(gettimeofday, struct old_timeval32 __user *, tv,
236 		       struct timezone __user *, tz)
237 {
238 	if (tv) {
239 		struct timespec64 ts;
240 
241 		ktime_get_real_ts64(&ts);
242 		if (put_user(ts.tv_sec, &tv->tv_sec) ||
243 		    put_user(ts.tv_nsec / 1000, &tv->tv_usec))
244 			return -EFAULT;
245 	}
246 	if (tz) {
247 		if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
248 			return -EFAULT;
249 	}
250 
251 	return 0;
252 }
253 #endif /* CONFIG_COMPAT_32BIT_TIME */
254 
255 #ifdef CONFIG_COMPAT
256 COMPAT_SYSCALL_DEFINE2(settimeofday, struct old_timeval32 __user *, tv,
257 		       struct timezone __user *, tz)
258 {
259 	struct timespec64 new_ts;
260 	struct timezone new_tz;
261 
262 	if (tv) {
263 		if (!IS_ENABLED(CONFIG_COMPAT_32BIT_TIME))
264 			return -EINVAL;
265 
266 		if (get_user(new_ts.tv_sec, &tv->tv_sec) ||
267 		    get_user(new_ts.tv_nsec, &tv->tv_usec))
268 			return -EFAULT;
269 
270 		if (new_ts.tv_nsec >= USEC_PER_SEC || new_ts.tv_nsec < 0)
271 			return -EINVAL;
272 
273 		new_ts.tv_nsec *= NSEC_PER_USEC;
274 	}
275 	if (tz) {
276 		if (copy_from_user(&new_tz, tz, sizeof(*tz)))
277 			return -EFAULT;
278 	}
279 
280 	return do_sys_settimeofday64(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
281 }
282 #endif /* CONFIG_COMPAT */
283 
284 #ifdef CONFIG_64BIT
285 SYSCALL_DEFINE1(adjtimex, struct __kernel_timex __user *, txc_p)
286 {
287 	struct __kernel_timex txc;		/* Local copy of parameter */
288 	int ret;
289 
290 	/* Copy the user data space into the kernel copy
291 	 * structure. But bear in mind that the structures
292 	 * may change
293 	 */
294 	if (copy_from_user(&txc, txc_p, sizeof(struct __kernel_timex)))
295 		return -EFAULT;
296 	ret = do_adjtimex(&txc);
297 	return copy_to_user(txc_p, &txc, sizeof(struct __kernel_timex)) ? -EFAULT : ret;
298 }
299 #endif
300 
301 #ifdef CONFIG_COMPAT_32BIT_TIME
302 int get_old_timex32(struct __kernel_timex *txc, const struct old_timex32 __user *utp)
303 {
304 	struct old_timex32 tx32;
305 
306 	memset(txc, 0, sizeof(struct __kernel_timex));
307 	if (copy_from_user(&tx32, utp, sizeof(struct old_timex32)))
308 		return -EFAULT;
309 
310 	txc->modes = tx32.modes;
311 	txc->offset = tx32.offset;
312 	txc->freq = tx32.freq;
313 	txc->maxerror = tx32.maxerror;
314 	txc->esterror = tx32.esterror;
315 	txc->status = tx32.status;
316 	txc->constant = tx32.constant;
317 	txc->precision = tx32.precision;
318 	txc->tolerance = tx32.tolerance;
319 	txc->time.tv_sec = tx32.time.tv_sec;
320 	txc->time.tv_usec = tx32.time.tv_usec;
321 	txc->tick = tx32.tick;
322 	txc->ppsfreq = tx32.ppsfreq;
323 	txc->jitter = tx32.jitter;
324 	txc->shift = tx32.shift;
325 	txc->stabil = tx32.stabil;
326 	txc->jitcnt = tx32.jitcnt;
327 	txc->calcnt = tx32.calcnt;
328 	txc->errcnt = tx32.errcnt;
329 	txc->stbcnt = tx32.stbcnt;
330 
331 	return 0;
332 }
333 
334 int put_old_timex32(struct old_timex32 __user *utp, const struct __kernel_timex *txc)
335 {
336 	struct old_timex32 tx32;
337 
338 	memset(&tx32, 0, sizeof(struct old_timex32));
339 	tx32.modes = txc->modes;
340 	tx32.offset = txc->offset;
341 	tx32.freq = txc->freq;
342 	tx32.maxerror = txc->maxerror;
343 	tx32.esterror = txc->esterror;
344 	tx32.status = txc->status;
345 	tx32.constant = txc->constant;
346 	tx32.precision = txc->precision;
347 	tx32.tolerance = txc->tolerance;
348 	tx32.time.tv_sec = txc->time.tv_sec;
349 	tx32.time.tv_usec = txc->time.tv_usec;
350 	tx32.tick = txc->tick;
351 	tx32.ppsfreq = txc->ppsfreq;
352 	tx32.jitter = txc->jitter;
353 	tx32.shift = txc->shift;
354 	tx32.stabil = txc->stabil;
355 	tx32.jitcnt = txc->jitcnt;
356 	tx32.calcnt = txc->calcnt;
357 	tx32.errcnt = txc->errcnt;
358 	tx32.stbcnt = txc->stbcnt;
359 	tx32.tai = txc->tai;
360 	if (copy_to_user(utp, &tx32, sizeof(struct old_timex32)))
361 		return -EFAULT;
362 	return 0;
363 }
364 
365 SYSCALL_DEFINE1(adjtimex_time32, struct old_timex32 __user *, utp)
366 {
367 	struct __kernel_timex txc;
368 	int err, ret;
369 
370 	err = get_old_timex32(&txc, utp);
371 	if (err)
372 		return err;
373 
374 	ret = do_adjtimex(&txc);
375 
376 	err = put_old_timex32(utp, &txc);
377 	if (err)
378 		return err;
379 
380 	return ret;
381 }
382 #endif
383 
384 #if HZ > MSEC_PER_SEC || (MSEC_PER_SEC % HZ)
385 /**
386  * jiffies_to_msecs - Convert jiffies to milliseconds
387  * @j: jiffies value
388  *
389  * Return: milliseconds value
390  */
391 unsigned int jiffies_to_msecs(const unsigned long j)
392 {
393 #if HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
394 	return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
395 #else
396 # if BITS_PER_LONG == 32
397 	return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
398 	       HZ_TO_MSEC_SHR32;
399 # else
400 	return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
401 # endif
402 #endif
403 }
404 EXPORT_SYMBOL(jiffies_to_msecs);
405 #endif
406 
407 #if (USEC_PER_SEC % HZ)
408 /**
409  * jiffies_to_usecs - Convert jiffies to microseconds
410  * @j: jiffies value
411  *
412  * Return: microseconds value
413  */
414 unsigned int jiffies_to_usecs(const unsigned long j)
415 {
416 	/*
417 	 * Hz usually doesn't go much further MSEC_PER_SEC.
418 	 * jiffies_to_usecs() and usecs_to_jiffies() depend on that.
419 	 */
420 	BUILD_BUG_ON(HZ > USEC_PER_SEC);
421 
422 #if BITS_PER_LONG == 32
423 	return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
424 #else
425 	return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
426 #endif
427 }
428 EXPORT_SYMBOL(jiffies_to_usecs);
429 #endif
430 
431 /**
432  * mktime64 - Converts date to seconds.
433  * @year0: year to convert
434  * @mon0: month to convert
435  * @day: day to convert
436  * @hour: hour to convert
437  * @min: minute to convert
438  * @sec: second to convert
439  *
440  * Converts Gregorian date to seconds since 1970-01-01 00:00:00.
441  * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
442  * => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
443  *
444  * [For the Julian calendar (which was used in Russia before 1917,
445  * Britain & colonies before 1752, anywhere else before 1582,
446  * and is still in use by some communities) leave out the
447  * -year/100+year/400 terms, and add 10.]
448  *
449  * This algorithm was first published by Gauss (I think).
450  *
451  * A leap second can be indicated by calling this function with sec as
452  * 60 (allowable under ISO 8601).  The leap second is treated the same
453  * as the following second since they don't exist in UNIX time.
454  *
455  * An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
456  * tomorrow - (allowable under ISO 8601) is supported.
457  *
458  * Return: seconds since the epoch time for the given input date
459  */
460 time64_t mktime64(const unsigned int year0, const unsigned int mon0,
461 		const unsigned int day, const unsigned int hour,
462 		const unsigned int min, const unsigned int sec)
463 {
464 	unsigned int mon = mon0, year = year0;
465 
466 	/* 1..12 -> 11,12,1..10 */
467 	if (0 >= (int) (mon -= 2)) {
468 		mon += 12;	/* Puts Feb last since it has leap day */
469 		year -= 1;
470 	}
471 
472 	return ((((time64_t)
473 		  (year/4 - year/100 + year/400 + 367*mon/12 + day) +
474 		  year*365 - 719499
475 	    )*24 + hour /* now have hours - midnight tomorrow handled here */
476 	  )*60 + min /* now have minutes */
477 	)*60 + sec; /* finally seconds */
478 }
479 EXPORT_SYMBOL(mktime64);
480 
481 struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec)
482 {
483 	struct timespec64 ts = ns_to_timespec64(nsec);
484 	struct __kernel_old_timeval tv;
485 
486 	tv.tv_sec = ts.tv_sec;
487 	tv.tv_usec = (suseconds_t)ts.tv_nsec / 1000;
488 
489 	return tv;
490 }
491 EXPORT_SYMBOL(ns_to_kernel_old_timeval);
492 
493 /**
494  * set_normalized_timespec64 - set timespec sec and nsec parts and normalize
495  *
496  * @ts:		pointer to timespec variable to be set
497  * @sec:	seconds to set
498  * @nsec:	nanoseconds to set
499  *
500  * Set seconds and nanoseconds field of a timespec variable and
501  * normalize to the timespec storage format
502  *
503  * Note: The tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC.
504  * For negative values only the tv_sec field is negative !
505  */
506 void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)
507 {
508 	while (nsec >= NSEC_PER_SEC) {
509 		/*
510 		 * The following asm() prevents the compiler from
511 		 * optimising this loop into a modulo operation. See
512 		 * also __iter_div_u64_rem() in include/linux/time.h
513 		 */
514 		asm("" : "+rm"(nsec));
515 		nsec -= NSEC_PER_SEC;
516 		++sec;
517 	}
518 	while (nsec < 0) {
519 		asm("" : "+rm"(nsec));
520 		nsec += NSEC_PER_SEC;
521 		--sec;
522 	}
523 	ts->tv_sec = sec;
524 	ts->tv_nsec = nsec;
525 }
526 EXPORT_SYMBOL(set_normalized_timespec64);
527 
528 /**
529  * ns_to_timespec64 - Convert nanoseconds to timespec64
530  * @nsec:       the nanoseconds value to be converted
531  *
532  * Return: the timespec64 representation of the nsec parameter.
533  */
534 struct timespec64 ns_to_timespec64(s64 nsec)
535 {
536 	struct timespec64 ts = { 0, 0 };
537 	s32 rem;
538 
539 	if (likely(nsec > 0)) {
540 		ts.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
541 		ts.tv_nsec = rem;
542 	} else if (nsec < 0) {
543 		/*
544 		 * With negative times, tv_sec points to the earlier
545 		 * second, and tv_nsec counts the nanoseconds since
546 		 * then, so tv_nsec is always a positive number.
547 		 */
548 		ts.tv_sec = -div_u64_rem(-nsec - 1, NSEC_PER_SEC, &rem) - 1;
549 		ts.tv_nsec = NSEC_PER_SEC - rem - 1;
550 	}
551 
552 	return ts;
553 }
554 EXPORT_SYMBOL(ns_to_timespec64);
555 
556 /**
557  * __msecs_to_jiffies: - convert milliseconds to jiffies
558  * @m:	time in milliseconds
559  *
560  * conversion is done as follows:
561  *
562  * - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
563  *
564  * - 'too large' values [that would result in larger than
565  *   MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
566  *
567  * - all other values are converted to jiffies by either multiplying
568  *   the input value by a factor or dividing it with a factor and
569  *   handling any 32-bit overflows.
570  *   for the details see _msecs_to_jiffies()
571  *
572  * msecs_to_jiffies() checks for the passed in value being a constant
573  * via __builtin_constant_p() allowing gcc to eliminate most of the
574  * code, __msecs_to_jiffies() is called if the value passed does not
575  * allow constant folding and the actual conversion must be done at
576  * runtime.
577  * The _msecs_to_jiffies helpers are the HZ dependent conversion
578  * routines found in include/linux/jiffies.h
579  *
580  * Return: jiffies value
581  */
582 unsigned long __msecs_to_jiffies(const unsigned int m)
583 {
584 	/*
585 	 * Negative value, means infinite timeout:
586 	 */
587 	if ((int)m < 0)
588 		return MAX_JIFFY_OFFSET;
589 	return _msecs_to_jiffies(m);
590 }
591 EXPORT_SYMBOL(__msecs_to_jiffies);
592 
593 /**
594  * __usecs_to_jiffies: - convert microseconds to jiffies
595  * @u:	time in milliseconds
596  *
597  * Return: jiffies value
598  */
599 unsigned long __usecs_to_jiffies(const unsigned int u)
600 {
601 	if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
602 		return MAX_JIFFY_OFFSET;
603 	return _usecs_to_jiffies(u);
604 }
605 EXPORT_SYMBOL(__usecs_to_jiffies);
606 
607 /**
608  * timespec64_to_jiffies - convert a timespec64 value to jiffies
609  * @value: pointer to &struct timespec64
610  *
611  * The TICK_NSEC - 1 rounds up the value to the next resolution.  Note
612  * that a remainder subtract here would not do the right thing as the
613  * resolution values don't fall on second boundaries.  I.e. the line:
614  * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding.
615  * Note that due to the small error in the multiplier here, this
616  * rounding is incorrect for sufficiently large values of tv_nsec, but
617  * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're
618  * OK.
619  *
620  * Rather, we just shift the bits off the right.
621  *
622  * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec
623  * value to a scaled second value.
624  *
625  * Return: jiffies value
626  */
627 unsigned long
628 timespec64_to_jiffies(const struct timespec64 *value)
629 {
630 	u64 sec = value->tv_sec;
631 	long nsec = value->tv_nsec + TICK_NSEC - 1;
632 
633 	if (sec >= MAX_SEC_IN_JIFFIES){
634 		sec = MAX_SEC_IN_JIFFIES;
635 		nsec = 0;
636 	}
637 	return ((sec * SEC_CONVERSION) +
638 		(((u64)nsec * NSEC_CONVERSION) >>
639 		 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC;
640 
641 }
642 EXPORT_SYMBOL(timespec64_to_jiffies);
643 
644 /**
645  * jiffies_to_timespec64 - convert jiffies value to &struct timespec64
646  * @jiffies: jiffies value
647  * @value: pointer to &struct timespec64
648  */
649 void
650 jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)
651 {
652 	/*
653 	 * Convert jiffies to nanoseconds and separate with
654 	 * one divide.
655 	 */
656 	u32 rem;
657 	value->tv_sec = div_u64_rem((u64)jiffies * TICK_NSEC,
658 				    NSEC_PER_SEC, &rem);
659 	value->tv_nsec = rem;
660 }
661 EXPORT_SYMBOL(jiffies_to_timespec64);
662 
663 /*
664  * Convert jiffies/jiffies_64 to clock_t and back.
665  */
666 
667 /**
668  * jiffies_to_clock_t - Convert jiffies to clock_t
669  * @x: jiffies value
670  *
671  * Return: jiffies converted to clock_t (CLOCKS_PER_SEC)
672  */
673 clock_t jiffies_to_clock_t(unsigned long x)
674 {
675 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
676 # if HZ < USER_HZ
677 	return x * (USER_HZ / HZ);
678 # else
679 	return x / (HZ / USER_HZ);
680 # endif
681 #else
682 	return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
683 #endif
684 }
685 EXPORT_SYMBOL(jiffies_to_clock_t);
686 
687 /**
688  * clock_t_to_jiffies - Convert clock_t to jiffies
689  * @x: clock_t value
690  *
691  * Return: clock_t value converted to jiffies
692  */
693 unsigned long clock_t_to_jiffies(unsigned long x)
694 {
695 #if (HZ % USER_HZ)==0
696 	if (x >= ~0UL / (HZ / USER_HZ))
697 		return ~0UL;
698 	return x * (HZ / USER_HZ);
699 #else
700 	/* Don't worry about loss of precision here .. */
701 	if (x >= ~0UL / HZ * USER_HZ)
702 		return ~0UL;
703 
704 	/* .. but do try to contain it here */
705 	return div_u64((u64)x * HZ, USER_HZ);
706 #endif
707 }
708 EXPORT_SYMBOL(clock_t_to_jiffies);
709 
710 /**
711  * jiffies_64_to_clock_t - Convert jiffies_64 to clock_t
712  * @x: jiffies_64 value
713  *
714  * Return: jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)
715  */
716 notrace u64 jiffies_64_to_clock_t(u64 x)
717 {
718 #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
719 # if HZ < USER_HZ
720 	x = div_u64(x * USER_HZ, HZ);
721 # elif HZ > USER_HZ
722 	x = div_u64(x, HZ / USER_HZ);
723 # else
724 	/* Nothing to do */
725 # endif
726 #else
727 	/*
728 	 * There are better ways that don't overflow early,
729 	 * but even this doesn't overflow in hundreds of years
730 	 * in 64 bits, so..
731 	 */
732 	x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));
733 #endif
734 	return x;
735 }
736 EXPORT_SYMBOL(jiffies_64_to_clock_t);
737 
738 /**
739  * nsec_to_clock_t - Convert nsec value to clock_t
740  * @x: nsec value
741  *
742  * Return: nsec value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)
743  */
744 u64 nsec_to_clock_t(u64 x)
745 {
746 #if (NSEC_PER_SEC % USER_HZ) == 0
747 	return div_u64(x, NSEC_PER_SEC / USER_HZ);
748 #elif (USER_HZ % 512) == 0
749 	return div_u64(x * USER_HZ / 512, NSEC_PER_SEC / 512);
750 #else
751 	/*
752          * max relative error 5.7e-8 (1.8s per year) for USER_HZ <= 1024,
753          * overflow after 64.99 years.
754          * exact for HZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
755          */
756 	return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
757 #endif
758 }
759 
760 /**
761  * jiffies64_to_nsecs - Convert jiffies64 to nanoseconds
762  * @j: jiffies64 value
763  *
764  * Return: nanoseconds value
765  */
766 u64 jiffies64_to_nsecs(u64 j)
767 {
768 #if !(NSEC_PER_SEC % HZ)
769 	return (NSEC_PER_SEC / HZ) * j;
770 # else
771 	return div_u64(j * HZ_TO_NSEC_NUM, HZ_TO_NSEC_DEN);
772 #endif
773 }
774 EXPORT_SYMBOL(jiffies64_to_nsecs);
775 
776 /**
777  * jiffies64_to_msecs - Convert jiffies64 to milliseconds
778  * @j: jiffies64 value
779  *
780  * Return: milliseconds value
781  */
782 u64 jiffies64_to_msecs(const u64 j)
783 {
784 #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
785 	return (MSEC_PER_SEC / HZ) * j;
786 #else
787 	return div_u64(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
788 #endif
789 }
790 EXPORT_SYMBOL(jiffies64_to_msecs);
791 
792 /**
793  * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64
794  *
795  * @n:	nsecs in u64
796  *
797  * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
798  * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
799  * for scheduler, not for use in device drivers to calculate timeout value.
800  *
801  * note:
802  *   NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
803  *   ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
804  *
805  * Return: nsecs converted to jiffies64 value
806  */
807 u64 nsecs_to_jiffies64(u64 n)
808 {
809 #if (NSEC_PER_SEC % HZ) == 0
810 	/* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */
811 	return div_u64(n, NSEC_PER_SEC / HZ);
812 #elif (HZ % 512) == 0
813 	/* overflow after 292 years if HZ = 1024 */
814 	return div_u64(n * HZ / 512, NSEC_PER_SEC / 512);
815 #else
816 	/*
817 	 * Generic case - optimized for cases where HZ is a multiple of 3.
818 	 * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc.
819 	 */
820 	return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ);
821 #endif
822 }
823 EXPORT_SYMBOL(nsecs_to_jiffies64);
824 
825 /**
826  * nsecs_to_jiffies - Convert nsecs in u64 to jiffies
827  *
828  * @n:	nsecs in u64
829  *
830  * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64.
831  * And this doesn't return MAX_JIFFY_OFFSET since this function is designed
832  * for scheduler, not for use in device drivers to calculate timeout value.
833  *
834  * note:
835  *   NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512)
836  *   ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years
837  *
838  * Return: nsecs converted to jiffies value
839  */
840 unsigned long nsecs_to_jiffies(u64 n)
841 {
842 	return (unsigned long)nsecs_to_jiffies64(n);
843 }
844 EXPORT_SYMBOL_GPL(nsecs_to_jiffies);
845 
846 /**
847  * timespec64_add_safe - Add two timespec64 values and do a safety check
848  * for overflow.
849  * @lhs: first (left) timespec64 to add
850  * @rhs: second (right) timespec64 to add
851  *
852  * It's assumed that both values are valid (>= 0).
853  * And, each timespec64 is in normalized form.
854  *
855  * Return: sum of @lhs + @rhs
856  */
857 struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
858 				const struct timespec64 rhs)
859 {
860 	struct timespec64 res;
861 
862 	set_normalized_timespec64(&res, (timeu64_t) lhs.tv_sec + rhs.tv_sec,
863 			lhs.tv_nsec + rhs.tv_nsec);
864 
865 	if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
866 		res.tv_sec = TIME64_MAX;
867 		res.tv_nsec = 0;
868 	}
869 
870 	return res;
871 }
872 EXPORT_SYMBOL_GPL(timespec64_add_safe);
873 
874 /**
875  * get_timespec64 - get user's time value into kernel space
876  * @ts: destination &struct timespec64
877  * @uts: user's time value as &struct __kernel_timespec
878  *
879  * Handles compat or 32-bit modes.
880  *
881  * Return: 0 on success or negative errno on error
882  */
883 int get_timespec64(struct timespec64 *ts,
884 		   const struct __kernel_timespec __user *uts)
885 {
886 	struct __kernel_timespec kts;
887 	int ret;
888 
889 	ret = copy_from_user(&kts, uts, sizeof(kts));
890 	if (ret)
891 		return -EFAULT;
892 
893 	ts->tv_sec = kts.tv_sec;
894 
895 	/* Zero out the padding in compat mode */
896 	if (in_compat_syscall())
897 		kts.tv_nsec &= 0xFFFFFFFFUL;
898 
899 	/* In 32-bit mode, this drops the padding */
900 	ts->tv_nsec = kts.tv_nsec;
901 
902 	return 0;
903 }
904 EXPORT_SYMBOL_GPL(get_timespec64);
905 
906 /**
907  * put_timespec64 - convert timespec64 value to __kernel_timespec format and
908  * 		    copy the latter to userspace
909  * @ts: input &struct timespec64
910  * @uts: user's &struct __kernel_timespec
911  *
912  * Return: 0 on success or negative errno on error
913  */
914 int put_timespec64(const struct timespec64 *ts,
915 		   struct __kernel_timespec __user *uts)
916 {
917 	struct __kernel_timespec kts = {
918 		.tv_sec = ts->tv_sec,
919 		.tv_nsec = ts->tv_nsec
920 	};
921 
922 	return copy_to_user(uts, &kts, sizeof(kts)) ? -EFAULT : 0;
923 }
924 EXPORT_SYMBOL_GPL(put_timespec64);
925 
926 static int __get_old_timespec32(struct timespec64 *ts64,
927 				   const struct old_timespec32 __user *cts)
928 {
929 	struct old_timespec32 ts;
930 	int ret;
931 
932 	ret = copy_from_user(&ts, cts, sizeof(ts));
933 	if (ret)
934 		return -EFAULT;
935 
936 	ts64->tv_sec = ts.tv_sec;
937 	ts64->tv_nsec = ts.tv_nsec;
938 
939 	return 0;
940 }
941 
942 static int __put_old_timespec32(const struct timespec64 *ts64,
943 				   struct old_timespec32 __user *cts)
944 {
945 	struct old_timespec32 ts = {
946 		.tv_sec = ts64->tv_sec,
947 		.tv_nsec = ts64->tv_nsec
948 	};
949 	return copy_to_user(cts, &ts, sizeof(ts)) ? -EFAULT : 0;
950 }
951 
952 /**
953  * get_old_timespec32 - get user's old-format time value into kernel space
954  * @ts: destination &struct timespec64
955  * @uts: user's old-format time value (&struct old_timespec32)
956  *
957  * Handles X86_X32_ABI compatibility conversion.
958  *
959  * Return: 0 on success or negative errno on error
960  */
961 int get_old_timespec32(struct timespec64 *ts, const void __user *uts)
962 {
963 	if (COMPAT_USE_64BIT_TIME)
964 		return copy_from_user(ts, uts, sizeof(*ts)) ? -EFAULT : 0;
965 	else
966 		return __get_old_timespec32(ts, uts);
967 }
968 EXPORT_SYMBOL_GPL(get_old_timespec32);
969 
970 /**
971  * put_old_timespec32 - convert timespec64 value to &struct old_timespec32 and
972  * 			copy the latter to userspace
973  * @ts: input &struct timespec64
974  * @uts: user's &struct old_timespec32
975  *
976  * Handles X86_X32_ABI compatibility conversion.
977  *
978  * Return: 0 on success or negative errno on error
979  */
980 int put_old_timespec32(const struct timespec64 *ts, void __user *uts)
981 {
982 	if (COMPAT_USE_64BIT_TIME)
983 		return copy_to_user(uts, ts, sizeof(*ts)) ? -EFAULT : 0;
984 	else
985 		return __put_old_timespec32(ts, uts);
986 }
987 EXPORT_SYMBOL_GPL(put_old_timespec32);
988 
989 /**
990  * get_itimerspec64 - get user's &struct __kernel_itimerspec into kernel space
991  * @it: destination &struct itimerspec64
992  * @uit: user's &struct __kernel_itimerspec
993  *
994  * Return: 0 on success or negative errno on error
995  */
996 int get_itimerspec64(struct itimerspec64 *it,
997 			const struct __kernel_itimerspec __user *uit)
998 {
999 	int ret;
1000 
1001 	ret = get_timespec64(&it->it_interval, &uit->it_interval);
1002 	if (ret)
1003 		return ret;
1004 
1005 	ret = get_timespec64(&it->it_value, &uit->it_value);
1006 
1007 	return ret;
1008 }
1009 EXPORT_SYMBOL_GPL(get_itimerspec64);
1010 
1011 /**
1012  * put_itimerspec64 - convert &struct itimerspec64 to __kernel_itimerspec format
1013  * 		      and copy the latter to userspace
1014  * @it: input &struct itimerspec64
1015  * @uit: user's &struct __kernel_itimerspec
1016  *
1017  * Return: 0 on success or negative errno on error
1018  */
1019 int put_itimerspec64(const struct itimerspec64 *it,
1020 			struct __kernel_itimerspec __user *uit)
1021 {
1022 	int ret;
1023 
1024 	ret = put_timespec64(&it->it_interval, &uit->it_interval);
1025 	if (ret)
1026 		return ret;
1027 
1028 	ret = put_timespec64(&it->it_value, &uit->it_value);
1029 
1030 	return ret;
1031 }
1032 EXPORT_SYMBOL_GPL(put_itimerspec64);
1033 
1034 /**
1035  * get_old_itimerspec32 - get user's &struct old_itimerspec32 into kernel space
1036  * @its: destination &struct itimerspec64
1037  * @uits: user's &struct old_itimerspec32
1038  *
1039  * Return: 0 on success or negative errno on error
1040  */
1041 int get_old_itimerspec32(struct itimerspec64 *its,
1042 			const struct old_itimerspec32 __user *uits)
1043 {
1044 
1045 	if (__get_old_timespec32(&its->it_interval, &uits->it_interval) ||
1046 	    __get_old_timespec32(&its->it_value, &uits->it_value))
1047 		return -EFAULT;
1048 	return 0;
1049 }
1050 EXPORT_SYMBOL_GPL(get_old_itimerspec32);
1051 
1052 /**
1053  * put_old_itimerspec32 - convert &struct itimerspec64 to &struct
1054  *			  old_itimerspec32 and copy the latter to userspace
1055  * @its: input &struct itimerspec64
1056  * @uits: user's &struct old_itimerspec32
1057  *
1058  * Return: 0 on success or negative errno on error
1059  */
1060 int put_old_itimerspec32(const struct itimerspec64 *its,
1061 			struct old_itimerspec32 __user *uits)
1062 {
1063 	if (__put_old_timespec32(&its->it_interval, &uits->it_interval) ||
1064 	    __put_old_timespec32(&its->it_value, &uits->it_value))
1065 		return -EFAULT;
1066 	return 0;
1067 }
1068 EXPORT_SYMBOL_GPL(put_old_itimerspec32);
1069