|
@@ -585,15 +585,19 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
|
|
|
update_vsyscall(tk);
|
|
|
update_pvclock_gtod(tk, action & TK_CLOCK_WAS_SET);
|
|
|
|
|
|
- if (action & TK_MIRROR)
|
|
|
- memcpy(&shadow_timekeeper, &tk_core.timekeeper,
|
|
|
- sizeof(tk_core.timekeeper));
|
|
|
-
|
|
|
update_fast_timekeeper(&tk->tkr_mono, &tk_fast_mono);
|
|
|
update_fast_timekeeper(&tk->tkr_raw, &tk_fast_raw);
|
|
|
|
|
|
if (action & TK_CLOCK_WAS_SET)
|
|
|
tk->clock_was_set_seq++;
|
|
|
+ /*
|
|
|
+ * The mirroring of the data to the shadow-timekeeper needs
|
|
|
+ * to happen last here to ensure we don't over-write the
|
|
|
+ * timekeeper structure on the next update with stale data
|
|
|
+ */
|
|
|
+ if (action & TK_MIRROR)
|
|
|
+ memcpy(&shadow_timekeeper, &tk_core.timekeeper,
|
|
|
+ sizeof(tk_core.timekeeper));
|
|
|
}
|
|
|
|
|
|
/**
|