Merged in master and stable-2.10 with modifications. Thanks! I'll also add a check on trigger registration.
Jérémie On 15 May 2017 at 15:37, Jonathan Rajotte <[email protected]> wrote: > The RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS was introduced in > lttng-modules ABI version 2.3. When interacting with a kernel tracer > witt ABI versions < 2.3, pass zero as monitor_timer_interval to disable > the monitoring. > > Warn during sessiond startup and channel enabling if not supported. > > Fixes #1101 > > Signed-off-by: Jonathan Rajotte <[email protected]> > --- > src/bin/lttng-sessiond/cmd.c | 25 +++++++++++++++++++++++++ > src/bin/lttng-sessiond/kernel.c | 30 ++++++++++++++++++++++++++++++ > src/bin/lttng-sessiond/kernel.h | 1 + > src/bin/lttng-sessiond/main.c | 12 ++++++++++++ > 4 files changed, 68 insertions(+) > > diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c > index f3ff2564..022329c7 100644 > --- a/src/bin/lttng-sessiond/cmd.c > +++ b/src/bin/lttng-sessiond/cmd.c > @@ -34,6 +34,7 @@ > #include <lttng/trigger/trigger-internal.h> > #include <lttng/condition/condition.h> > #include <lttng/action/action.h> > +#include <lttng/channel.h> > #include <lttng/channel-internal.h> > #include <common/string-utils/string-utils.h> > > @@ -1349,6 +1350,30 @@ int cmd_enable_channel(struct ltt_session *session, > attr->attr.switch_timer_interval = 0; > } > > + /* Check for feature support */ > + switch (domain->type) { > + case LTTNG_DOMAIN_KERNEL: > + { > + if > (kernel_support_ring_buffer_snapshot_sample_positions(kernel_tracer_fd) < 1) { > + /* Sampling position of buffer is not supported */ > + WARN("Kernel tracer does not support buffer > monitoring. " > + "Setting the monitor interval timer > to 0 " > + "(disabled) for channel '%s' of > session '%s'", > + attr-> name, session->name); > + lttng_channel_set_monitor_timer_interval(attr, 0); > + } > + break; > + } > + case LTTNG_DOMAIN_UST: > + case LTTNG_DOMAIN_JUL: > + case LTTNG_DOMAIN_LOG4J: > + case LTTNG_DOMAIN_PYTHON: > + break; > + default: > + ret = LTTNG_ERR_UNKNOWN_DOMAIN; > + goto error; > + } > + > switch (domain->type) { > case LTTNG_DOMAIN_KERNEL: > { > diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c > index aa516497..6bff1336 100644 > --- a/src/bin/lttng-sessiond/kernel.c > +++ b/src/bin/lttng-sessiond/kernel.c > @@ -1086,3 +1086,33 @@ int kernel_syscall_mask(int chan_fd, char > **syscall_mask, uint32_t *nr_bits) > > return kernctl_syscall_mask(chan_fd, syscall_mask, nr_bits); > } > + > +/* > + * Check for the support of the RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS via abi > + * version number. Added an empty line here. > + * Return 1 on success, 0 when feature is not supported, negative value in > case > + * of errors. > + */ > +int kernel_support_ring_buffer_snapshot_sample_positions(int tracer_fd) > +{ > + int ret = 0; // Not supported by default > + struct lttng_kernel_tracer_abi_version abi; Missing empty line here. > + ret = kernctl_tracer_abi_version(tracer_fd, &abi); > + if (ret < 0) { > + ERR("Failed to retrieve lttng-modules ABI version"); > + goto error; > + } > + > + /* > + * RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS was introduced in 2.3 > + */ > + if (abi.major >= 2 && abi.minor >= 3) { > + /* Supported */ > + ret = 1; > + } else { > + /* Not supported */ > + ret = 0; > + } > +error: > + return ret; > +} > diff --git a/src/bin/lttng-sessiond/kernel.h b/src/bin/lttng-sessiond/kernel.h > index 233ceffe..8c0959df 100644 > --- a/src/bin/lttng-sessiond/kernel.h > +++ b/src/bin/lttng-sessiond/kernel.h > @@ -65,5 +65,6 @@ int kernel_syscall_mask(int chan_fd, char **syscall_mask, > uint32_t *nr_bits); > int init_kernel_workarounds(void); > ssize_t kernel_list_tracker_pids(struct ltt_kernel_session *session, > int **_pids); > +int kernel_support_ring_buffer_snapshot_sample_positions(int tracer_fd); Renamed the function to "[...]_supports_[...]". > > #endif /* _LTT_KERNEL_CTL_H */ > diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c > index b856e126..19e26fb7 100644 > --- a/src/bin/lttng-sessiond/main.c > +++ b/src/bin/lttng-sessiond/main.c > @@ -2794,6 +2794,18 @@ static int init_kernel_tracer(void) > goto error_modules; > } > > + ret = > kernel_support_ring_buffer_snapshot_sample_positions(kernel_tracer_fd); > + if (ret < 0) { > + goto error_modules; > + } > + > + if (ret < 1) { > + WARN("Kernel tracer does not support buffer monitoring. " > + "Monitor interval timers will be set to 0 (disabled) " > + "for future channels."); Changed to "Kernel tracer does not support buffer monitor. The monitor timer of channels in the kernel domain will be set to 0 (disabled)." > + } > + > + > DBG("Kernel tracer fd %d", kernel_tracer_fd); > return 0; > > -- > 2.11.0 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
