|
@@ -923,20 +923,22 @@ static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
|
|
|
if (likely(error <= interval))
|
|
|
adj = 1;
|
|
|
else
|
|
|
- adj = timekeeping_bigadjust(tk, error, &interval,
|
|
|
- &offset);
|
|
|
- } else if (error < -interval) {
|
|
|
- /* See comment above, this is just switched for the negative */
|
|
|
- error >>= 2;
|
|
|
- if (likely(error >= -interval)) {
|
|
|
- adj = -1;
|
|
|
- interval = -interval;
|
|
|
- offset = -offset;
|
|
|
- } else
|
|
|
- adj = timekeeping_bigadjust(tk, error, &interval,
|
|
|
- &offset);
|
|
|
- } else
|
|
|
- return;
|
|
|
+ adj = timekeeping_bigadjust(tk, error, &interval, &offset);
|
|
|
+ } else {
|
|
|
+ if (error < -interval) {
|
|
|
+ /* See comment above, this is just switched for the negative */
|
|
|
+ error >>= 2;
|
|
|
+ if (likely(error >= -interval)) {
|
|
|
+ adj = -1;
|
|
|
+ interval = -interval;
|
|
|
+ offset = -offset;
|
|
|
+ } else {
|
|
|
+ adj = timekeeping_bigadjust(tk, error, &interval, &offset);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ goto out_adjust;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
if (unlikely(tk->clock->maxadj &&
|
|
|
(tk->mult + adj > tk->clock->mult + tk->clock->maxadj))) {
|
|
@@ -999,6 +1001,7 @@ static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
|
|
|
tk->xtime_nsec -= offset;
|
|
|
tk->ntp_error -= (interval - offset) << tk->ntp_error_shift;
|
|
|
|
|
|
+out_adjust:
|
|
|
/*
|
|
|
* It may be possible that when we entered this function, xtime_nsec
|
|
|
* was very small. Further, if we're slightly speeding the clocksource
|