X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fevents.h;h=09b4c6724833a41479bd97bbe218b0fd64e715a3;hb=6c8c025bf7552b6073c5c1884e1493badd842f42;hp=811833f352a71bc948f583fced890d15093d1e39;hpb=a44f47ddfa0b2a35f89d22d33dec1363845ec387;p=lttng-modules.git diff --git a/include/lttng/events.h b/include/lttng/events.h index 811833f3..09b4c672 100644 --- a/include/lttng/events.h +++ b/include/lttng/events.h @@ -26,12 +26,8 @@ #define lttng_is_signed_type(type) (((type) -1) < (type) 1) struct lttng_channel; -struct lttng_session; -struct lttng_metadata_cache; +struct lttng_kernel_session; struct lttng_kernel_ring_buffer_ctx; -struct perf_event; -struct perf_event_attr; -struct lib_ring_buffer_config; /* Type description */ @@ -134,6 +130,7 @@ struct lttng_kernel_enum_desc { const char *name; const struct lttng_kernel_enum_entry **entries; unsigned int nr_entries; + const struct lttng_kernel_probe_desc *probe_desc; }; /* Event field description */ @@ -146,6 +143,10 @@ struct lttng_kernel_event_field { nofilter:1; /* do not consider for filter */ }; +#ifndef PARAMS +#define PARAMS(args...) args +#endif + #define lttng_kernel_static_type_integer(_size, _alignment, _signedness, _byte_order, _base) \ ((const struct lttng_kernel_type_common *) __LTTNG_COMPOUND_LITERAL(const struct lttng_kernel_type_integer, { \ .parent = { \ @@ -211,15 +212,20 @@ struct lttng_kernel_event_field { .encoding = lttng_kernel_string_encoding_##_encoding, \ })) -#define lttng_kernel_static_type_struct(_nr_fields, _fields, _alignment) \ - ((const struct lttng_kernel_type_common *) __LTTNG_COMPOUND_LITERAL(const struct lttng_kernel_type_struct, { \ +#define lttng_kernel_static_type_struct_init(_nr_fields, _fields, _alignment) \ + { \ .parent = { \ .type = lttng_kernel_type_struct, \ }, \ .nr_fields = (_nr_fields), \ .fields = _fields, \ .alignment = (_alignment), \ - })) + } + +#define lttng_kernel_static_type_struct(_nr_fields, _fields, _alignment) \ + ((const struct lttng_kernel_type_common *) __LTTNG_COMPOUND_LITERAL(const struct lttng_kernel_type_struct, \ + lttng_kernel_static_type_struct_init(_nr_fields, PARAMS(_fields), _alignment) \ + )) #define lttng_kernel_static_type_variant(_nr_choices, _choices, _tag_name, _alignment) \ ((const struct lttng_kernel_type_common *) __LTTNG_COMPOUND_LITERAL(const struct lttng_kernel_type_variant, { \ @@ -297,13 +303,18 @@ struct lttng_kernel_probe_ctx { uint8_t interruptible; }; +struct lttng_kernel_tracepoint_class { + void (*probe_callback)(void); + const struct lttng_kernel_event_field **fields; /* event payload */ + unsigned int nr_fields; + const struct lttng_kernel_probe_desc *probe_desc; +}; + struct lttng_kernel_event_desc { const char *event_name; /* lttng-modules name */ const char *event_kname; /* Linux kernel name (tracepoints) */ const struct lttng_kernel_probe_desc *probe_desc; - void (*probe_callback)(void); - const struct lttng_kernel_event_field **fields; /* event payload */ - unsigned int nr_fields; + const struct lttng_kernel_tracepoint_class *tp_class; struct module *owner; }; @@ -388,29 +399,13 @@ struct lttng_kernel_channel_buffer_ops { const char __user *src, size_t len); }; -struct lttng_syscall_filter; - -#define LTTNG_EVENT_HT_BITS 12 -#define LTTNG_EVENT_HT_SIZE (1U << LTTNG_EVENT_HT_BITS) - -struct lttng_event_ht { - struct hlist_head table[LTTNG_EVENT_HT_SIZE]; -}; - -#define LTTNG_EVENT_NOTIFIER_HT_BITS 12 -#define LTTNG_EVENT_NOTIFIER_HT_SIZE (1U << LTTNG_EVENT_NOTIFIER_HT_BITS) - -struct lttng_event_notifier_ht { - struct hlist_head table[LTTNG_EVENT_NOTIFIER_HT_SIZE]; -}; - struct lttng_channel { unsigned int id; struct channel *chan; /* Channel buffers */ int enabled; struct lttng_kernel_ctx *ctx; /* Event ID management */ - struct lttng_session *session; + struct lttng_kernel_session *session; struct file *file; /* File associated to channel */ unsigned int free_event_id; /* Next event ID to allocate */ struct list_head list; /* Channel list */ @@ -445,67 +440,40 @@ struct lttng_dynamic_len_stack { DECLARE_PER_CPU(struct lttng_dynamic_len_stack, lttng_dynamic_len_stack); /* - * struct lttng_id_tracker declared in header due to deferencing of *v + * struct lttng_kernel_id_tracker declared in header due to deferencing of *v * in RCU_INITIALIZER(v). */ #define LTTNG_ID_HASH_BITS 6 #define LTTNG_ID_TABLE_SIZE (1 << LTTNG_ID_HASH_BITS) -enum tracker_type { - TRACKER_PID, - TRACKER_VPID, - TRACKER_UID, - TRACKER_VUID, - TRACKER_GID, - TRACKER_VGID, - - TRACKER_UNKNOWN, -}; - -struct lttng_id_tracker_rcu { +struct lttng_kernel_id_tracker_rcu { struct hlist_head id_hash[LTTNG_ID_TABLE_SIZE]; }; -struct lttng_id_tracker { - struct lttng_session *session; - enum tracker_type tracker_type; - struct lttng_id_tracker_rcu *p; /* RCU dereferenced. */ -}; +struct lttng_kernel_id_tracker { + struct lttng_kernel_id_tracker_private *priv; /* Private API */ -struct lttng_id_hash_node { - struct hlist_node hlist; - int id; + struct lttng_kernel_id_tracker_rcu *p; /* RCU dereferenced. */ }; -struct lttng_session { +struct lttng_kernel_session_private; + +struct lttng_kernel_session { + struct lttng_kernel_session_private *priv; /* Private session interface */ + int active; /* Is trace session active ? */ - int been_active; /* Has trace session been active ? */ - struct file *file; /* File associated to session */ - struct list_head chan; /* Channel list head */ - struct list_head events; /* Event list head */ - struct list_head list; /* Session list */ - unsigned int free_chan_id; /* Next chan ID to allocate */ - uuid_le uuid; /* Trace session unique ID */ - struct lttng_metadata_cache *metadata_cache; - struct lttng_id_tracker pid_tracker; - struct lttng_id_tracker vpid_tracker; - struct lttng_id_tracker uid_tracker; - struct lttng_id_tracker vuid_tracker; - struct lttng_id_tracker gid_tracker; - struct lttng_id_tracker vgid_tracker; - unsigned int metadata_dumped:1, - tstate:1; /* Transient enable state */ - /* List of event enablers */ - struct list_head enablers_head; - /* Hash table of events */ - struct lttng_event_ht events_ht; - char name[LTTNG_KERNEL_ABI_SESSION_NAME_LEN]; - char creation_time[LTTNG_KERNEL_ABI_SESSION_CREATION_TIME_ISO8601_LEN]; + + struct lttng_kernel_id_tracker pid_tracker; + struct lttng_kernel_id_tracker vpid_tracker; + struct lttng_kernel_id_tracker uid_tracker; + struct lttng_kernel_id_tracker vuid_tracker; + struct lttng_kernel_id_tracker gid_tracker; + struct lttng_kernel_id_tracker vgid_tracker; }; int lttng_kernel_probe_register(struct lttng_kernel_probe_desc *desc); void lttng_kernel_probe_unregister(struct lttng_kernel_probe_desc *desc); -bool lttng_id_tracker_lookup(struct lttng_id_tracker_rcu *p, int id); +bool lttng_id_tracker_lookup(struct lttng_kernel_id_tracker_rcu *p, int id); #endif /* _LTTNG_EVENTS_H */