X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-events.h;h=d0e9c22da4a233f0019406e4906cc60c193ae769;hb=refs%2Fheads%2Fstable-2.7;hp=567449615cce756284795659679da2ca6f5b2af7;hpb=3c9970797850893aaf1b9019d21868d73580e17d;p=lttng-modules.git diff --git a/lttng-events.h b/lttng-events.h index 56744961..d0e9c22d 100644 --- a/lttng-events.h +++ b/lttng-events.h @@ -138,6 +138,14 @@ struct lttng_enum { struct lttng_event_field { const char *name; struct lttng_type type; + unsigned int nowrite:1, /* do not write into trace */ + user:1; /* fetch from user-space */ +}; + +union lttng_ctx_value { + int64_t s64; + const char *str; + double d; }; /* @@ -157,6 +165,8 @@ struct lttng_ctx_field { void (*record)(struct lttng_ctx_field *field, struct lib_ring_buffer_ctx *ctx, struct lttng_channel *chan); + void (*get_value)(struct lttng_ctx_field *field, + union lttng_ctx_value *value); union { struct lttng_perf_counter_field *perf_counter; } u; @@ -196,6 +206,33 @@ enum lttng_event_type { LTTNG_TYPE_ENABLER = 1, }; +struct lttng_filter_bytecode_node { + struct list_head node; + struct lttng_enabler *enabler; + /* + * struct lttng_kernel_filter_bytecode has var. sized array, must be + * last field. + */ + struct lttng_kernel_filter_bytecode bc; +}; + +/* + * Filter return value masks. + */ +enum lttng_filter_ret { + LTTNG_FILTER_DISCARD = 0, + LTTNG_FILTER_RECORD_FLAG = (1ULL << 0), + /* Other bits are kept for future use. */ +}; + +struct lttng_bytecode_runtime { + /* Associated bytecode */ + struct lttng_filter_bytecode_node *bc; + uint64_t (*filter)(void *filter_data, const char *filter_stack_data); + int link_failed; + struct list_head node; /* list of bytecode runtime in event */ +}; + /* * Objects in a linked-list of enablers, owned by an event. */ @@ -237,6 +274,9 @@ struct lttng_event { struct list_head enablers_ref_head; struct hlist_node hlist; /* session ht of events */ int registered; /* has reg'd tracepoint probe */ + /* list of struct lttng_bytecode_runtime, sorted by seqnum */ + struct list_head bytecode_runtime_head; + int has_enablers_without_bytecode; }; enum lttng_enabler_type { @@ -254,6 +294,8 @@ struct lttng_enabler { enum lttng_enabler_type type; struct list_head node; /* per-session list of enablers */ + /* head list of struct lttng_ust_filter_bytecode_node */ + struct list_head filter_bytecode_head; struct lttng_kernel_event event_param; struct lttng_channel *chan; @@ -373,7 +415,6 @@ struct lttng_metadata_stream { wait_queue_head_t read_wait; /* Reader buffer-level wait queue */ struct list_head list; /* Stream list */ struct lttng_transport *transport; - struct mutex lock; }; @@ -419,6 +460,7 @@ struct lttng_metadata_cache { struct kref refcount; /* Metadata cache usage */ struct list_head metadata_stream; /* Metadata stream list */ uuid_le uuid; /* Trace session unique ID (copy) */ + struct mutex lock; }; void lttng_lock_sessions(void); @@ -460,6 +502,11 @@ struct lttng_event *lttng_event_create(struct lttng_channel *chan, void *filter, const struct lttng_event_desc *event_desc, enum lttng_kernel_instrumentation itype); +struct lttng_event *_lttng_event_create(struct lttng_channel *chan, + struct lttng_kernel_event *event_param, + void *filter, + const struct lttng_event_desc *event_desc, + enum lttng_kernel_instrumentation itype); struct lttng_event *lttng_event_compat_old_create(struct lttng_channel *chan, struct lttng_kernel_old_event *old_event_param, void *filter, @@ -510,7 +557,6 @@ int lttng_syscall_filter_disable(struct lttng_channel *chan, const char *name); long lttng_channel_syscall_mask(struct lttng_channel *channel, struct lttng_kernel_syscall_mask __user *usyscall_mask); -int lttng_abi_syscall_list(void); #else static inline int lttng_syscalls_register(struct lttng_channel *chan, void *filter) { @@ -522,41 +568,44 @@ static inline int lttng_syscalls_unregister(struct lttng_channel *chan) return 0; } -static inline -int lttng_syscall_filter_enable(struct lttng_channel *chan, +static inline int lttng_syscall_filter_enable(struct lttng_channel *chan, const char *name) { return -ENOSYS; } -static inline -int lttng_syscall_filter_disable(struct lttng_channel *chan, +static inline int lttng_syscall_filter_disable(struct lttng_channel *chan, const char *name) { return -ENOSYS; } -static inline -long lttng_channel_syscall_mask(struct lttng_channel *channel, +static inline long lttng_channel_syscall_mask(struct lttng_channel *channel, struct lttng_kernel_syscall_mask __user *usyscall_mask) { return -ENOSYS; } - -static inline -int lttng_abi_syscall_list(void) -{ - return -ENOSYS; -} #endif +void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime); +int lttng_enabler_attach_bytecode(struct lttng_enabler *enabler, + struct lttng_kernel_filter_bytecode __user *bytecode); +void lttng_enabler_event_link_bytecode(struct lttng_event *event, + struct lttng_enabler *enabler); + +extern struct lttng_ctx *lttng_static_ctx; + +int lttng_context_init(void); +void lttng_context_exit(void); struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx); void lttng_context_update(struct lttng_ctx *ctx); int lttng_find_context(struct lttng_ctx *ctx, const char *name); +int lttng_get_context_index(struct lttng_ctx *ctx, const char *name); void lttng_remove_context_field(struct lttng_ctx **ctx, struct lttng_ctx_field *field); void lttng_destroy_context(struct lttng_ctx *ctx); int lttng_add_pid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_cpu_id_to_ctx(struct lttng_ctx **ctx); int lttng_add_procname_to_ctx(struct lttng_ctx **ctx); int lttng_add_prio_to_ctx(struct lttng_ctx **ctx); int lttng_add_nice_to_ctx(struct lttng_ctx **ctx); @@ -626,6 +675,8 @@ int lttng_kretprobes_register(const char *name, struct lttng_event *event_exit); void lttng_kretprobes_unregister(struct lttng_event *event); void lttng_kretprobes_destroy_private(struct lttng_event *event); +int lttng_kretprobes_event_enable_state(struct lttng_event *event, + int enable); #else static inline int lttng_kretprobes_register(const char *name, @@ -647,6 +698,13 @@ static inline void lttng_kretprobes_destroy_private(struct lttng_event *event) { } + +static inline +int lttng_kretprobes_event_enable_state(struct lttng_event *event, + int enable) +{ + return -ENOSYS; +} #endif #ifdef CONFIG_DYNAMIC_FTRACE