#include <linux/list.h>
#include <linux/kprobes.h>
#include <linux/kref.h>
-#include "wrapper/uuid.h"
-#include "lttng-abi.h"
-#include "lttng-abi-old.h"
+#include <lttng-cpuhotplug.h>
+#include <wrapper/uuid.h>
+#include <lttng-tracer.h>
+#include <lttng-abi.h>
+#include <lttng-abi-old.h>
#define lttng_is_signed_type(type) (((type)(-1)) < 0)
atype_array,
atype_sequence,
atype_string,
+ atype_struct,
+ atype_array_compound, /* Array of compound types. */
+ atype_sequence_compound, /* Sequence of compound types. */
+ atype_variant,
NR_ABSTRACT_TYPES,
};
METADATA_CHANNEL,
};
+struct lttng_enum_value {
+ unsigned long long value;
+ unsigned int signedness:1;
+};
+
struct lttng_enum_entry {
- unsigned long long start, end; /* start and end are inclusive */
+ struct lttng_enum_value start, end; /* start and end are inclusive */
const char *string;
+ struct {
+ unsigned int is_auto:1;
+ } options;
};
#define __type_integer(_type, _size, _alignment, _signedness, \
union _lttng_basic_type {
struct lttng_integer_type integer;
struct {
- const char *name;
+ const struct lttng_enum_desc *desc; /* Enumeration mapping */
+ struct lttng_integer_type container_type;
} enumeration;
struct {
enum lttng_string_encodings encoding;
struct lttng_basic_type elem_type;
unsigned int elem_alignment; /* alignment override */
} sequence;
+ struct {
+ uint32_t nr_fields;
+ struct lttng_event_field *fields; /* Array of fields. */
+ } _struct;
+ struct {
+ struct lttng_type *elem_type;
+ unsigned int length; /* num. elems. */
+ } array_compound;
+ struct {
+ struct lttng_type *elem_type;
+ const char *length_name;
+ } sequence_compound;
+ struct {
+ const char *tag_name;
+ struct lttng_event_field *choices; /* Array of fields. */
+ uint32_t nr_choices;
+ } variant;
} u;
};
-struct lttng_enum {
+struct lttng_enum_desc {
const char *name;
- struct lttng_type container_type;
const struct lttng_enum_entry *entries;
- unsigned int len;
+ unsigned int nr_entries;
};
/* Event field description */
* lttng_ctx_field because cpu hotplug needs fixed-location addresses.
*/
struct lttng_perf_counter_field {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
+ struct lttng_cpuhp_node cpuhp_prepare;
+ struct lttng_cpuhp_node cpuhp_online;
+#else
struct notifier_block nb;
int hp_enable;
+#endif
struct perf_event_attr *attr;
struct perf_event **e; /* per-cpu array */
};
};
enum lttng_enabler_type {
- LTTNG_ENABLER_WILDCARD,
+ LTTNG_ENABLER_STAR_GLOB,
LTTNG_ENABLER_NAME,
};
uint64_t version; /* Current version of the metadata cache */
};
+#define LTTNG_DYNAMIC_LEN_STACK_SIZE 128
+
+struct lttng_dynamic_len_stack {
+ size_t stack[LTTNG_DYNAMIC_LEN_STACK_SIZE];
+ size_t offset;
+};
+
+DECLARE_PER_CPU(struct lttng_dynamic_len_stack, lttng_dynamic_len_stack);
/*
* struct lttng_pid_tracker declared in header due to deferencing of *v
int lttng_session_disable(struct lttng_session *session);
void lttng_session_destroy(struct lttng_session *session);
int lttng_session_metadata_regenerate(struct lttng_session *session);
+int lttng_session_statedump(struct lttng_session *session);
void metadata_cache_destroy(struct kref *kref);
struct lttng_channel *lttng_channel_create(struct lttng_session *session,
void lttng_enabler_event_link_bytecode(struct lttng_event *event,
struct lttng_enabler *enabler);
+int lttng_probes_init(void);
+
extern struct lttng_ctx *lttng_static_ctx;
int lttng_context_init(void);
uint64_t config,
const char *name,
struct lttng_ctx **ctx);
+int lttng_cpuhp_perf_counter_online(unsigned int cpu,
+ struct lttng_cpuhp_node *node);
+int lttng_cpuhp_perf_counter_dead(unsigned int cpu,
+ struct lttng_cpuhp_node *node);
#else
static inline
int lttng_add_perf_counter_to_ctx(uint32_t type,
{
return -ENOSYS;
}
+static inline
+int lttng_cpuhp_perf_counter_online(unsigned int cpu,
+ struct lttng_cpuhp_node *node)
+{
+ return 0;
+}
+static inline
+int lttng_cpuhp_perf_counter_dead(unsigned int cpu,
+ struct lttng_cpuhp_node *node)
+{
+ return 0;
+}
#endif
int lttng_logger_init(void);
}
#endif
-#ifdef CONFIG_DYNAMIC_FTRACE
+#if defined(CONFIG_DYNAMIC_FTRACE) && !defined(LTTNG_FTRACE_MISSING_HEADER)
int lttng_ftrace_register(const char *name,
const char *symbol_name,
struct lttng_event *event);