LTTNG_ERR_EVENT_NOTIFIER_ERROR_ACCOUNTING_FULL = 168, /* Error event notifier error accounting full. */
LTTNG_ERR_INVALID_ERROR_QUERY_TARGET = 169, /* Invalid error query target. */
LTTNG_ERR_BUFFER_FLUSH_FAILED = 170, /* Buffer flush failed */
+ LTTNG_ERR_TRACE_FORMAT_UNSUPPORTED_KERNEL_TRACER = 171, /* Kernel tracer does not support the specified trace format */
/* MUST be last element of the manually-assigned section of the enum */
LTTNG_ERR_NR,
return ret;
}
+static enum lttng_error_code kernel_domain_check_trace_format_requirements(
+ const lttng::trace_format_descriptor& descriptor)
+{
+ enum lttng_error_code ret_code;
+ switch (descriptor.type()) {
+ case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1:
+ /* Supported by all kernel tracer. */
+ ret_code = LTTNG_OK;
+ break;
+ case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_2:
+ if (!kernel_supports_ctf2()) {
+ ret_code = LTTNG_ERR_TRACE_FORMAT_UNSUPPORTED_KERNEL_TRACER;
+ }
+ }
+ return LTTNG_OK;
+}
+
static enum lttng_error_code cmd_enable_channel_internal(
struct ltt_session *session,
const struct lttng_domain *domain,
attr->name, session->name);
lttng_channel_set_monitor_timer_interval(attr, 0);
}
+
+ ret_code = kernel_domain_check_trace_format_requirements(*session->trace_format);
+ if (ret_code != LTTNG_OK) {
+ WARN("Kernel tracer does not support the configured trace format of session '%s'",
+ session->name);
+ goto error;
+ }
break;
}
case LTTNG_DOMAIN_UST:
return kernel_tracer_abi_greater_or_equal(2, 6);
}
+/*
+ * Check for the support of ctf2 via abi version number.
+ *
+ * Return 1 on success, 0 when feature is not supported, negative value in case
+ * of errors.
+ */
+int kernel_supports_ctf2(void)
+{
+ /*
+ * JORAJ TODO: change this for the actual value when merged upstream
+ * default to 2.7 ABI for now (modules 2.14)
+ * CTF2 support was introduced in LTTng 2.1XX, lttng-modules ABI 2.XX.
+ */
+ return kernel_tracer_abi_greater_or_equal(2, 7);
+}
+
/*
* Rotate a kernel session.
*
enum lttng_error_code kernel_clear_session(struct ltt_session *session);
int init_kernel_workarounds(void);
+int kernel_supports_ctf2(void);
int kernel_supports_ring_buffer_snapshot_sample_positions(void);
int kernel_supports_ring_buffer_packet_sequence_number(void);
int kernel_supports_event_notifiers(void);
return "Invalid error query target.";
case LTTNG_ERR_BUFFER_FLUSH_FAILED:
return "Failed to flush stream buffer";
+ case LTTNG_ERR_TRACE_FORMAT_UNSUPPORTED_KERNEL_TRACER:
+ return "Kernel tracer does not support the specified trace format";
case LTTNG_ERR_NR:
abort();
}