Skip to content
  • Joel Fernandes's avatar
    timekeeping: Add a fast and NMI safe boot clock · 948a5312
    Joel Fernandes authored
    
    
    This boot clock can be used as a tracing clock and will account for
    suspend time.
    
    To keep it NMI safe since we're accessing from tracing, we're not using a
    separate timekeeper with updates to monotonic clock and boot offset
    protected with seqlocks. This has the following minor side effects:
    
    (1) Its possible that a timestamp be taken after the boot offset is updated
    but before the timekeeper is updated. If this happens, the new boot offset
    is added to the old timekeeping making the clock appear to update slightly
    earlier:
       CPU 0                                        CPU 1
       timekeeping_inject_sleeptime64()
       __timekeeping_inject_sleeptime(tk, delta);
                                                    timestamp();
       timekeeping_update(tk, TK_CLEAR_NTP...);
    
    (2) On 32-bit systems, the 64-bit boot offset (tk->offs_boot) may be
    partially updated.  Since the tk->offs_boot update is a rare event, this
    should be a rare occurrence which postprocessing should be able to handle.
    
    Signed-off-by: default avatarJoel Fernandes <joelaf@google.com>
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Prarit Bhargava <prarit@redhat.com>
    Cc: Richard Cochran <richardcochran@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1480372524-15181-6-git-send-email-john.stultz@linaro.org
    
    
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    948a5312