Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 978d7eb3 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent f1167fb3
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -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)
{