* [PATCH v2] libtracefs: New API for getting synthetic event
@ 2022-01-13 17:00 Yordan Karadzhov (VMware)
2022-01-14 10:12 ` Tzvetomir Stoyanov
0 siblings, 1 reply; 4+ messages in thread
From: Yordan Karadzhov (VMware) @ 2022-01-13 17:00 UTC (permalink / raw)
To: rostedt, linux-trace-devel; +Cc: Yordan Karadzhov (VMware)
A new API is proposed, to get tep event descriptor for given synthetic
event:
tracefs_synth_get_event ()
The API implementation gets derived from the implementation of the
existing API tracefs_dynevent_get_event(). It can detect any newly
created or removed synthetic events.
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
---
Documentation/libtracefs-synth2.txt | 13 +++++++++++--
include/tracefs-local.h | 2 ++
include/tracefs.h | 2 ++
src/tracefs-dynevents.c | 17 +----------------
src/tracefs-events.c | 21 +++++++++++++++++++++
src/tracefs-hist.c | 18 ++++++++++++++++++
6 files changed, 55 insertions(+), 18 deletions(-)
diff --git a/Documentation/libtracefs-synth2.txt b/Documentation/libtracefs-synth2.txt
index 8056ab8..444318c 100644
--- a/Documentation/libtracefs-synth2.txt
+++ b/Documentation/libtracefs-synth2.txt
@@ -6,7 +6,8 @@ NAME
tracefs_synth_create, tracefs_synth_destroy, tracefs_synth_echo_cmd, tracefs_synth_complete,
tracefs_synth_get_start_hist, tracefs_synth_trace, tracefs_synth_snapshot,
tracefs_synth_get_name, tracefs_synth_raw_fmt, tracefs_synth_show_event,
-tracefs_synth_show_start_hist, tracefs_synth_show_end_hist - Creation of synthetic events
+tracefs_synth_show_start_hist, tracefs_synth_show_end_hist, tracefs_synth_get_event
+- Creation of synthetic events
SYNOPSIS
--------
@@ -32,7 +33,7 @@ int tracefs_synth_raw_fmt(struct trace_seq pass:[*]seq, struct tracefs_synth pas
const char *tracefs_synth_show_event(struct tracefs_synth pass:[*]synth);
const char *tracefs_synth_show_start_hist(struct tracefs_synth pass:[*]synth);
const char *tracefs_synth_show_end_hist(struct tracefs_synth pass:[*]synth);
-
+struct tep_event pass:[*]*tracefs_synth_get_event*(struct tep_handle pass:[*]_tep_, struct tracefs_synth pass:[*]_synth_);
--
DESCRIPTION
@@ -114,11 +115,19 @@ and is freed with the event by *tracefs_synth_free*().
synthetic event or NULL on error. The returned string belongs to the synth event object
and is freed with the event by *tracefs_synth_free*().
+The *tracefs_synth_get_event*() function returns a tep event, describing the given synthetic
+event. The API detects any newly created or removed dynamic events. The returned pointer to
+tep event is controlled by @tep and must not be freed.
+
RETURN VALUE
------------
*tracefs_synth_get_name*(), *tracefs_synth_show_event*(), *tracefs_synth_show_start_hist*()
and *tracefs_synth_show_end_hist*() return a string owned by the synth event object.
+The *tracefs_synth_get_event*() function returns a pointer to a tep event or NULL in case of an
+error or if the requested synthetic event is missing. The returned pointer to tep event is
+controlled by @tep and must not be freed.
+
All other functions return zero on success or -1 on error.
ERRORS
diff --git a/include/tracefs-local.h b/include/tracefs-local.h
index daea5da..bf157e1 100644
--- a/include/tracefs-local.h
+++ b/include/tracefs-local.h
@@ -116,5 +116,7 @@ int trace_load_events(struct tep_handle *tep,
const char *tracing_dir, const char *system);
int trace_rescan_events(struct tep_handle *tep,
const char *tracing_dir, const char *system);
+struct tep_event *get_tep_event(struct tep_handle *tep,
+ const char *system, const char *name);
#endif /* _TRACE_FS_LOCAL_H */
diff --git a/include/tracefs.h b/include/tracefs.h
index bd758dc..9c53b84 100644
--- a/include/tracefs.h
+++ b/include/tracefs.h
@@ -564,5 +564,7 @@ const char *tracefs_synth_show_end_hist(struct tracefs_synth *synth);
struct tracefs_synth *tracefs_sql(struct tep_handle *tep, const char *name,
const char *sql_buffer, char **err);
+struct tep_event *
+tracefs_synth_get_event(struct tep_handle *tep, struct tracefs_synth *synth);
#endif /* _TRACE_FS_H */
diff --git a/src/tracefs-dynevents.c b/src/tracefs-dynevents.c
index d089d02..ddebb6b 100644
--- a/src/tracefs-dynevents.c
+++ b/src/tracefs-dynevents.c
@@ -765,23 +765,8 @@ error:
struct tep_event *
tracefs_dynevent_get_event(struct tep_handle *tep, struct tracefs_dynevent *dynevent)
{
- struct tep_event *event;
-
if (!tep || !dynevent || !dynevent->event)
return NULL;
- /* Check if event exists in the system */
- if (!tracefs_event_file_exists(NULL, dynevent->system, dynevent->event, "format"))
- return NULL;
-
- /* If the dynamic event is already loaded in the tep, return it */
- event = tep_find_event_by_name(tep, dynevent->system, dynevent->event);
- if (event)
- return event;
-
- /* Try to load any new events from the given system */
- if (trace_rescan_events(tep, NULL, dynevent->system))
- return NULL;
-
- return tep_find_event_by_name(tep, dynevent->system, dynevent->event);
+ return get_tep_event(tep, dynevent->system, dynevent->event);
}
diff --git a/src/tracefs-events.c b/src/tracefs-events.c
index 067f6e0..30e80ce 100644
--- a/src/tracefs-events.c
+++ b/src/tracefs-events.c
@@ -752,6 +752,27 @@ __hidden int trace_load_events(struct tep_handle *tep,
return load_events(tep, tracing_dir, system, false);
}
+__hidden struct tep_event *get_tep_event(struct tep_handle *tep,
+ const char *system, const char *name)
+{
+ struct tep_event *event;
+
+ /* Check if event exists in the system */
+ if (!tracefs_event_file_exists(NULL, system, name, "format"))
+ return NULL;
+
+ /* If the dynamic event is already loaded in the tep, return it */
+ event = tep_find_event_by_name(tep, system, name);
+ if (event)
+ return event;
+
+ /* Try to load any new events from the given system */
+ if (trace_rescan_events(tep, NULL, system))
+ return NULL;
+
+ return tep_find_event_by_name(tep, system, name);
+}
+
static int read_header(struct tep_handle *tep, const char *tracing_dir)
{
struct stat st;
diff --git a/src/tracefs-hist.c b/src/tracefs-hist.c
index 7146fc1..8d99492 100644
--- a/src/tracefs-hist.c
+++ b/src/tracefs-hist.c
@@ -2197,3 +2197,21 @@ int tracefs_synth_echo_cmd(struct trace_seq *seq,
}
return ret;
}
+
+/**
+ * tracefs_synth_get_event - return tep event representing the given synthetic event
+ * @tep: a handle to the trace event parser context that holds the events
+ * @synth: a synthetic event context, describing given synthetic event.
+ *
+ * Returns a pointer to a tep event describing the given synthetic event. The pointer
+ * is managed by the @tep handle and must not be freed. In case of an error, or in case
+ * the requested synthetic event is missing in the @tep handler - NULL is returned.
+ */
+struct tep_event *
+tracefs_synth_get_event(struct tep_handle *tep, struct tracefs_synth *synth)
+{
+ if (!tep || !synth || !synth->name)
+ return NULL;
+
+ return get_tep_event(tep, SYNTHETIC_GROUP, synth->name);
+}
--
2.32.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] libtracefs: New API for getting synthetic event
2022-01-13 17:00 [PATCH v2] libtracefs: New API for getting synthetic event Yordan Karadzhov (VMware)
@ 2022-01-14 10:12 ` Tzvetomir Stoyanov
2022-01-14 14:57 ` Yordan Karadzhov
0 siblings, 1 reply; 4+ messages in thread
From: Tzvetomir Stoyanov @ 2022-01-14 10:12 UTC (permalink / raw)
To: Yordan Karadzhov (VMware); +Cc: Steven Rostedt, Linux Trace Devel
On Fri, Jan 14, 2022 at 10:17 AM Yordan Karadzhov (VMware)
<y.karadz@gmail.com> wrote:
>
> A new API is proposed, to get tep event descriptor for given synthetic
> event:
>
> tracefs_synth_get_event ()
>
> The API implementation gets derived from the implementation of the
> existing API tracefs_dynevent_get_event(). It can detect any newly
> created or removed synthetic events.
>
> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
> ---
> Documentation/libtracefs-synth2.txt | 13 +++++++++++--
> include/tracefs-local.h | 2 ++
> include/tracefs.h | 2 ++
> src/tracefs-dynevents.c | 17 +----------------
> src/tracefs-events.c | 21 +++++++++++++++++++++
> src/tracefs-hist.c | 18 ++++++++++++++++++
> 6 files changed, 55 insertions(+), 18 deletions(-)
>
> diff --git a/Documentation/libtracefs-synth2.txt b/Documentation/libtracefs-synth2.txt
> index 8056ab8..444318c 100644
> --- a/Documentation/libtracefs-synth2.txt
> +++ b/Documentation/libtracefs-synth2.txt
> @@ -6,7 +6,8 @@ NAME
> tracefs_synth_create, tracefs_synth_destroy, tracefs_synth_echo_cmd, tracefs_synth_complete,
> tracefs_synth_get_start_hist, tracefs_synth_trace, tracefs_synth_snapshot,
> tracefs_synth_get_name, tracefs_synth_raw_fmt, tracefs_synth_show_event,
> -tracefs_synth_show_start_hist, tracefs_synth_show_end_hist - Creation of synthetic events
> +tracefs_synth_show_start_hist, tracefs_synth_show_end_hist, tracefs_synth_get_event
The new API should be added also in Documentation/libtracefs.txt, the
main man page with all APIs. Forgot to mention that in the previous
review.
[ ... ]
--
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] libtracefs: New API for getting synthetic event
2022-01-14 10:12 ` Tzvetomir Stoyanov
@ 2022-01-14 14:57 ` Yordan Karadzhov
2022-01-14 15:00 ` Tzvetomir Stoyanov
0 siblings, 1 reply; 4+ messages in thread
From: Yordan Karadzhov @ 2022-01-14 14:57 UTC (permalink / raw)
To: Tzvetomir Stoyanov; +Cc: Steven Rostedt, Linux Trace Devel
On 14.01.22 г. 12:12 ч., Tzvetomir Stoyanov wrote:
> On Fri, Jan 14, 2022 at 10:17 AM Yordan Karadzhov (VMware)
> <y.karadz@gmail.com> wrote:
>>
>> A new API is proposed, to get tep event descriptor for given synthetic
>> event:
>>
>> tracefs_synth_get_event ()
>>
>> The API implementation gets derived from the implementation of the
>> existing API tracefs_dynevent_get_event(). It can detect any newly
>> created or removed synthetic events.
>>
>> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
>> ---
>> Documentation/libtracefs-synth2.txt | 13 +++++++++++--
>> include/tracefs-local.h | 2 ++
>> include/tracefs.h | 2 ++
>> src/tracefs-dynevents.c | 17 +----------------
>> src/tracefs-events.c | 21 +++++++++++++++++++++
>> src/tracefs-hist.c | 18 ++++++++++++++++++
>> 6 files changed, 55 insertions(+), 18 deletions(-)
>>
>> diff --git a/Documentation/libtracefs-synth2.txt b/Documentation/libtracefs-synth2.txt
>> index 8056ab8..444318c 100644
>> --- a/Documentation/libtracefs-synth2.txt
>> +++ b/Documentation/libtracefs-synth2.txt
>> @@ -6,7 +6,8 @@ NAME
>> tracefs_synth_create, tracefs_synth_destroy, tracefs_synth_echo_cmd, tracefs_synth_complete,
>> tracefs_synth_get_start_hist, tracefs_synth_trace, tracefs_synth_snapshot,
>> tracefs_synth_get_name, tracefs_synth_raw_fmt, tracefs_synth_show_event,
>> -tracefs_synth_show_start_hist, tracefs_synth_show_end_hist - Creation of synthetic events
>> +tracefs_synth_show_start_hist, tracefs_synth_show_end_hist, tracefs_synth_get_event
>
> The new API should be added also in Documentation/libtracefs.txt, the
> main man page with all APIs. Forgot to mention that in the previous
> review.
>
Hmm, I see absolutely no tracefs_synth_*() APIs in Documentation/libtracefs.txt.
Maybe this can be fixed in a separate patch.
thanks,
Yordan
> [ ... ]
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] libtracefs: New API for getting synthetic event
2022-01-14 14:57 ` Yordan Karadzhov
@ 2022-01-14 15:00 ` Tzvetomir Stoyanov
0 siblings, 0 replies; 4+ messages in thread
From: Tzvetomir Stoyanov @ 2022-01-14 15:00 UTC (permalink / raw)
To: Yordan Karadzhov; +Cc: Steven Rostedt, Linux Trace Devel
On Fri, Jan 14, 2022 at 4:58 PM Yordan Karadzhov <y.karadz@gmail.com> wrote:
>
>
>
> On 14.01.22 г. 12:12 ч., Tzvetomir Stoyanov wrote:
> > On Fri, Jan 14, 2022 at 10:17 AM Yordan Karadzhov (VMware)
> > <y.karadz@gmail.com> wrote:
> >>
> >> A new API is proposed, to get tep event descriptor for given synthetic
> >> event:
> >>
> >> tracefs_synth_get_event ()
> >>
> >> The API implementation gets derived from the implementation of the
> >> existing API tracefs_dynevent_get_event(). It can detect any newly
> >> created or removed synthetic events.
> >>
> >> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
> >> ---
> >> Documentation/libtracefs-synth2.txt | 13 +++++++++++--
> >> include/tracefs-local.h | 2 ++
> >> include/tracefs.h | 2 ++
> >> src/tracefs-dynevents.c | 17 +----------------
> >> src/tracefs-events.c | 21 +++++++++++++++++++++
> >> src/tracefs-hist.c | 18 ++++++++++++++++++
> >> 6 files changed, 55 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/Documentation/libtracefs-synth2.txt b/Documentation/libtracefs-synth2.txt
> >> index 8056ab8..444318c 100644
> >> --- a/Documentation/libtracefs-synth2.txt
> >> +++ b/Documentation/libtracefs-synth2.txt
> >> @@ -6,7 +6,8 @@ NAME
> >> tracefs_synth_create, tracefs_synth_destroy, tracefs_synth_echo_cmd, tracefs_synth_complete,
> >> tracefs_synth_get_start_hist, tracefs_synth_trace, tracefs_synth_snapshot,
> >> tracefs_synth_get_name, tracefs_synth_raw_fmt, tracefs_synth_show_event,
> >> -tracefs_synth_show_start_hist, tracefs_synth_show_end_hist - Creation of synthetic events
> >> +tracefs_synth_show_start_hist, tracefs_synth_show_end_hist, tracefs_synth_get_event
> >
> > The new API should be added also in Documentation/libtracefs.txt, the
> > main man page with all APIs. Forgot to mention that in the previous
> > review.
> >
>
> Hmm, I see absolutely no tracefs_synth_*() APIs in Documentation/libtracefs.txt.
> Maybe this can be fixed in a separate patch.
>
Yes, the whole synth_* section is missing, so I submitted a patch to
update that list. We can add tracefs_synth_get_event() later, when it
is accepted.
> thanks,
> Yordan
>
>
>
> > [ ... ]
> >
> >
--
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-01-14 15:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-13 17:00 [PATCH v2] libtracefs: New API for getting synthetic event Yordan Karadzhov (VMware)
2022-01-14 10:12 ` Tzvetomir Stoyanov
2022-01-14 14:57 ` Yordan Karadzhov
2022-01-14 15:00 ` Tzvetomir Stoyanov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.