Skip to content

Commit

Permalink
uml: deal with host time going backwards
Browse files Browse the repository at this point in the history
Protection against the host's time going backwards (eg, ntp activity on
the host) by keeping track of the time at the last tick and if it's
greater than the current time, keep time stopped until the host catches
up.

Cc: Nix <[email protected]>
Signed-off-by: Jeff Dike <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
cfd-36 authored and torvalds committed Jun 6, 2008
1 parent 3439789 commit 06e1e4f
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions arch/um/os-Linux/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ static void deliver_alarm(void)
unsigned long long this_tick = os_nsecs();
int one_tick = UM_NSEC_PER_SEC / UM_HZ;

/* Protection against the host's time going backwards */
if ((last_tick != 0) && (this_tick < last_tick))
this_tick = last_tick;

if (last_tick == 0)
last_tick = this_tick - one_tick;

Expand Down Expand Up @@ -148,6 +152,9 @@ static int after_sleep_interval(struct timespec *ts)
start_usecs = usec;

start_usecs -= skew / UM_NSEC_PER_USEC;
if (start_usecs < 0)
start_usecs = 0;

tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC,
.tv_usec = start_usecs % UM_USEC_PER_SEC });
interval = ((struct itimerval) { { 0, usec }, tv });
Expand Down

0 comments on commit 06e1e4f

Please sign in to comment.