Commit 9f4646d2 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge branch 'fortglx/3.9/time' of git://git.linaro.org/people/jstultz/linux into timers/core

parents 86c8ead5 84e345e4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ static inline bool has_persistent_clock(void)

extern void read_persistent_clock(struct timespec *ts);
extern void read_boot_clock(struct timespec *ts);
extern int persistent_clock_is_local;
extern int update_persistent_clock(struct timespec now);
void timekeeping_init(void);
extern int timekeeping_suspended;
+8 −0
Original line number Diff line number Diff line
@@ -114,6 +114,12 @@ SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
	return 0;
}

/*
 * Indicates if there is an offset between the system clock and the hardware
 * clock/persistent clock/rtc.
 */
int persistent_clock_is_local;

/*
 * Adjust the time obtained from the CMOS to be UTC time instead of
 * local time.
@@ -135,6 +141,8 @@ static inline void warp_clock(void)
	struct timespec adjust;

	adjust = current_kernel_time();
	if (sys_tz.tz_minuteswest != 0)
		persistent_clock_is_local = 1;
	adjust.tv_sec += sys_tz.tz_minuteswest * 60;
	do_settimeofday(&adjust);
}
+6 −2
Original line number Diff line number Diff line
@@ -511,13 +511,17 @@ static void sync_cmos_clock(struct work_struct *work)

	getnstimeofday(&now);
	if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2) {
		struct timespec adjust = now;

		fail = -ENODEV;
		if (persistent_clock_is_local)
			adjust.tv_sec -= (sys_tz.tz_minuteswest * 60);
#ifdef CONFIG_GENERIC_CMOS_UPDATE
		fail = update_persistent_clock(now);
		fail = update_persistent_clock(adjust);
#endif
#ifdef CONFIG_RTC_SYSTOHC
		if (fail == -ENODEV)
			fail = rtc_set_ntp_time(now);
			fail = rtc_set_ntp_time(adjust);
#endif
	}