|
@@ -1256,7 +1256,7 @@ out_adjust:
|
|
|
static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk)
|
|
|
{
|
|
|
u64 nsecps = (u64)NSEC_PER_SEC << tk->shift;
|
|
|
- unsigned int action = 0;
|
|
|
+ unsigned int clock_set = 0;
|
|
|
|
|
|
while (tk->xtime_nsec >= nsecps) {
|
|
|
int leap;
|
|
@@ -1279,10 +1279,10 @@ static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk)
|
|
|
__timekeeping_set_tai_offset(tk, tk->tai_offset - leap);
|
|
|
|
|
|
clock_was_set_delayed();
|
|
|
- action = TK_CLOCK_WAS_SET;
|
|
|
+ clock_set = TK_CLOCK_WAS_SET;
|
|
|
}
|
|
|
}
|
|
|
- return action;
|
|
|
+ return clock_set;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1295,7 +1295,8 @@ static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk)
|
|
|
* Returns the unconsumed cycles.
|
|
|
*/
|
|
|
static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
|
|
|
- u32 shift)
|
|
|
+ u32 shift,
|
|
|
+ unsigned int *clock_set)
|
|
|
{
|
|
|
cycle_t interval = tk->cycle_interval << shift;
|
|
|
u64 raw_nsecs;
|
|
@@ -1309,7 +1310,7 @@ static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
|
|
|
tk->cycle_last += interval;
|
|
|
|
|
|
tk->xtime_nsec += tk->xtime_interval << shift;
|
|
|
- accumulate_nsecs_to_secs(tk);
|
|
|
+ *clock_set |= accumulate_nsecs_to_secs(tk);
|
|
|
|
|
|
/* Accumulate raw time */
|
|
|
raw_nsecs = (u64)tk->raw_interval << shift;
|
|
@@ -1367,7 +1368,7 @@ static void update_wall_time(void)
|
|
|
struct timekeeper *tk = &shadow_timekeeper;
|
|
|
cycle_t offset;
|
|
|
int shift = 0, maxshift;
|
|
|
- unsigned int action;
|
|
|
+ unsigned int clock_set = 0;
|
|
|
unsigned long flags;
|
|
|
|
|
|
raw_spin_lock_irqsave(&timekeeper_lock, flags);
|
|
@@ -1402,7 +1403,8 @@ static void update_wall_time(void)
|
|
|
maxshift = (64 - (ilog2(ntp_tick_length())+1)) - 1;
|
|
|
shift = min(shift, maxshift);
|
|
|
while (offset >= tk->cycle_interval) {
|
|
|
- offset = logarithmic_accumulation(tk, offset, shift);
|
|
|
+ offset = logarithmic_accumulation(tk, offset, shift,
|
|
|
+ &clock_set);
|
|
|
if (offset < tk->cycle_interval<<shift)
|
|
|
shift--;
|
|
|
}
|
|
@@ -1420,7 +1422,7 @@ static void update_wall_time(void)
|
|
|
* Finally, make sure that after the rounding
|
|
|
* xtime_nsec isn't larger than NSEC_PER_SEC
|
|
|
*/
|
|
|
- action = accumulate_nsecs_to_secs(tk);
|
|
|
+ clock_set |= accumulate_nsecs_to_secs(tk);
|
|
|
|
|
|
write_seqcount_begin(&timekeeper_seq);
|
|
|
/* Update clock->cycle_last with the new value */
|
|
@@ -1436,7 +1438,7 @@ static void update_wall_time(void)
|
|
|
* updating.
|
|
|
*/
|
|
|
memcpy(real_tk, tk, sizeof(*tk));
|
|
|
- timekeeping_update(real_tk, action);
|
|
|
+ timekeeping_update(real_tk, clock_set);
|
|
|
write_seqcount_end(&timekeeper_seq);
|
|
|
out:
|
|
|
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
|