X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Ftime.c;h=0b00a11421d95e38ff4edda1e59e518be6dacf71;hb=66441c4c6fa1fc32f9df510c7665886c6eb50189;hp=edeca1f9c2f21969147770e9cd5fd644aa0a0c7a;hpb=b55aec1c8e0c05520c47c3641c20684fc539f8a1;p=vpp.git diff --git a/src/vppinfra/time.c b/src/vppinfra/time.c index edeca1f9c2f..0b00a11421d 100644 --- a/src/vppinfra/time.c +++ b/src/vppinfra/time.c @@ -251,15 +251,32 @@ void clib_time_verify_frequency (clib_time_t * c) { f64 now_reference, delta_reference, delta_reference_max; - u64 delta_clock; + f64 delta_clock_in_seconds; + u64 now_clock, delta_clock; f64 new_clocks_per_second, delta; /* Ask the kernel and the CPU what time it is... */ now_reference = unix_time_now (); - c->last_cpu_time = clib_cpu_time_now (); + now_clock = clib_cpu_time_now (); - /* Calculate a new clock rate sample */ + /* Compute change in the reference clock */ delta_reference = now_reference - c->last_verify_reference_time; + + /* And change in the CPU clock */ + delta_clock_in_seconds = (f64) (now_clock - c->last_verify_cpu_time) * + c->seconds_per_clock; + + /* + * Recompute vpp start time reference, and total clocks + * using the current clock rate + */ + c->init_reference_time += (delta_reference - delta_clock_in_seconds); + c->total_cpu_time = (now_reference - c->init_reference_time) + * c->clocks_per_second; + + c->last_cpu_time = now_clock; + + /* Calculate a new clock rate sample */ delta_clock = c->last_cpu_time - c->last_verify_cpu_time; c->last_verify_cpu_time = c->last_cpu_time;