X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Fust-events-internal.h;h=1305a61f6c5925c1b654995771a4f09901b74e90;hb=8665f6a432525473b9dcba296394e68a8f49d9f2;hp=074a7b69bf44fcabfe544a191b3031fefbfe0f45;hpb=d8d2416dab454962b90222ba46c82cdce0c666a4;p=lttng-ust.git diff --git a/liblttng-ust/ust-events-internal.h b/liblttng-ust/ust-events-internal.h index 074a7b69..1305a61f 100644 --- a/liblttng-ust/ust-events-internal.h +++ b/liblttng-ust/ust-events-internal.h @@ -1,38 +1,41 @@ -#ifndef _LTTNG_UST_EVENTS_INTERNAL_H -#define _LTTNG_UST_EVENTS_INTERNAL_H - /* - * ust-events-internal.h - * - * Copyright 2019 (c) - Francis Deslauriers - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * SPDX-License-Identifier: MIT * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * Copyright 2019 (c) Francis Deslauriers */ +#ifndef _LTTNG_UST_EVENTS_INTERNAL_H +#define _LTTNG_UST_EVENTS_INTERNAL_H + #include #include #include -#include +#include #include +enum lttng_enabler_format_type { + LTTNG_ENABLER_FORMAT_STAR_GLOB, + LTTNG_ENABLER_FORMAT_EVENT, +}; + +/* + * 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_ust_filter_bytecode_node */ + struct cds_list_head filter_bytecode_head; + /* head list of struct lttng_ust_excluder_node */ + struct cds_list_head excluder_head; + + struct lttng_ust_event event_param; + unsigned int enabled:1; +}; + struct lttng_event_enabler { struct lttng_enabler base; struct cds_list_head node; /* per-session list of enablers */ @@ -46,19 +49,29 @@ struct lttng_event_enabler { struct lttng_event_notifier_enabler { struct lttng_enabler base; - struct cds_list_head node; /* per-app list of event notifier enablers */ + uint64_t error_counter_index; + struct cds_list_head node; /* per-app list of event_notifier enablers */ + struct cds_list_head capture_bytecode_head; struct lttng_event_notifier_group *group; /* weak ref */ uint64_t user_token; /* User-provided token */ + uint64_t num_captures; }; -struct lttng_ust_filter_bytecode_node { +enum lttng_ust_bytecode_node_type { + LTTNG_UST_BYTECODE_NODE_TYPE_FILTER, + LTTNG_UST_BYTECODE_NODE_TYPE_CAPTURE, +}; + +struct lttng_ust_bytecode_node { + enum lttng_ust_bytecode_node_type type; struct cds_list_head node; struct lttng_enabler *enabler; - /* - * struct lttng_ust_filter_bytecode has var. sized array, must - * be last field. - */ - struct lttng_ust_filter_bytecode bc; + struct { + uint32_t len; + uint32_t reloc_offset; + uint64_t seqnum; + char data[]; + } bc; }; struct lttng_ust_excluder_node { @@ -122,8 +135,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. @@ -140,19 +154,20 @@ int lttng_event_enabler_attach_context(struct lttng_event_enabler *enabler, */ LTTNG_HIDDEN int lttng_event_enabler_attach_exclusion(struct lttng_event_enabler *enabler, - struct lttng_ust_excluder_node *excluder); + struct lttng_ust_excluder_node **excluder); /* - * Synchronize bytecodes for the enabler and the event. + * Synchronize bytecodes for the enabler and the instance (event or + * event_notifier). * - * 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 + * event_notifier 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 *bytecode_runtime_head, - struct lttng_enabler *enabler); + 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. @@ -210,9 +225,18 @@ int lttng_event_notifier_enabler_disable( * all event notifiers related to this enabler. */ LTTNG_HIDDEN -int lttng_event_notifier_enabler_attach_bytecode( +int lttng_event_notifier_enabler_attach_filter_bytecode( + struct lttng_event_notifier_enabler *event_notifier_enabler, + struct lttng_ust_bytecode_node **bytecode); + +/* + * Attach capture bytecode program to `struct lttng_event_notifier_enabler` and + * all event_notifiers related to this enabler. + */ +LTTNG_HIDDEN +int lttng_event_notifier_enabler_attach_capture_bytecode( struct lttng_event_notifier_enabler *event_notifier_enabler, - struct lttng_ust_filter_bytecode_node *bytecode); + struct lttng_ust_bytecode_node **bytecode); /* * Attach exclusion list to `struct lttng_event_notifier_enabler` and all @@ -221,7 +245,7 @@ int lttng_event_notifier_enabler_attach_bytecode( LTTNG_HIDDEN int lttng_event_notifier_enabler_attach_exclusion( struct lttng_event_notifier_enabler *event_notifier_enabler, - struct lttng_ust_excluder_node *excluder); + struct lttng_ust_excluder_node **excluder); LTTNG_HIDDEN void lttng_free_event_notifier_filter_runtime( @@ -234,4 +258,42 @@ void lttng_free_event_notifier_filter_runtime( LTTNG_HIDDEN int lttng_fix_pending_event_notifiers(void); +LTTNG_HIDDEN +struct lttng_counter *lttng_ust_counter_create( + const char *counter_transport_name, + size_t number_dimensions, const struct lttng_counter_dimension *dimensions); + +#ifdef HAVE_PERF_EVENT + +LTTNG_HIDDEN +int lttng_add_perf_counter_to_ctx(uint32_t type, + uint64_t config, + const char *name, + struct lttng_ctx **ctx); +LTTNG_HIDDEN +int lttng_perf_counter_init(void); +LTTNG_HIDDEN +void lttng_perf_counter_exit(void); + +#else /* #ifdef HAVE_PERF_EVENT */ + +static inline +int lttng_add_perf_counter_to_ctx(uint32_t type, + uint64_t config, + const char *name, + struct lttng_ctx **ctx) +{ + return -ENOSYS; +} +static inline +int lttng_perf_counter_init(void) +{ + return 0; +} +static inline +void lttng_perf_counter_exit(void) +{ +} +#endif /* #else #ifdef HAVE_PERF_EVENT */ + #endif /* _LTTNG_UST_EVENTS_INTERNAL_H */