diff options
| -rw-r--r-- | arch/powerpc/kernel/time.c | 15 | 
1 files changed, 14 insertions, 1 deletions
| diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 92dc844299b6..a136a11c490d 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c @@ -777,7 +777,7 @@ int update_persistent_clock(struct timespec now)  	return ppc_md.set_rtc_time(&tm);  } -void read_persistent_clock(struct timespec *ts) +static void __read_persistent_clock(struct timespec *ts)  {  	struct rtc_time tm;  	static int first = 1; @@ -800,10 +800,23 @@ void read_persistent_clock(struct timespec *ts)  		return;  	}  	ppc_md.get_rtc_time(&tm); +  	ts->tv_sec = mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,  			    tm.tm_hour, tm.tm_min, tm.tm_sec);  } +void read_persistent_clock(struct timespec *ts) +{ +	__read_persistent_clock(ts); + +	/* Sanitize it in case real time clock is set below EPOCH */ +	if (ts->tv_sec < 0) { +		ts->tv_sec = 0; +		ts->tv_nsec = 0; +	} +		 +} +  /* clocksource code */  static cycle_t rtc_read(struct clocksource *cs)  { | 
