aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/timekeeping.h1
-rw-r--r--kernel/time/timekeeping.c11
2 files changed, 10 insertions, 2 deletions
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index 5047b83483d6..18d27a3f72ca 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -269,6 +269,7 @@ static inline bool has_persistent_clock(void)
269 269
270extern void read_persistent_clock(struct timespec *ts); 270extern void read_persistent_clock(struct timespec *ts);
271extern void read_boot_clock(struct timespec *ts); 271extern void read_boot_clock(struct timespec *ts);
272extern void read_boot_clock64(struct timespec64 *ts);
272extern int update_persistent_clock(struct timespec now); 273extern int update_persistent_clock(struct timespec now);
273 274
274 275
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 5b12292b343a..652e50a9c6ed 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1188,6 +1188,14 @@ void __weak read_boot_clock(struct timespec *ts)
1188 ts->tv_nsec = 0; 1188 ts->tv_nsec = 0;
1189} 1189}
1190 1190
1191void __weak read_boot_clock64(struct timespec64 *ts64)
1192{
1193 struct timespec ts;
1194
1195 read_boot_clock(&ts);
1196 *ts64 = timespec_to_timespec64(ts);
1197}
1198
1191/* 1199/*
1192 * timekeeping_init - Initializes the clocksource and common timekeeping values 1200 * timekeeping_init - Initializes the clocksource and common timekeeping values
1193 */ 1201 */
@@ -1209,8 +1217,7 @@ void __init timekeeping_init(void)
1209 } else if (now.tv_sec || now.tv_nsec) 1217 } else if (now.tv_sec || now.tv_nsec)
1210 persistent_clock_exist = true; 1218 persistent_clock_exist = true;
1211 1219
1212 read_boot_clock(&ts); 1220 read_boot_clock64(&boot);
1213 boot = timespec_to_timespec64(ts);
1214 if (!timespec64_valid_strict(&boot)) { 1221 if (!timespec64_valid_strict(&boot)) {
1215 pr_warn("WARNING: Boot clock returned invalid value!\n" 1222 pr_warn("WARNING: Boot clock returned invalid value!\n"
1216 " Check your CMOS/BIOS settings.\n"); 1223 " Check your CMOS/BIOS settings.\n");