X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Flttng%2Fevents.h;h=80de505056fe8a265d06c02f43717c92934fc0ea;hb=99d223adfae9b68800e91bda470c92acb14efae6;hp=517d689b049f05d679fa4a205da31d2b20cb1e10;hpb=89ec2b91ca249747d87b59aea76e6e67cdf7f0bf;p=lttng-modules.git diff --git a/include/lttng/events.h b/include/lttng/events.h index 517d689b..80de5050 100644 --- a/include/lttng/events.h +++ b/include/lttng/events.h @@ -234,6 +234,7 @@ enum lttng_event_type { enum lttng_bytecode_node_type { LTTNG_BYTECODE_NODE_TYPE_FILTER, + LTTNG_BYTECODE_NODE_TYPE_CAPTURE, }; struct lttng_bytecode_node { @@ -249,20 +250,28 @@ struct lttng_bytecode_node { }; /* - * Filter return value masks. + * Bytecode interpreter return value masks. */ -enum lttng_filter_ret { - LTTNG_FILTER_DISCARD = 0, - LTTNG_FILTER_RECORD_FLAG = (1ULL << 0), +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 */ struct lttng_bytecode_node *bc; - uint64_t (*filter)(void *filter_data, - struct lttng_probe_ctx *lttng_probe_ctx, - const char *filter_stack_data); + 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, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *capture_stack_data, + struct lttng_interpreter_output *output); + } interpreter_funcs; int link_failed; struct list_head node; /* list of bytecode runtime in event */ struct lttng_ctx *ctx; @@ -371,9 +380,13 @@ struct lttng_event_notifier { struct hlist_node hlist; /* session ht of event_notifiers */ /* list of struct lttng_bytecode_runtime, sorted by seqnum */ struct list_head filter_bytecode_runtime_head; + size_t num_captures; + struct list_head capture_bytecode_runtime_head; int has_enablers_without_bytecode; - void (*send_notification)(struct lttng_event_notifier *event_notifier); + void (*send_notification)(struct lttng_event_notifier *event_notifier, + struct lttng_probe_ctx *lttng_probe_ctx, + const char *interpreter_stack_data); struct lttng_event_notifier_group *group; /* Weak ref */ }; @@ -391,7 +404,7 @@ struct lttng_enabler { enum lttng_enabler_format_type format_type; - /* head list of struct lttng_ust_filter_bytecode_node */ + /* head list of struct lttng_bytecode_node */ struct list_head filter_bytecode_head; struct lttng_kernel_event event_param; @@ -415,8 +428,13 @@ struct lttng_event_notifier_enabler { struct lttng_enabler base; 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) @@ -893,17 +911,19 @@ static inline int lttng_syscall_filter_disable_event_notifier( #endif -void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime); int lttng_event_enabler_attach_filter_bytecode(struct lttng_event_enabler *event_enabler, struct lttng_kernel_filter_bytecode __user *bytecode); int lttng_event_notifier_enabler_attach_filter_bytecode( struct lttng_event_notifier_enabler *event_notifier_enabler, struct lttng_kernel_filter_bytecode __user *bytecode); +int lttng_event_notifier_enabler_attach_capture_bytecode( + struct lttng_event_notifier_enabler *event_notifier_enabler, + struct lttng_kernel_capture_bytecode __user *bytecode); void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc, struct lttng_ctx *ctx, - struct list_head *bytecode_runtime_head, - struct lttng_enabler *enabler); + struct list_head *instance_bytecode_runtime_head, + struct list_head *enabler_bytecode_runtime_head); int lttng_probes_init(void);