trace-cmd: Read information for tsc to nanoseconds conversion from trace file
Read multiplier and shift, required for TSC clock to nanosecond
conversion from the metadata of the trace file and save them in
the tracecmd input file handler.
Link: https://lore.kernel.org/linux-trace-devel/20210325064055.539554-10-tz.stoyanov@gmail.com
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index 51b9603..7848e6d 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -99,6 +99,12 @@
struct ts_offset_sample *ts_samples;
};
+struct tsc2nsec {
+ int mult;
+ int shift;
+ unsigned long long offset;
+};
+
struct tracecmd_input {
struct tep_handle *pevent;
unsigned long file_state;
@@ -118,6 +124,8 @@
bool use_pipe;
struct cpu_data *cpu_data;
long long ts_offset;
+ struct tsc2nsec tsc_calc;
+
struct host_trace_info host;
double ts2secs;
char * cpustats;
@@ -2674,6 +2682,16 @@
case TRACECMD_OPTION_GUEST:
trace_guest_load(handle, buf, size);
break;
+ case TRACECMD_OPTION_TSC2NSEC:
+ if (size < 16)
+ break;
+ handle->tsc_calc.mult = tep_read_number(handle->pevent,
+ buf, 4);
+ handle->tsc_calc.shift = tep_read_number(handle->pevent,
+ buf + 4, 4);
+ handle->tsc_calc.offset = tep_read_number(handle->pevent,
+ buf + 8, 8);
+ break;
default:
warning("unknown option %d", option);
break;