• T
    timekeeping: Provide NMI safe access to clock realtime · 4c3711d7
    Thomas Gleixner 提交于
    The configurable printk timestamping wants access to clock realtime. Right
    now there is no ktime_get_real_fast_ns() accessor because reading the
    monotonic base and the realtime offset cannot be done atomically. Contrary
    to boot time this offset can change during runtime and cause half updated
    readouts.
    
    struct tk_read_base was fully packed when the fast timekeeper access was
    implemented. commit ceea5e37 ("time: Fix clock->read(clock) race around
    clocksource changes") removed the 'read' function pointer from the
    structure, but of course left the comment stale.
    
    So now the structure can fit a new 64bit member w/o violating the cache
    line constraints.
    
    Add real_base to tk_read_base and update it in the fast timekeeper update
    sequence.
    
    Implement an accessor which follows the same scheme as the accessor to
    clock monotonic, but uses the new real_base to access clock real time.
    
    The runtime overhead for updating real_base is minimal as it just adds two
    cache hot values and stores them into an already dirtied cache line along
    with the other fast timekeeper updates.
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Cc: Prarit Bhargava <prarit@redhat.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Peter Zijlstra <peterz@infradead,org>
    Link: https://lkml.kernel.org/r/1505757060-2004-3-git-send-email-prarit@redhat.com
    4c3711d7
timekeeping.c 65.6 KB