* Francis Giraldeau ([email protected]) wrote: > By writing to the file /proc/lttng, a user-space application creates a > kernel event. The event's payload is by default UTF-8 text, but any data > can be written, up to 1024 bytes. Null-character is optional and is not > enforced. The event uses sequence for space efficiency and to store any > data as payload.
As discussed on IRC, please move the function to a separate module in /probes/, and add a register function into lttng-abi.c that allows that module to register its callback. Thanks, Mathieu > > Signed-off-by: Francis Giraldeau <[email protected]> > --- > instrumentation/events/lttng-module/lttng.h | 21 +++++++++++++++++++++ > lttng-abi.c | 20 ++++++++++++++++++++ > lttng-abi.h | 1 + > 3 files changed, 42 insertions(+) > > diff --git a/instrumentation/events/lttng-module/lttng.h > b/instrumentation/events/lttng-module/lttng.h > index 6f3d6d1..cc36a8b 100644 > --- a/instrumentation/events/lttng-module/lttng.h > +++ b/instrumentation/events/lttng-module/lttng.h > @@ -28,6 +28,27 @@ TRACE_EVENT(lttng_metadata, > TP_printk("") > ) > > +TRACE_EVENT(lttng_uevent, > + > + TP_PROTO(const char *str, size_t len), > + > + TP_ARGS(str, len), > + > + /* > + * Uses sequence to hold variable size data, by default considered > + * as text. Null-terminal character is optional and is not enforced. > + */ > + TP_STRUCT__entry( > + __dynamic_array_text(char, text, len) > + ), > + > + TP_fast_assign( > + tp_memcpy_dyn_from_user(text, str) > + ), > + > + TP_printk("") > +) > + > #endif /* _TRACE_LTTNG_H */ > > /* This part must be outside protection */ > diff --git a/lttng-abi.c b/lttng-abi.c > index 26a02ed..fa29e53 100644 > --- a/lttng-abi.c > +++ b/lttng-abi.c > @@ -50,6 +50,10 @@ > #include "lttng-events.h" > #include "lttng-tracer.h" > > +/* include our own uevent tracepoint */ > +#include "instrumentation/events/lttng-module/lttng.h" > +DEFINE_TRACE(lttng_uevent); > + > /* > * This is LTTng's own personal way to create a system call as an external > * module. We use ioctl() on /proc/lttng. > @@ -252,9 +256,25 @@ long lttng_ioctl(struct file *file, unsigned int cmd, > unsigned long arg) > } > } > > +/* > + * lttng_write_uevent - expose kernel tracer to user-space > + */ > + > +static > +ssize_t lttng_write_uevent(struct file *file, const char __user *user_buf, > + size_t count, loff_t *fpos) > +{ > + if (count > LTTNG_UEVENT_SIZE) > + count = LTTNG_UEVENT_SIZE; > + > + trace_lttng_uevent(user_buf, count); > + return count; > +} > + > static const struct file_operations lttng_fops = { > .owner = THIS_MODULE, > .unlocked_ioctl = lttng_ioctl, > + .write = lttng_write_uevent, > #ifdef CONFIG_COMPAT > .compat_ioctl = lttng_ioctl, > #endif > diff --git a/lttng-abi.h b/lttng-abi.h > index dc230d8..f99b037 100644 > --- a/lttng-abi.h > +++ b/lttng-abi.h > @@ -26,6 +26,7 @@ > #include <linux/fs.h> > > #define LTTNG_KERNEL_SYM_NAME_LEN 256 > +#define LTTNG_UEVENT_SIZE 1024 > > enum lttng_kernel_instrumentation { > LTTNG_KERNEL_TRACEPOINT = 0, > -- > 1.7.9.5 > > > _______________________________________________ > lttng-dev mailing list > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
