powerpc: Avoid giving out RTC dates below EPOCH
Doing so causes xtime to be negative which crashes the timekeeping code in funny ways when doing suspend/resume Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
f1167fb318
commit
978d7eb31d
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user