forked from mirrors/linux
		
	time: Introduce do_sys_settimeofday64()
The do_sys_settimeofday() function uses a timespec, which is not year 2038 safe on 32bit systems. Thus this patch introduces do_sys_settimeofday64(), which allows us to transition users of do_sys_settimeofday() to using 64bit time types. Cc: Prarit Bhargava <prarit@redhat.com> Cc: Richard Cochran <richardcochran@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Signed-off-by: Baolin Wang <baolin.wang@linaro.org> [jstultz: Include errno-base.h to avoid build issue on some arches] Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
		
							parent
							
								
									457db29bfc
								
							
						
					
					
						commit
						86d3473224
					
				
					 2 changed files with 19 additions and 6 deletions
				
			
		|  | @ -1,6 +1,8 @@ | |||
| #ifndef _LINUX_TIMEKEEPING_H | ||||
| #define _LINUX_TIMEKEEPING_H | ||||
| 
 | ||||
| #include <asm-generic/errno-base.h> | ||||
| 
 | ||||
| /* Included from linux/ktime.h */ | ||||
| 
 | ||||
| void timekeeping_init(void); | ||||
|  | @ -11,8 +13,19 @@ extern int timekeeping_suspended; | |||
|  */ | ||||
| extern void do_gettimeofday(struct timeval *tv); | ||||
| extern int do_settimeofday64(const struct timespec64 *ts); | ||||
| extern int do_sys_settimeofday(const struct timespec *tv, | ||||
| 			       const struct timezone *tz); | ||||
| extern int do_sys_settimeofday64(const struct timespec64 *tv, | ||||
| 				 const struct timezone *tz); | ||||
| static inline int do_sys_settimeofday(const struct timespec *tv, | ||||
| 				      const struct timezone *tz) | ||||
| { | ||||
| 	struct timespec64 ts64; | ||||
| 
 | ||||
| 	if (!tv) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	ts64 = timespec_to_timespec64(*tv); | ||||
| 	return do_sys_settimeofday64(&ts64, tz); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Kernel time accessors | ||||
|  |  | |||
|  | @ -160,15 +160,15 @@ static inline void warp_clock(void) | |||
|  * various programs will get confused when the clock gets warped. | ||||
|  */ | ||||
| 
 | ||||
| int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz) | ||||
| int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz) | ||||
| { | ||||
| 	static int firsttime = 1; | ||||
| 	int error = 0; | ||||
| 
 | ||||
| 	if (tv && !timespec_valid(tv)) | ||||
| 	if (tv && !timespec64_valid(tv)) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	error = security_settime(tv, tz); | ||||
| 	error = security_settime64(tv, tz); | ||||
| 	if (error) | ||||
| 		return error; | ||||
| 
 | ||||
|  | @ -186,7 +186,7 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz) | |||
| 		} | ||||
| 	} | ||||
| 	if (tv) | ||||
| 		return do_settimeofday(tv); | ||||
| 		return do_settimeofday64(tv); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Baolin Wang
						Baolin Wang