diff --git a/[refs] b/[refs] index b125635d1867..e844b8fadb93 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a939e817aa7e199d2fff05a67cb745be32dd5c2d +refs/heads/master: f695cf94837de53864180400cbac42cfa370426f diff --git a/trunk/kernel/time/timekeeping.c b/trunk/kernel/time/timekeeping.c index 403c2a092830..b53da5ecbea2 100644 --- a/trunk/kernel/time/timekeeping.c +++ b/trunk/kernel/time/timekeeping.c @@ -448,9 +448,12 @@ EXPORT_SYMBOL(timekeeping_inject_offset); static int change_clocksource(void *data) { struct clocksource *new, *old; + unsigned long flags; new = (struct clocksource *) data; + write_seqlock_irqsave(&timekeeper.lock, flags); + timekeeping_forward_now(); if (!new->enable || new->enable(new) == 0) { old = timekeeper.clock; @@ -458,6 +461,10 @@ static int change_clocksource(void *data) if (old->disable) old->disable(old); } + timekeeping_update(true); + + write_sequnlock_irqrestore(&timekeeper.lock, flags); + return 0; }