X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fkernel.c;h=d93478edf86c706b1dea1d710cb786fe621667e6;hp=53efad5e79ed0b60dbff2d8d3d9b04319ed12e25;hb=959e3c66727698e58a8788aceeda5820b3c938ba;hpb=7e0de2192e89732f6dea0b72992096a028ca02d1 diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index 53efad5e7..d93478edf 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -5,11 +5,6 @@ * */ -#include "bin/lttng-sessiond/tracker.h" -#include "common/tracker.h" -#include "common/utils.h" -#include "lttng/lttng-error.h" -#include "lttng/tracker.h" #define _LGPL_SOURCE #include #include @@ -24,6 +19,11 @@ #include #include #include +#include +#include +#include +#include +#include #include "lttng-sessiond.h" #include "lttng-syscall.h" @@ -34,6 +34,7 @@ #include "utils.h" #include "rotate.h" #include "modprobe.h" +#include "tracker.h" /* * Key used to reference a channel between the sessiond and the consumer. This @@ -1640,16 +1641,10 @@ 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. - * - * Return 1 on success, 0 when feature is not supported, negative value in case - * of errors. - */ -int kernel_supports_ring_buffer_snapshot_sample_positions(void) +static +int kernel_tracer_abi_greater_or_equal(unsigned int major, unsigned int minor) { - int ret = 0; // Not supported by default + int ret; struct lttng_kernel_tracer_abi_version abi; ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi); @@ -1658,18 +1653,24 @@ int kernel_supports_ring_buffer_snapshot_sample_positions(void) goto error; } + ret = abi.major > major || (abi.major == major && abi.minor >= minor); +error: + return ret; +} + +/* + * Check for the support of the RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS via abi + * version number. + * + * Return 1 on success, 0 when feature is not supported, negative value in case + * of errors. + */ +int kernel_supports_ring_buffer_snapshot_sample_positions(void) +{ /* * 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; + return kernel_tracer_abi_greater_or_equal(2, 3); } /* @@ -1680,28 +1681,25 @@ error: */ int kernel_supports_ring_buffer_packet_sequence_number(void) { - int ret = 0; // Not supported by default - struct lttng_kernel_tracer_abi_version abi; - - ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi); - if (ret < 0) { - ERR("Failed to retrieve lttng-modules ABI version"); - goto error; - } - /* * Packet sequence number was introduced in LTTng 2.8, * lttng-modules ABI 2.1. */ - if (abi.major >= 2 && abi.minor >= 1) { - /* Supported */ - ret = 1; - } else { - /* Not supported */ - ret = 0; - } -error: - return ret; + return kernel_tracer_abi_greater_or_equal(2, 1); +} + +/* + * Check for the support of event notifiers via abi version number. + * + * Return 1 on success, 0 when feature is not supported, negative value in case + * of errors. + */ +int kernel_supports_event_notifiers(void) +{ + /* + * Event notifiers were introduced in LTTng 2.13, lttng-modules ABI 2.6. + */ + return kernel_tracer_abi_greater_or_equal(2, 6); } /* @@ -1733,7 +1731,7 @@ enum lttng_error_code kernel_rotate_session(struct ltt_session *session) socket, node.node) { struct ltt_kernel_channel *chan; - /* For each channel, ask the consumer to rotate it. */ + /* For each channel, ask the consumer to rotate it. */ cds_list_for_each_entry(chan, &ksess->channel_list.head, list) { DBG("Rotate kernel channel %" PRIu64 ", session %s", chan->key, session->name);