}
  
  /**
-  * read_boot_clock64 -  Return time of the system start.
+  * read_persistent_wall_and_boot_offset - Read persistent clock, and also offset
+  *                                        from the boot.
   *
   * Weak dummy function for arches that do not yet support it.
-  * Function to read the exact time the system has been started.
-  * Returns a timespec64 with tv_sec=0 and tv_nsec=0 if unsupported.
-  *
-  *  XXX - Do be sure to remove it once all arches implement it.
+  * wall_time  - current time as returned by persistent clock
+  * boot_offset        - offset that is defined as wall_time - boot_time
+  * The default function calculates offset based on the current value of
+  * local_clock(). This way architectures that support sched_clock() but don't
+  * support dedicated boot time clock will provide the best estimate of the
+  * boot time.
   */
- void __weak read_boot_clock64(struct timespec64 *ts)
+ void __weak __init
+ read_persistent_wall_and_boot_offset(struct timespec64 *wall_time,
+                                    struct timespec64 *boot_offset)
  {
-       ts->tv_sec = 0;
-       ts->tv_nsec = 0;
+       read_persistent_clock64(wall_time);
+       *boot_offset = ns_to_timespec64(local_clock());
  }
  
 -/* Flag for if timekeeping_resume() has injected sleeptime */
 -static bool sleeptime_injected;
 +/*
 + * Flag reflecting whether timekeeping_resume() has injected sleeptime.
 + *
 + * The flag starts of false and is only set when a suspend reaches
 + * timekeeping_suspend(), timekeeping_resume() sets it to false when the
 + * timekeeper clocksource is not stopping across suspend and has been
 + * used to update sleep time. If the timekeeper clocksource has stopped
 + * then the flag stays true and is used by the RTC resume code to decide
 + * whether sleeptime must be injected and if so the flag gets false then.
 + *
 + * If a suspend fails before reaching timekeeping_resume() then the flag
 + * stays false and prevents erroneous sleeptime injection.
 + */
 +static bool suspend_timing_needed;
  
  /* Flag for if there is a persistent clock on this platform */
  static bool persistent_clock_exists;