Move enabler structures to internal header
[lttng-modules.git] / include / lttng / events.h
index b9586a0a43bcc0bd9031bd175ed51c907c9c7fd8..2b608dfd6e1ce0c4af4e45af7ba9dca733850fc8 100644 (file)
@@ -109,7 +109,7 @@ struct lttng_kernel_type_array {
 
 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;
@@ -124,7 +124,7 @@ struct lttng_kernel_type_struct {
 
 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;
@@ -246,11 +246,10 @@ struct lttng_kernel_event_field {
                _fields                                                                                 \
        )
 
-#define lttng_kernel_static_ctx_field(_event_field, _get_size, _get_size_arg, _record, _get_value, _destroy, _priv) \
+#define lttng_kernel_static_ctx_field(_event_field, _get_size, _record, _get_value, _destroy, _priv)   \
        __LTTNG_COMPOUND_LITERAL(const struct lttng_kernel_ctx_field, {                                 \
                .event_field = (_event_field),                                                          \
                .get_size = (_get_size),                                                                \
-               .get_size_arg = (_get_size_arg),                                                        \
                .record = (_record),                                                                    \
                .get_value = (_get_value),                                                              \
                .destroy = (_destroy),                                                                  \
@@ -303,10 +302,12 @@ struct lttng_kernel_event_field {
                }                                                                                       \
        }),
 
-union lttng_ctx_value {
-       int64_t s64;
-       const char *str;
-       double d;
+struct lttng_ctx_value {
+       union {
+               int64_t s64;
+               const char *str;
+               double d;
+       } u;
 };
 
 /*
@@ -328,24 +329,20 @@ struct lttng_perf_counter_field {
 };
 
 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;
 };
 
 struct lttng_kernel_ctx_field {
        const struct lttng_kernel_event_field *event_field;
-       size_t (*get_size)(size_t offset);
-       size_t (*get_size_arg)(size_t offset, struct lttng_kernel_ctx_field *field,
-                              struct lib_ring_buffer_ctx *ctx,
-                              struct lttng_channel *chan);
-       void (*record)(struct lttng_kernel_ctx_field *field,
-                      struct lib_ring_buffer_ctx *ctx,
-                      struct lttng_channel *chan);
-       void (*get_value)(struct lttng_kernel_ctx_field *field,
-                        struct lttng_probe_ctx *lttng_probe_ctx,
-                        union lttng_ctx_value *value);
-       void (*destroy)(struct lttng_kernel_ctx_field *field);
+       size_t (*get_size)(void *priv, struct lttng_probe_ctx *probe_ctx,
+                       size_t offset);
+       void (*record)(void *priv, struct lttng_probe_ctx *probe_ctx,
+                       struct lib_ring_buffer_ctx *ctx,
+                       struct lttng_channel *chan);
+       void (*get_value)(void *priv, struct lttng_probe_ctx *probe_ctx,
+                       struct lttng_ctx_value *value);
+       void (*destroy)(void *priv);
        void *priv;
 };
 
@@ -364,7 +361,6 @@ struct lttng_kernel_event_desc {
        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 {
@@ -378,13 +374,13 @@ 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 {
@@ -395,29 +391,16 @@ struct lttng_bytecode_node {
        } 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,
+       int (*interpreter_func)(struct lttng_bytecode_runtime *kernel_bytecode,
+                               const char *interpreter_stack_data,
                                struct lttng_probe_ctx *lttng_probe_ctx,
-                               const char *filter_stack_data);
-               uint64_t (*capture)(void *filter_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;
@@ -432,10 +415,7 @@ struct lttng_enabler_ref {
 };
 
 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;
@@ -461,6 +441,14 @@ enum lttng_syscall_abi {
        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 {
@@ -476,8 +464,9 @@ struct lttng_kernel_event_common {
 
        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);
 };
 
@@ -502,8 +491,8 @@ struct lttng_kernel_event_notifier {
 
        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);
 };
 
@@ -512,54 +501,6 @@ enum lttng_enabler_format_type {
        LTTNG_ENABLER_FORMAT_NAME,
 };
 
-/*
- * Enabler field, within whatever object is enabling an event. Target of
- * backward reference.
- */
-struct lttng_enabler {
-       enum lttng_enabler_format_type format_type;
-
-       /* head list of struct lttng_bytecode_node */
-       struct list_head filter_bytecode_head;
-
-       struct lttng_kernel_abi_event event_param;
-       unsigned int enabled:1;
-
-       uint64_t user_token;            /* User-provided token. */
-};
-
-struct lttng_event_enabler {
-       struct lttng_enabler base;
-       struct list_head node;  /* per-session list of enablers */
-       struct lttng_channel *chan;
-};
-
-struct lttng_event_notifier_enabler {
-       struct lttng_enabler base;
-       uint64_t error_counter_index;
-       struct list_head node;  /* List of event_notifier enablers */
-       struct lttng_event_notifier_group *group;
-
-       /* head list of struct lttng_bytecode_node */
-       struct list_head capture_bytecode_head;
-       uint64_t num_captures;
-};
-
-
-static inline
-struct lttng_enabler *lttng_event_enabler_as_enabler(
-               struct lttng_event_enabler *event_enabler)
-{
-       return &event_enabler->base;
-}
-
-static inline
-struct lttng_enabler *lttng_event_notifier_enabler_as_enabler(
-               struct lttng_event_notifier_enabler *event_notifier_enabler)
-{
-       return &event_notifier_enabler->base;
-}
-
 struct lttng_channel_ops {
        struct channel *(*channel_create)(const char *name,
                                void *priv,
@@ -571,8 +512,7 @@ struct lttng_channel_ops {
        struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan);
        int (*buffer_has_read_closed_stream)(struct channel *chan);
        void (*buffer_read_close)(struct lib_ring_buffer *buf);
-       int (*event_reserve)(struct lib_ring_buffer_ctx *ctx,
-                            uint32_t event_id);
+       int (*event_reserve)(struct lib_ring_buffer_ctx *ctx);
        void (*event_commit)(struct lib_ring_buffer_ctx *ctx);
        void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src,
                            size_t len);
@@ -941,11 +881,8 @@ struct lttng_kernel_event_notifier *_lttng_event_notifier_create(
 
 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);
@@ -1087,8 +1024,7 @@ void lttng_enabler_link_bytecode(const struct lttng_kernel_event_desc *event_des
                struct lttng_kernel_ctx *ctx,
                struct list_head *instance_bytecode_runtime_head,
                struct list_head *enabler_bytecode_runtime_head);
-void lttng_free_event_filter_runtime(struct lttng_kernel_event_recorder *event);
-void lttng_free_event_notifier_filter_runtime(struct lttng_kernel_event_notifier *event_notifier);
+void lttng_free_event_filter_runtime(struct lttng_kernel_event_common *event);
 
 int lttng_probes_init(void);
 
@@ -1332,23 +1268,18 @@ void lttng_kprobes_destroy_event_notifier_private(struct lttng_kernel_event_noti
 }
 #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
@@ -1360,7 +1291,7 @@ int lttng_uprobes_register_event(const char *name,
 }
 
 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;
@@ -1383,13 +1314,6 @@ int lttng_uprobes_register_event_notifier(const char *name,
        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)
 {
@@ -1410,7 +1334,7 @@ int lttng_kretprobes_register(const char *name,
                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
@@ -1435,7 +1359,7 @@ void lttng_kretprobes_destroy_private(struct lttng_kernel_event_recorder *event)
 }
 
 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;
This page took 0.029486 seconds and 4 git commands to generate.