• Tina Ruchandani's avatar
    aoe: use ktime_t instead of timeval · 85cf955d
    Tina Ruchandani authored
    'struct frame' uses two variables to store the sent timestamp - 'struct
    timeval' and jiffies. jiffies is used to avoid discrepancies caused by
    updates to system time. 'struct timeval' is deprecated because it uses
    32-bit representation for seconds which will overflow in year 2038.
    
    This patch does the following:
    - Replace the use of 'struct timeval' and jiffies with ktime_t, which
      is the recommended type for timestamping
    - ktime_t provides both long range (like jiffies) and high resolution
      (like timeval). Using ktime_get (monotonic time) instead of wall-clock
      time prevents any discprepancies caused by updates to system time.
    
    [updates by Arnd below]
    The original patch from Tina never went anywhere as we discussed how
    to keep the impact on performance minimal. I've started over now but
    arrived at basically the same patch that she had originally, except for
    an slightly improved tsince_hr() function. I'm making it more robust
    against overflows, and also optimize explicitly for the common case
    in which a frame is less than 4.2 seconds old, using only a 32-bit
    division in that case.
    
    This should make the new version more efficient than the old code,
    since we replace the existing two 32-bit division in do_gettimeofday()
    plus one multiplication with a single single 32-bit division in
    tsince_hr() and drop the double bookkeeping. It's also more efficient
    than the ktime_get_us() API we discussed before, since that would
    also rely on multiple divisions.
    
    Link: https://lists.linaro.org/pipermail/y2038/2015-May/000276.htmlSigned-off-by: default avatarTina Ruchandani <ruchandani.tina@gmail.com>
    Cc: Ed Cashin <ed.cashin@acm.org>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    85cf955d
aoe.h 5.94 KB