• Linus Torvalds's avatar
    Revert "time: Remove xtime_cache" · 83f57a11
    Linus Torvalds authored
    This reverts commit 7bc7d637, as
    requested by John Stultz. Quoting John:
    
     "Petr Titěra reported an issue where he saw odd atime regressions with
      2.6.33 where there were a full second worth of nanoseconds in the
      nanoseconds field.
    
      He also reviewed the time code and narrowed down the problem: unhandled
      overflow of the nanosecond field caused by rounding up the
      sub-nanosecond accumulated time.
    
      Details:
    
       * At the end of update_wall_time(), we currently round up the
      sub-nanosecond portion of accumulated time when storing it into xtime.
      This was added to avoid time inconsistencies caused when the
      sub-nanosecond portion was truncated when storing into xtime.
      Unfortunately we don't handle the possible second overflow caused by
      that rounding.
    
       * Previously the xtime_cache code hid this overflow by normalizing the
      xtime value when storing into the xtime_cache.
    
       * We could try to handle the second overflow after the rounding up, but
      since this affects the timekeeping's internal state, this would further
      complicate the next accumulation cycle, causing small errors in ntp
      steering. As much as I'd like to get rid of it, the xtime_cache code is
      known to work.
    
       * The correct fix is really to include the sub-nanosecond portion in the
      timekeeping accessor function, so we don't need to round up at during
      accumulation. This would greatly simplify the accumulation code.
      Unfortunately, we can't do this safely until the last three
      non-GENERIC_TIME arches (sparc32, arm, cris) are converted  (those
      patches are in -mm) and we kill off the spots where arches set xtime
      directly. This is all 2.6.34 material, so I think reverting the
      xtime_cache change is the best approach for now.
    
      Many thanks to Petr for both reporting and finding the issue!"
    Reported-by: default avatarPetr Titěra <P.Titera@century.cz>
    Requested-by: default avatarjohn stultz <johnstul@us.ibm.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    83f57a11
timekeeping.c 23.7 KB