diff --git a/[refs] b/[refs] index 96f2ee7dcdc3..26868bafdd92 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2be1f3a73dd02e38e181cf5abacb3d45a6a2d6b8 +refs/heads/master: c7dcf87a6881bf796faee83003163eb3de41a309 diff --git a/trunk/kernel/time/timekeeping.c b/trunk/kernel/time/timekeeping.c index e960d824263f..49010d822f72 100644 --- a/trunk/kernel/time/timekeeping.c +++ b/trunk/kernel/time/timekeeping.c @@ -710,9 +710,10 @@ static cycle_t logarithmic_accumulation(cycle_t offset, int shift) /* Accumulate raw time */ raw_nsecs = timekeeper.raw_interval << shift; raw_nsecs += raw_time.tv_nsec; - while (raw_nsecs >= NSEC_PER_SEC) { - raw_nsecs -= NSEC_PER_SEC; - raw_time.tv_sec++; + if (raw_nsecs >= NSEC_PER_SEC) { + u64 raw_secs = raw_nsecs; + raw_nsecs = do_div(raw_secs, NSEC_PER_SEC); + raw_time.tv_sec += raw_secs; } raw_time.tv_nsec = raw_nsecs;