Message ID | 20210324130418.436206-6-tz.stoyanov@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | TSC trace clock to nanosecond conversion | expand |
On Wed, 24 Mar 2021 15:04:00 +0200 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> wrote: > diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c > index 635897e1..5f7f5b3d 100644 > --- a/tracecmd/trace-record.c > +++ b/tracecmd/trace-record.c > @@ -5683,6 +5683,33 @@ check_instance_die(struct buffer_instance *instance, char *param) > tracefs_instance_get_name(instance->tracefs), param); > } > > +static bool clock_is_supported(struct tracefs_instance *instance, char *clock) > +{ > + char *all_clocks = NULL; > + char *ret = NULL; > + > + all_clocks = tracefs_instance_file_read(instance, "trace_clock", NULL); > + if (!all_clocks) > + return false; > + > + ret = strstr(all_clocks, clock); > + if (ret && (ret == all_clocks || ret[-1] == ' ' || ret[-1] == '[')) { > + switch (ret[strlen(clock)]) { > + case ' ': > + case '\0': Testing this, I found we also need: case '\n': -- Steve > + case ']': > + break; > + default: > + ret = NULL; > + } > + } else { > + ret = NULL; > + } > + free(all_clocks); > + > + return ret != NULL; > +} > + > static void parse_record_options(int argc, > char **argv, > enum trace_cmd curr_cmd, > --
diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c index 635897e1..5f7f5b3d 100644 --- a/tracecmd/trace-record.c +++ b/tracecmd/trace-record.c @@ -5683,6 +5683,33 @@ check_instance_die(struct buffer_instance *instance, char *param) tracefs_instance_get_name(instance->tracefs), param); } +static bool clock_is_supported(struct tracefs_instance *instance, char *clock) +{ + char *all_clocks = NULL; + char *ret = NULL; + + all_clocks = tracefs_instance_file_read(instance, "trace_clock", NULL); + if (!all_clocks) + return false; + + ret = strstr(all_clocks, clock); + if (ret && (ret == all_clocks || ret[-1] == ' ' || ret[-1] == '[')) { + switch (ret[strlen(clock)]) { + case ' ': + case '\0': + case ']': + break; + default: + ret = NULL; + } + } else { + ret = NULL; + } + free(all_clocks); + + return ret != NULL; +} + static void parse_record_options(int argc, char **argv, enum trace_cmd curr_cmd,
A new local function is added to check if a given trace clock is supported by the ftrace: clock_is_supported() This function is used by the other patches from the set. The logic should be part of the tracefs library, when a tracefs API is implemeneted, this local funciton will be removed. Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> --- tracecmd/trace-record.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)