X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Fust-events-internal.h;h=0fc0b795de3e08179e98ada090ad963e0e1d6313;hb=621c07fc1b90c12ec997d539770da1937d11c450;hp=f93305ed057274e82dc479251a9637717438362d;hpb=d871c65bcb2e94c69e0a46e7e0dcd2dae2fce7af;p=lttng-ust.git diff --git a/liblttng-ust/ust-events-internal.h b/liblttng-ust/ust-events-internal.h index f93305ed..0fc0b795 100644 --- a/liblttng-ust/ust-events-internal.h +++ b/liblttng-ust/ust-events-internal.h @@ -44,6 +44,39 @@ struct lttng_event_enabler { struct lttng_ctx *ctx; }; +struct lttng_event_notifier_enabler { + struct lttng_enabler base; + struct cds_list_head node; /* per-app list of event notifier enablers */ + struct lttng_event_notifier_group *group; /* weak ref */ + uint64_t user_token; /* User-provided token */ +}; + +enum lttng_ust_bytecode_node_type { + LTTNG_UST_BYTECODE_NODE_TYPE_FILTER, +}; + +struct lttng_ust_bytecode_node { + enum lttng_ust_bytecode_node_type type; + struct cds_list_head node; + struct lttng_enabler *enabler; + struct { + uint32_t len; + uint32_t reloc_offset; + uint64_t seqnum; + char data[]; + } bc; +}; + +struct lttng_ust_excluder_node { + struct cds_list_head node; + struct lttng_enabler *enabler; + /* + * struct lttng_ust_event_exclusion had variable sized array, + * must be last field. + */ + struct lttng_ust_event_exclusion excluder; +}; + static inline struct lttng_enabler *lttng_event_enabler_as_enabler( struct lttng_event_enabler *event_enabler) @@ -51,6 +84,12 @@ struct lttng_enabler *lttng_event_enabler_as_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; +} /* * Allocate and initialize a `struct lttng_event_enabler` object. @@ -89,8 +128,9 @@ int lttng_event_enabler_disable(struct lttng_event_enabler *enabler); * events related to this enabler. */ LTTNG_HIDDEN -int lttng_event_enabler_attach_bytecode(struct lttng_event_enabler *enabler, - struct lttng_ust_filter_bytecode_node *bytecode); +int lttng_event_enabler_attach_filter_bytecode( + struct lttng_event_enabler *enabler, + struct lttng_ust_bytecode_node *bytecode); /* * Attach an application context to an event enabler. @@ -110,13 +150,95 @@ int lttng_event_enabler_attach_exclusion(struct lttng_event_enabler *enabler, struct lttng_ust_excluder_node *excluder); /* - * Synchronize bytecodes for the enabler and the event. + * Synchronize bytecodes for the enabler and the instance (event or trigger). * - * This function goes over all bytecode programs of the event enabler to ensure - * each is linked to the provided event. + * This function goes over all bytecode programs of the enabler (event or + * trigger enabler) to ensure each is linked to the provided instance. + */ +LTTNG_HIDDEN +void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc, + struct lttng_ctx **ctx, + struct cds_list_head *instance_bytecode_runtime_head, + struct cds_list_head *enabler_bytecode_runtime_head); + +/* + * Allocate and initialize a `struct lttng_event_notifier_group` object. + * + * On success, returns a `struct lttng_triggre_group`, + * on memory error, returns NULL. + */ +LTTNG_HIDDEN +struct lttng_event_notifier_group *lttng_event_notifier_group_create(void); + +/* + * Destroy a `struct lttng_event_notifier_group` object. + */ +LTTNG_HIDDEN +void lttng_event_notifier_group_destroy( + struct lttng_event_notifier_group *event_notifier_group); + +/* + * Allocate and initialize a `struct lttng_event_notifier_enabler` object. + * + * On success, returns a `struct lttng_event_notifier_enabler`, + * On memory error, returns NULL. + */ +LTTNG_HIDDEN +struct lttng_event_notifier_enabler *lttng_event_notifier_enabler_create( + struct lttng_event_notifier_group *event_notifier_group, + enum lttng_enabler_format_type format_type, + struct lttng_ust_event_notifier *event_notifier_param); + +/* + * Destroy a `struct lttng_event_notifier_enabler` object. + */ +LTTNG_HIDDEN +void lttng_event_notifier_enabler_destroy( + struct lttng_event_notifier_enabler *event_notifier_enabler); + +/* + * Enable a `struct lttng_event_notifier_enabler` object and all event + * notifiers related to this enabler. + */ +LTTNG_HIDDEN +int lttng_event_notifier_enabler_enable( + struct lttng_event_notifier_enabler *event_notifier_enabler); + +/* + * Disable a `struct lttng_event_notifier_enabler` object and all event + * notifiers related to this enabler. + */ +LTTNG_HIDDEN +int lttng_event_notifier_enabler_disable( + struct lttng_event_notifier_enabler *event_notifier_enabler); + +/* + * Attach filter bytecode program to `struct lttng_event_notifier_enabler` and + * all event notifiers related to this enabler. + */ +LTTNG_HIDDEN +int lttng_event_notifier_enabler_attach_filter_bytecode( + struct lttng_event_notifier_enabler *event_notifier_enabler, + struct lttng_ust_bytecode_node *bytecode); + +/* + * Attach exclusion list to `struct lttng_event_notifier_enabler` and all + * event notifiers related to this enabler. + */ +LTTNG_HIDDEN +int lttng_event_notifier_enabler_attach_exclusion( + struct lttng_event_notifier_enabler *event_notifier_enabler, + struct lttng_ust_excluder_node *excluder); + +LTTNG_HIDDEN +void lttng_free_event_notifier_filter_runtime( + struct lttng_event_notifier *event_notifier); + +/* + * Connect the probe on all enablers matching this event description. + * Called on library load. */ LTTNG_HIDDEN -void lttng_event_enabler_link_bytecode(struct lttng_event *event, - struct lttng_event_enabler *enabler); +int lttng_fix_pending_event_notifiers(void); #endif /* _LTTNG_UST_EVENTS_INTERNAL_H */