• Steven Rostedt (VMware)'s avatar
    ring-buffer: Do not trigger a WARN if clock going backwards is detected · 29ce2451
    Steven Rostedt (VMware) authored
    After tweaking the ring buffer to be a bit faster, a warning is triggering
    on one of my machines, and causing my tests to fail. This warning is caused
    when the delta (current time stamp minus previous time stamp), is larger
    than the max time held by the ring buffer (59 bits).
    
    If the clock were to go backwards slightly, this would then easily trigger
    this warning. The machine that it triggered on, the clock did go backwards
    by around 450 nanoseconds, and this happened after a recalibration of the
    TSC clock. Now that the ring buffer is faster, it detects this, and the
    delta that is used larger than the max, the warning is triggered and my test
    fails.
    
    To handle the clock going backwards, look at the saved before and after time
    stamps. If they are the same, it means that the current event did not
    interrupt another event, and that those timestamp are of a previous event
    that was recorded. If the max delta is triggered, look at those time stamps,
    make sure they are the same, then use them to compare with the current
    timestamp. If the current timestamp is less than the before/after time
    stamps, then that means the clock being used went backward.
    
    Print out a message that this has happened, but do not warn about it (and
    only print the message once).
    
    Still do the warning if the delta is indeed larger than what can be used.
    
    Also remove the unneeded KERN_WARNING from the WARN_ONCE() print.
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    29ce2451
ring_buffer.c 151 KB