struct lttng_kernel_type_sequence {
struct lttng_kernel_type_common parent;
- const char *length_name; /* Length field name. */
+ const char *length_name; /* Length field name. If NULL, use previous field. */
const struct lttng_kernel_type_common *elem_type;
unsigned int alignment; /* Alignment before elements. */
enum lttng_kernel_string_encoding encoding;
struct lttng_kernel_type_variant {
struct lttng_kernel_type_common parent;
- const char *tag_name;
+ const char *tag_name; /* Tag field name. If NULL, use previous field. */
const struct lttng_kernel_event_field **choices; /* Array of pointers to fields. */
unsigned int nr_choices;
unsigned int alignment;
};
struct lttng_probe_ctx {
- struct lttng_kernel_event_recorder *event;
- struct lttng_kernel_event_notifier *event_notifier; // Not sure if we will ever need it.
+ struct lttng_kernel_event_common *event;
uint8_t interruptible;
};
const struct lttng_kernel_event_field **fields; /* event payload */
unsigned int nr_fields;
struct module *owner;
- void *event_notifier_callback;
};
struct lttng_kernel_probe_desc {
struct lttng_krp; /* Kretprobe handling */
-enum lttng_bytecode_node_type {
- LTTNG_BYTECODE_NODE_TYPE_FILTER,
- LTTNG_BYTECODE_NODE_TYPE_CAPTURE,
+enum lttng_kernel_bytecode_type {
+ LTTNG_KERNEL_BYTECODE_TYPE_FILTER,
+ LTTNG_KERNEL_BYTECODE_TYPE_CAPTURE,
};
struct lttng_bytecode_node {
- enum lttng_bytecode_node_type type;
+ enum lttng_kernel_bytecode_type type;
struct list_head node;
struct lttng_enabler *enabler;
struct {
} bc;
};
-/*
- * Bytecode interpreter return value masks.
- */
-enum lttng_bytecode_interpreter_ret {
- LTTNG_INTERPRETER_DISCARD = 0,
- LTTNG_INTERPRETER_RECORD_FLAG = (1ULL << 0),
- /* Other bits are kept for future use. */
-};
-
struct lttng_interpreter_output;
struct lttng_bytecode_runtime {
/* Associated bytecode */
+ enum lttng_kernel_bytecode_type type;
struct lttng_bytecode_node *bc;
- union {
- uint64_t (*filter)(void *filter_data,
- struct lttng_probe_ctx *lttng_probe_ctx,
- const char *filter_stack_data);
- uint64_t (*capture)(void *filter_data,
+ int (*interpreter_func)(struct lttng_bytecode_runtime *kernel_bytecode,
+ const char *interpreter_stack_data,
struct lttng_probe_ctx *lttng_probe_ctx,
- const char *capture_stack_data,
- struct lttng_interpreter_output *output);
- } interpreter_funcs;
+ void *caller_ctx);
int link_failed;
struct list_head node; /* list of bytecode runtime in event */
struct lttng_kernel_ctx *ctx;
};
struct lttng_uprobe_handler {
- union {
- struct lttng_kernel_event_recorder *event;
- struct lttng_kernel_event_notifier *event_notifier;
- } u;
+ struct lttng_kernel_event_common *event;
loff_t offset;
struct uprobe_consumer up_consumer;
struct list_head node;
LTTNG_SYSCALL_ABI_COMPAT,
};
+/*
+ * Result of the run_filter() callback.
+ */
+enum lttng_kernel_event_filter_result {
+ LTTNG_KERNEL_EVENT_FILTER_ACCEPT = 0,
+ LTTNG_KERNEL_EVENT_FILTER_REJECT = 1,
+};
+
struct lttng_kernel_event_common_private;
enum lttng_kernel_event_type {
int enabled;
int eval_filter; /* Need to evaluate filters */
- int (*run_filter)(struct lttng_kernel_event_common *event,
+ int (*run_filter)(const struct lttng_kernel_event_common *event,
const char *stack_data,
+ struct lttng_probe_ctx *probe_ctx,
void *filter_ctx);
};
int eval_capture; /* Need to evaluate capture */
void (*notification_send)(struct lttng_kernel_event_notifier *event_notifier,
- struct lttng_probe_ctx *probe_ctx,
const char *stack_data,
+ struct lttng_probe_ctx *probe_ctx,
struct lttng_kernel_notification_ctx *notif_ctx);
};
int lttng_channel_enable(struct lttng_channel *channel);
int lttng_channel_disable(struct lttng_channel *channel);
-int lttng_event_enable(struct lttng_kernel_event_recorder *event);
-int lttng_event_disable(struct lttng_kernel_event_recorder *event);
-
-int lttng_event_notifier_enable(struct lttng_kernel_event_notifier *event_notifier);
-int lttng_event_notifier_disable(struct lttng_kernel_event_notifier *event_notifier);
+int lttng_event_enable(struct lttng_kernel_event_common *event);
+int lttng_event_disable(struct lttng_kernel_event_common *event);
void lttng_transport_register(struct lttng_transport *transport);
void lttng_transport_unregister(struct lttng_transport *transport);
}
#endif
-int lttng_event_add_callsite(struct lttng_kernel_event_recorder *event,
- struct lttng_kernel_abi_event_callsite __user *callsite);
-
-int lttng_event_notifier_add_callsite(struct lttng_kernel_event_notifier *event_notifier,
+int lttng_event_add_callsite(struct lttng_kernel_event_common *event,
struct lttng_kernel_abi_event_callsite __user *callsite);
#ifdef CONFIG_UPROBES
int lttng_uprobes_register_event(const char *name,
int fd, struct lttng_kernel_event_recorder *event);
-int lttng_uprobes_event_add_callsite(struct lttng_kernel_event_recorder *event,
+int lttng_uprobes_event_add_callsite(struct lttng_kernel_event_common *event,
struct lttng_kernel_abi_event_callsite __user *callsite);
void lttng_uprobes_unregister_event(struct lttng_kernel_event_recorder *event);
void lttng_uprobes_destroy_event_private(struct lttng_kernel_event_recorder *event);
int lttng_uprobes_register_event_notifier(const char *name,
int fd, struct lttng_kernel_event_notifier *event_notifier);
-int lttng_uprobes_event_notifier_add_callsite(struct lttng_kernel_event_notifier *event_notifier,
- struct lttng_kernel_abi_event_callsite __user *callsite);
void lttng_uprobes_unregister_event_notifier(struct lttng_kernel_event_notifier *event_notifier);
void lttng_uprobes_destroy_event_notifier_private(struct lttng_kernel_event_notifier *event_notifier);
#else
}
static inline
-int lttng_uprobes_event_add_callsite(struct lttng_kernel_event_recorder *event,
+int lttng_uprobes_event_add_callsite(struct lttng_kernel_event_common *event,
struct lttng_kernel_abi_event_callsite __user *callsite)
{
return -ENOSYS;
return -ENOSYS;
}
-static inline
-int lttng_uprobes_event_notifier_add_callsite(struct lttng_kernel_event_notifier *event_notifier,
- struct lttng_kernel_abi_event_callsite __user *callsite)
-{
- return -ENOSYS;
-}
-
static inline
void lttng_uprobes_unregister_event_notifier(struct lttng_kernel_event_notifier *event_notifier)
{
struct lttng_kernel_event_recorder *event_exit);
void lttng_kretprobes_unregister(struct lttng_kernel_event_recorder *event);
void lttng_kretprobes_destroy_private(struct lttng_kernel_event_recorder *event);
-int lttng_kretprobes_event_enable_state(struct lttng_kernel_event_recorder *event,
+int lttng_kretprobes_event_enable_state(struct lttng_kernel_event_common *event,
int enable);
#else
static inline
}
static inline
-int lttng_kretprobes_event_enable_state(struct lttng_kernel_event_recorder *event,
+int lttng_kretprobes_event_enable_state(struct lttng_kernel_event_common *event,
int enable)
{
return -ENOSYS;