X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttng-events.h;h=2b1370520ecd85ab4d39364586ee08fe949d1f6a;hb=3c1a57e8ce82366ce96774e4ac1d7481c561cc4c;hp=9e05e2f9a56b044c8c690fbbc2ac75a3889d2c58;hpb=601252cfa07fa29f15c769fe3f4cf4419311d6f9;p=lttng-modules.git diff --git a/lttng-events.h b/lttng-events.h index 9e05e2f9..2b137052 100644 --- a/lttng-events.h +++ b/lttng-events.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,8 @@ enum abstract_types { atype_array_compound, /* Array of compound types. */ atype_sequence_compound, /* Sequence of compound types. */ atype_variant, + atype_array_bitfield, + atype_sequence_bitfield, NR_ABSTRACT_TYPES, }; @@ -77,6 +80,9 @@ struct lttng_enum_value { struct lttng_enum_entry { struct lttng_enum_value start, end; /* start and end are inclusive */ const char *string; + struct { + unsigned int is_auto:1; + } options; }; #define __type_integer(_type, _size, _alignment, _signedness, \ @@ -181,8 +187,13 @@ union lttng_ctx_value { * lttng_ctx_field because cpu hotplug needs fixed-location addresses. */ struct lttng_perf_counter_field { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) + struct lttng_cpuhp_node cpuhp_prepare; + struct lttng_cpuhp_node cpuhp_online; +#else struct notifier_block nb; int hp_enable; +#endif struct perf_event_attr *attr; struct perf_event **e; /* per-cpu array */ }; @@ -195,6 +206,9 @@ struct lttng_probe_ctx { struct lttng_ctx_field { struct lttng_event_field event_field; size_t (*get_size)(size_t offset); + size_t (*get_size_arg)(size_t offset, struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan); void (*record)(struct lttng_ctx_field *field, struct lib_ring_buffer_ctx *ctx, struct lttng_channel *chan); @@ -205,6 +219,12 @@ struct lttng_ctx_field { struct lttng_perf_counter_field *perf_counter; } u; void (*destroy)(struct lttng_ctx_field *field); + /* + * Private data to keep state between get_size and record. + * User must perform its own synchronization to protect against + * concurrent and reentrant contexts. + */ + void *priv; }; struct lttng_ctx { @@ -266,6 +286,7 @@ struct lttng_bytecode_runtime { const char *filter_stack_data); int link_failed; struct list_head node; /* list of bytecode runtime in event */ + struct lttng_event *event; }; /* @@ -315,7 +336,7 @@ struct lttng_event { }; enum lttng_enabler_type { - LTTNG_ENABLER_WILDCARD, + LTTNG_ENABLER_STAR_GLOB, LTTNG_ENABLER_NAME, }; @@ -693,11 +714,18 @@ int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx) return -ENOSYS; } #endif + +int lttng_add_callstack_to_ctx(struct lttng_ctx **ctx, int type); + #if defined(CONFIG_PERF_EVENTS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) int lttng_add_perf_counter_to_ctx(uint32_t type, uint64_t config, const char *name, struct lttng_ctx **ctx); +int lttng_cpuhp_perf_counter_online(unsigned int cpu, + struct lttng_cpuhp_node *node); +int lttng_cpuhp_perf_counter_dead(unsigned int cpu, + struct lttng_cpuhp_node *node); #else static inline int lttng_add_perf_counter_to_ctx(uint32_t type, @@ -707,6 +735,18 @@ int lttng_add_perf_counter_to_ctx(uint32_t type, { return -ENOSYS; } +static inline +int lttng_cpuhp_perf_counter_online(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + return 0; +} +static inline +int lttng_cpuhp_perf_counter_dead(unsigned int cpu, + struct lttng_cpuhp_node *node) +{ + return 0; +} #endif int lttng_logger_init(void); @@ -785,7 +825,7 @@ int lttng_kretprobes_event_enable_state(struct lttng_event *event, } #endif -#ifdef CONFIG_DYNAMIC_FTRACE +#if defined(CONFIG_DYNAMIC_FTRACE) && !defined(LTTNG_FTRACE_MISSING_HEADER) int lttng_ftrace_register(const char *name, const char *symbol_name, struct lttng_event *event);