* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <linux/version.h>
+#include <lttng-kernel-version.h>
#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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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 */
};
struct lttng_krp *lttng_krp;
char *symbol_name;
} kretprobe;
- struct {
- char *symbol_name;
- } ftrace;
} u;
struct list_head list; /* Event list in session */
unsigned int metadata_dumped:1;
};
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);
return -ENOSYS;
}
#endif
-#if defined(CONFIG_PERF_EVENTS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))
+#if defined(CONFIG_PERF_EVENTS) && (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(2,6,33))
int lttng_add_perf_counter_to_ctx(uint32_t type,
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
-int lttng_ftrace_register(const char *name,
- const char *symbol_name,
- struct lttng_event *event);
-void lttng_ftrace_unregister(struct lttng_event *event);
-void lttng_ftrace_destroy_private(struct lttng_event *event);
-#else
-static inline
-int lttng_ftrace_register(const char *name,
- const char *symbol_name,
- struct lttng_event *event)
-{
- return -ENOSYS;
-}
-
-static inline
-void lttng_ftrace_unregister(struct lttng_event *event)
-{
-}
-
-static inline
-void lttng_ftrace_destroy_private(struct lttng_event *event)
-{
-}
-#endif
-
int lttng_calibrate(struct lttng_kernel_calibrate *calibrate);
extern const struct file_operations lttng_tracepoint_list_fops;
extern const struct file_operations lttng_syscall_list_fops;
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(2,6,35))
#define TRACEPOINT_HAS_DATA_ARG
#endif