The patch titled GTOD: persistent clock support, core (update) has been added to the -mm tree. Its filename is gtod-persistent-clock-support-core-update.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: GTOD: persistent clock support, core (update) From: john stultz <johnstul@xxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Signed-off-by: John Stultz <johnstul@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- kernel/timer.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-) diff -puN kernel/timer.c~gtod-persistent-clock-support-core-update kernel/timer.c --- a/kernel/timer.c~gtod-persistent-clock-support-core-update +++ a/kernel/timer.c @@ -746,8 +746,14 @@ int timekeeping_is_continuous(void) return ret; } -/* Weak dummy function for arches that do not yet support it. - * XXX - Do be sure to remove it once all arches implement it. +/** + * read_persistent_clock - Return time in seconds from the persistent clock. + * + * Weak dummy function for arches that do not yet support it. + * Returns seconds from epoch using the battery backed persistent clock. + * Returns zero if unsupported. + * + * XXX - Do be sure to remove it once all arches implement it. */ unsigned long __attribute__((weak)) read_persistent_clock(void) { @@ -759,7 +765,8 @@ unsigned long __attribute__((weak)) read */ void __init timekeeping_init(void) { - unsigned long flags, sec = read_persistent_clock(); + unsigned long flags; + unsigned long sec = read_persistent_clock(); write_seqlock_irqsave(&xtime_lock, flags); @@ -770,7 +777,7 @@ void __init timekeeping_init(void) clock->cycle_last = clocksource_read(clock); xtime.tv_sec = sec; - xtime.tv_nsec = (jiffies % HZ) * (NSEC_PER_SEC / HZ); + xtime.tv_nsec = 0; set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); @@ -778,7 +785,9 @@ void __init timekeeping_init(void) } +/* flag for if timekeeping is suspended */ static int timekeeping_suspended; +/* time in seconds when suspend began */ static unsigned long timekeeping_suspend_time; /** @@ -791,14 +800,15 @@ static unsigned long timekeeping_suspend */ static int timekeeping_resume(struct sys_device *dev) { - unsigned long flags, now = read_persistent_clock(); + unsigned long flags; + unsigned long now = read_persistent_clock(); write_seqlock_irqsave(&xtime_lock, flags); if (now && (now > timekeeping_suspend_time)) { unsigned long sleep_length = now - timekeeping_suspend_time; xtime.tv_sec += sleep_length; - jiffies_64 += sleep_length * HZ; + jiffies_64 += (u64)sleep_length * HZ; } /* re-base the last cycle value */ clock->cycle_last = clocksource_read(clock); _ Patches currently in -mm which might be from johnstul@xxxxxxxxxx are origin.patch gtod-exponential-update_wall_time.patch gtod-persistent-clock-support-core.patch gtod-persistent-clock-support-core-update.patch gtod-persistent-clock-support-i386.patch time-uninline-jiffiesh.patch time-fix-msecs_to_jiffies-bug.patch time-fix-timeout-overflow.patch cleanup-uninline-irq_enter-and-move-it-into-a.patch dynticks-extend-next_timer_interrupt-to-use-a.patch hrtimers-namespace-and-enum-cleanup.patch hrtimers-clean-up-locking.patch hrtimers-state-tracking.patch hrtimers-clean-up-callback-tracking.patch hrtimers-move-and-add-documentation.patch clockevents-core.patch clockevents-drivers-for-i386.patch high-res-timers-core.patch high-res-timers-core-fix.patch dynticks-core.patch dynticks-core-nmi-watchdog-fix.patch dyntick-add-nohz-stats-to-proc-stat.patch dynticks-i386-arch-code.patch high-res-timers-dynticks-enable-i386-support.patch debugging-feature-timer-stats.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html