Propagate trace format to kernel tracer
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Tue, 7 Jun 2022 19:50:39 +0000 (15:50 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Fri, 19 Aug 2022 15:51:38 +0000 (11:51 -0400)
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I9c0ba97bd1dfbf1358f593212926275485a9b64a

src/bin/lttng-sessiond/kernel.cpp
src/common/kernel-ctl/kernel-ctl.cpp
src/common/kernel-ctl/kernel-ctl.hpp
src/common/kernel-ctl/kernel-ioctl.hpp
src/common/lttng-kernel.hpp

index 2831a039e3bff63a12d343e03987e1e02e1ef97f..7428e795c56de7e1204a89f75b4eebccbd1d5c74 100644 (file)
@@ -164,6 +164,11 @@ int kernel_create_session(struct ltt_session *session)
                        session->id, session->name);
        }
 
+       ret = kernctl_session_set_trace_format(lks->fd, *session->trace_format);
+       if (ret) {
+               WARN("Could not set kernel session trace format %" PRIu64 " name: %s", session->id,
+                               session->name);
+       }
        return 0;
 
 error:
index 76960307c80abe7924011c22f2f3a3ebccfc626d..f9264476e1126a00dc1b7396a9bb68950441b959 100644 (file)
@@ -379,6 +379,39 @@ end:
        return ret;
 }
 
+int kernctl_session_set_trace_format(int fd, const lttng::trace_format_descriptor& trace_format)
+{
+       int ret;
+       struct lttng_kernel_abi_session_trace_format k_trace_format;
+
+       switch (trace_format.type()) {
+       case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1:
+               k_trace_format.type = (uint32_t) LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF1;
+               break;
+       case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_2:
+               k_trace_format.type = (uint32_t) LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF2;
+               break;
+       case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_UNKNOWN:
+               /* Fallthrougth */
+       default:
+               ret = -EINVAL;
+               goto end;
+       }
+
+       ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_SET_TRACE_FORMAT, &k_trace_format);
+       if (ret == -ENOSYS) {
+               if (trace_format.type() != LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1) {
+                       /* Must never happen based on earlier error check */
+                       abort();
+               } else {
+                       /* Old modules default to ctf1 format. */
+                       ret = 0;
+               }
+       }
+
+end:
+       return ret;
+}
 int kernctl_create_stream(int fd)
 {
        return compat_ioctl_no_arg(fd, LTTNG_KERNEL_ABI_OLD_STREAM,
index 4f47488b56b0e131152cf4e2ccb7e03d09b400e9..c47ebad7f45c2f27fe975c800fbc096dd16f5d40 100644 (file)
 
 #include <stdbool.h>
 
-#include <lttng/lttng.h>
-#include <common/lttng-kernel.hpp>
 #include <common/lttng-kernel-old.hpp>
-#include <common/sessiond-comm/sessiond-comm.hpp>      /* for struct lttng_filter_bytecode */
+#include <common/lttng-kernel.hpp>
+#include <common/sessiond-comm/sessiond-comm.hpp> /* for struct lttng_filter_bytecode */
+#include <lttng/lttng.h>
+#include <lttng/trace-format-descriptor-internal.hpp>
 
 int kernctl_create_session(int fd);
 int kernctl_open_metadata(int fd, struct lttng_channel_attr *chops);
@@ -81,6 +82,7 @@ int kernctl_session_regenerate_metadata(int fd);
 int kernctl_session_regenerate_statedump(int fd);
 int kernctl_session_set_name(int fd, const char *name);
 int kernctl_session_set_creation_time(int fd, time_t time);
+int kernctl_session_set_trace_format(int fd, const lttng::trace_format_descriptor& trace_format);
 
 /* Buffer operations */
 
index 68bcc472c009439adc1d76e2207e69ccba2fa5a3..95baec6bfa459d12a5dd95b73de8db607376571e 100644 (file)
        _IOW(0xF6, 0x5D, struct lttng_kernel_abi_session_name)
 #define LTTNG_KERNEL_ABI_SESSION_SET_CREATION_TIME             \
        _IOW(0xF6, 0x5E, struct lttng_kernel_abi_session_creation_time)
+#define LTTNG_KERNEL_ABI_SESSION_SET_TRACE_FORMAT \
+       _IOW(0xF6, 0x5F, struct lttng_kernel_abi_session_trace_format)
 
 /* Channel FD ioctl */
 #define LTTNG_KERNEL_ABI_STREAM                        _IO(0xF6, 0x62)
index 6b1f7985db589fd847df9f651a404be55aa06f1e..02bcffe7814c7d9ebc016336b9541c2be8a0da08 100644 (file)
@@ -331,4 +331,13 @@ struct lttng_kernel_abi_tracker_args {
        int32_t id;
 };
 
+enum lttng_kernel_abi_trace_format_type {
+       LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF1 = 0,
+       LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF2 = 1,
+};
+
+struct lttng_kernel_abi_session_trace_format {
+       uint32_t type; /* enum lttng_kernel_abi_trace_format_type */
+} LTTNG_PACKED;
+
 #endif /* _LTTNG_KERNEL_H */
This page took 0.035674 seconds and 5 git commands to generate.