From: Jonathan Rajotte Date: Tue, 7 Jun 2022 19:50:39 +0000 (-0400) Subject: Propagate trace format to kernel tracer X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=121b0d1a62dfcb59c401d84ab11ca41a427feacf;p=deliverable%2Flttng-tools.git Propagate trace format to kernel tracer Signed-off-by: Jonathan Rajotte Change-Id: I9c0ba97bd1dfbf1358f593212926275485a9b64a --- diff --git a/src/bin/lttng-sessiond/kernel.cpp b/src/bin/lttng-sessiond/kernel.cpp index 2831a039e..7428e795c 100644 --- a/src/bin/lttng-sessiond/kernel.cpp +++ b/src/bin/lttng-sessiond/kernel.cpp @@ -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: diff --git a/src/common/kernel-ctl/kernel-ctl.cpp b/src/common/kernel-ctl/kernel-ctl.cpp index 76960307c..f9264476e 100644 --- a/src/common/kernel-ctl/kernel-ctl.cpp +++ b/src/common/kernel-ctl/kernel-ctl.cpp @@ -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, diff --git a/src/common/kernel-ctl/kernel-ctl.hpp b/src/common/kernel-ctl/kernel-ctl.hpp index 4f47488b5..c47ebad7f 100644 --- a/src/common/kernel-ctl/kernel-ctl.hpp +++ b/src/common/kernel-ctl/kernel-ctl.hpp @@ -11,10 +11,11 @@ #include -#include -#include #include -#include /* for struct lttng_filter_bytecode */ +#include +#include /* for struct lttng_filter_bytecode */ +#include +#include 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 */ diff --git a/src/common/kernel-ctl/kernel-ioctl.hpp b/src/common/kernel-ctl/kernel-ioctl.hpp index 68bcc472c..95baec6bf 100644 --- a/src/common/kernel-ctl/kernel-ioctl.hpp +++ b/src/common/kernel-ctl/kernel-ioctl.hpp @@ -144,6 +144,8 @@ _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) diff --git a/src/common/lttng-kernel.hpp b/src/common/lttng-kernel.hpp index 6b1f7985d..02bcffe78 100644 --- a/src/common/lttng-kernel.hpp +++ b/src/common/lttng-kernel.hpp @@ -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 */