On Mon, 15 Mar 2021 08:18:29 +0200 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote: > If there is information for TSC to nanoseconds conversion in the trace > file metadata, use it to recalculate the timestamps of all events. > > Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> > --- > lib/trace-cmd/trace-input.c | 28 ++++++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 4 deletions(-) > > diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c > index 65081007..dc9ac1d3 100644 > --- a/lib/trace-cmd/trace-input.c > +++ b/lib/trace-cmd/trace-input.c > @@ -1276,17 +1276,37 @@ static unsigned long long timestamp_correct(unsigned long long ts, > &host->ts_samples[mid+1]); > } > I would add a comment saying that the below function was taken from the Linux kernel. -- Steve > +static unsigned long long mul_u64_u32_shr(unsigned long long a, > + unsigned long long mul, unsigned int shift) > +{ > + unsigned int ah, al; > + unsigned long long ret; > + > + al = a; > + ah = a >> 32; > + > + ret = (al * mul) >> shift; > + if (ah) > + ret += (ah * mul) << (32 - shift); > + > + return ret; > +} > + > static unsigned long long timestamp_calc(unsigned long long ts, > struct tracecmd_input *handle) > { > - unsigned long long tstamp; > + unsigned long long t; > > - tstamp = timestamp_correct(ts, handle); > + t = timestamp_correct(ts, handle); > > if (handle->ts2secs) > - tstamp *= handle->ts2secs; > + t *= handle->ts2secs; > + else if (handle->tsc_calc.mult) { > + t = mul_u64_u32_shr(t, handle->tsc_calc.mult, handle->tsc_calc.shift); > + t += handle->tsc_calc.offset; > + } > > - return tstamp; > + return t; > } > > /*