@@ -204,7 +204,23 @@ static inline void timekeeping_clocktai(struct timespec *ts)
/*
* RTC specific
*/
-extern void timekeeping_inject_sleeptime(struct timespec *delta);
+extern void timekeeping_inject_sleeptime64(struct timespec64 *delta);
+
+#if BITS_PER_LONG == 64
+static inline void timekeeping_inject_sleeptime(struct timespec *delta)
+{
+ timekeeping_inject_sleeptime64(delta);
+}
+#else
+static inline void timekeeping_inject_sleeptime(struct timespec *delta)
+{
+ struct timespec64 ts;
+
+ ts = timespec_to_timespec64(*delta);
+ timekeeping_inject_sleeptime64(&ts);
+}
+#endif
+
/*
* PPS accessor
@@ -1069,8 +1069,8 @@ static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
}
/**
- * timekeeping_inject_sleeptime - Adds suspend interval to timeekeeping values
- * @delta: pointer to a timespec delta value
+ * timekeeping_inject_sleeptime64 - Adds suspend interval to timeekeeping values
+ * @delta: pointer to a timespec64 delta value
*
* This hook is for architectures that cannot support read_persistent_clock
* because their RTC/persistent clock is only accessible when irqs are enabled.
@@ -1078,10 +1078,9 @@ static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
* This function should only be called by rtc_resume(), and allows
* a suspend offset to be injected into the timekeeping values.
*/
-void timekeeping_inject_sleeptime(struct timespec *delta)
+void timekeeping_inject_sleeptime64(struct timespec64 *delta)
{
struct timekeeper *tk = &tk_core.timekeeper;
- struct timespec64 tmp;
unsigned long flags;
/*
@@ -1096,8 +1095,7 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
timekeeping_forward_now(tk);
- tmp = timespec_to_timespec64(*delta);
- __timekeeping_inject_sleeptime(tk, &tmp);
+ __timekeeping_inject_sleeptime(tk, delta);
timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
Adds a timekeeping_inject_sleeptime64() interface to allow us to replace existing timekeeping_inject_sleeptime() users as we cleanup timespec usage in the kernel. Cc: Arnd Bergmann <arnd.bergmann@linaro.org> Signed-off-by: John Stultz <john.stultz@linaro.org> --- include/linux/timekeeping.h | 18 +++++++++++++++++- kernel/time/timekeeping.c | 10 ++++------ 2 files changed, 21 insertions(+), 7 deletions(-)