Implement event notifier send notification
[lttng-modules.git] / include / lttng / events.h
CommitLineData
b7cdc182 1/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
9f36eaed 2 *
2df37e95 3 * lttng/events.h
4e3c1b9b 4 *
4e3c1b9b 5 * Holds LTTng per-session event registry.
17baffe2 6 *
886d51a3 7 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4e3c1b9b
MD
8 */
9
9f36eaed
MJ
10#ifndef _LTTNG_EVENTS_H
11#define _LTTNG_EVENTS_H
12
21f58fb7 13#include <linux/irq_work.h>
3a523f5b 14#include <linux/version.h>
4e3c1b9b 15#include <linux/list.h>
d6d808f3 16#include <linux/kprobes.h>
d83004aa 17#include <linux/kref.h>
41f229dc 18#include <linux/uuid.h>
149b9a9d 19#include <wrapper/uprobes.h>
2df37e95
MD
20#include <lttng/cpuhotplug.h>
21#include <lttng/tracer.h>
22#include <lttng/abi.h>
23#include <lttng/abi-old.h>
24#include <lttng/endian.h>
4e3c1b9b 25
06254b0f 26#define lttng_is_signed_type(type) (((type)(-1)) < 0)
9e7e4892 27
a90917c3
MD
28struct lttng_channel;
29struct lttng_session;
d83004aa 30struct lttng_metadata_cache;
1c25284c 31struct lib_ring_buffer_ctx;
ba1f5986 32struct perf_event;
833ad6a0 33struct perf_event_attr;
3b731ab1 34struct lib_ring_buffer_config;
4e3c1b9b 35
c0edae1d
MD
36/* Type description */
37
c0edae1d
MD
38enum abstract_types {
39 atype_integer,
c0edae1d 40 atype_string,
ceabb767
MD
41 atype_enum_nestable,
42 atype_array_nestable,
43 atype_sequence_nestable,
44 atype_struct_nestable,
45 atype_variant_nestable,
c0edae1d
MD
46 NR_ABSTRACT_TYPES,
47};
48
c0edae1d 49enum lttng_string_encodings {
e0a7a7c4
MD
50 lttng_encode_none = 0,
51 lttng_encode_UTF8 = 1,
52 lttng_encode_ASCII = 2,
c0edae1d
MD
53 NR_STRING_ENCODINGS,
54};
55
d83004aa
JD
56enum channel_type {
57 PER_CPU_CHANNEL,
58 METADATA_CHANNEL,
59};
60
141ddf28
MD
61struct lttng_enum_value {
62 unsigned long long value;
63 unsigned int signedness:1;
64};
65
c0edae1d 66struct lttng_enum_entry {
141ddf28 67 struct lttng_enum_value start, end; /* start and end are inclusive */
c0edae1d 68 const char *string;
08ad1061
PP
69 struct {
70 unsigned int is_auto:1;
71 } options;
c0edae1d
MD
72};
73
43803cf2
MD
74#define __type_integer(_type, _size, _alignment, _signedness, \
75 _byte_order, _base, _encoding) \
c099397a
MD
76 { \
77 .atype = atype_integer, \
ceabb767 78 .u.integer = \
c099397a 79 { \
43803cf2
MD
80 .size = (_size) ? : sizeof(_type) * CHAR_BIT, \
81 .alignment = (_alignment) ? : lttng_alignof(_type) * CHAR_BIT, \
82 .signedness = (_signedness) >= 0 ? (_signedness) : lttng_is_signed_type(_type), \
83 .reverse_byte_order = _byte_order != __BYTE_ORDER, \
e0a7a7c4 84 .base = _base, \
64c796d8 85 .encoding = lttng_encode_##_encoding, \
c099397a
MD
86 }, \
87 } \
88
89struct lttng_integer_type {
90 unsigned int size; /* in bits */
91 unsigned short alignment; /* in bits */
9cccf98a
MD
92 unsigned int signedness:1,
93 reverse_byte_order:1;
e0a7a7c4
MD
94 unsigned int base; /* 2, 8, 10, 16, for pretty print */
95 enum lttng_string_encodings encoding;
c099397a
MD
96};
97
c0edae1d
MD
98struct lttng_type {
99 enum abstract_types atype;
c0edae1d 100 union {
ceabb767 101 struct lttng_integer_type integer;
c0edae1d 102 struct {
ceabb767
MD
103 enum lttng_string_encodings encoding;
104 } string;
c0edae1d 105 struct {
ceabb767
MD
106 const struct lttng_enum_desc *desc; /* Enumeration mapping */
107 const struct lttng_type *container_type;
108 } enum_nestable;
f513b2bf 109 struct {
ceabb767
MD
110 const struct lttng_type *elem_type;
111 unsigned int length; /* Num. elems. */
112 unsigned int alignment;
113 } array_nestable;
f513b2bf 114 struct {
ceabb767
MD
115 const char *length_name; /* Length field name. */
116 const struct lttng_type *elem_type;
117 unsigned int alignment; /* Alignment before elements. */
118 } sequence_nestable;
f513b2bf 119 struct {
ceabb767
MD
120 unsigned int nr_fields;
121 const struct lttng_event_field *fields; /* Array of fields. */
122 unsigned int alignment;
123 } struct_nestable;
65c85aa6
MD
124 struct {
125 const char *tag_name;
ceabb767
MD
126 const struct lttng_event_field *choices; /* Array of fields. */
127 unsigned int nr_choices;
128 unsigned int alignment;
129 } variant_nestable;
c0edae1d 130 } u;
c099397a
MD
131};
132
141ddf28 133struct lttng_enum_desc {
c099397a 134 const char *name;
c099397a 135 const struct lttng_enum_entry *entries;
141ddf28 136 unsigned int nr_entries;
c099397a 137};
c0edae1d
MD
138
139/* Event field description */
140
141struct lttng_event_field {
142 const char *name;
f17701fb 143 struct lttng_type type;
f127e61e 144 unsigned int nowrite:1, /* do not write into trace */
ceabb767
MD
145 user:1, /* fetch from user-space */
146 nofilter:1; /* do not consider for filter */
c0edae1d
MD
147};
148
07dfc1d0
MD
149union lttng_ctx_value {
150 int64_t s64;
151 const char *str;
152 double d;
153};
154
2001023e
MD
155/*
156 * We need to keep this perf counter field separately from struct
157 * lttng_ctx_field because cpu hotplug needs fixed-location addresses.
158 */
159struct lttng_perf_counter_field {
1e367326
MD
160#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
161 struct lttng_cpuhp_node cpuhp_prepare;
162 struct lttng_cpuhp_node cpuhp_online;
163#else
2001023e
MD
164 struct notifier_block nb;
165 int hp_enable;
1e367326 166#endif
2001023e
MD
167 struct perf_event_attr *attr;
168 struct perf_event **e; /* per-cpu array */
169};
170
79150a49
JD
171struct lttng_probe_ctx {
172 struct lttng_event *event;
173 uint8_t interruptible;
174};
175
ba1f5986 176struct lttng_ctx_field {
8070f5c0 177 struct lttng_event_field event_field;
f1676205 178 size_t (*get_size)(size_t offset);
1474c8e2
FG
179 size_t (*get_size_arg)(size_t offset, struct lttng_ctx_field *field,
180 struct lib_ring_buffer_ctx *ctx,
181 struct lttng_channel *chan);
f1676205
MD
182 void (*record)(struct lttng_ctx_field *field,
183 struct lib_ring_buffer_ctx *ctx,
a90917c3 184 struct lttng_channel *chan);
07dfc1d0 185 void (*get_value)(struct lttng_ctx_field *field,
79150a49 186 struct lttng_probe_ctx *lttng_probe_ctx,
07dfc1d0 187 union lttng_ctx_value *value);
ba1f5986 188 union {
2001023e 189 struct lttng_perf_counter_field *perf_counter;
ba1f5986 190 } u;
2dccf128 191 void (*destroy)(struct lttng_ctx_field *field);
3c1a57e8
MD
192 /*
193 * Private data to keep state between get_size and record.
194 * User must perform its own synchronization to protect against
195 * concurrent and reentrant contexts.
196 */
197 void *priv;
ba1f5986
MD
198};
199
200struct lttng_ctx {
833ad6a0 201 struct lttng_ctx_field *fields;
0d1a681e 202 unsigned int nr_fields;
ba1f5986 203 unsigned int allocated_fields;
a9dd15da 204 size_t largest_align; /* in bytes */
0d1a681e
MD
205};
206
207struct lttng_event_desc {
a26a7e4f
MD
208 const char *name; /* lttng-modules name */
209 const char *kname; /* Linux kernel name (tracepoints) */
c0edae1d 210 void *probe_callback;
0d1a681e
MD
211 const struct lttng_event_ctx *ctx; /* context */
212 const struct lttng_event_field *fields; /* event payload */
c0edae1d 213 unsigned int nr_fields;
dc7f600a 214 struct module *owner;
c0edae1d
MD
215};
216
85a9ca7f 217struct lttng_probe_desc {
3c997079 218 const char *provider;
f7bdf4db 219 const struct lttng_event_desc **event_desc;
85a9ca7f
MD
220 unsigned int nr_events;
221 struct list_head head; /* chain registered probes */
3c997079
MD
222 struct list_head lazy_init_head;
223 int lazy; /* lazy registration */
85a9ca7f
MD
224};
225
7371f44c
MD
226struct lttng_krp; /* Kretprobe handling */
227
3c997079
MD
228enum lttng_event_type {
229 LTTNG_TYPE_EVENT = 0,
230 LTTNG_TYPE_ENABLER = 1,
231};
232
07dfc1d0
MD
233struct lttng_filter_bytecode_node {
234 struct list_head node;
235 struct lttng_enabler *enabler;
236 /*
237 * struct lttng_kernel_filter_bytecode has var. sized array, must be
238 * last field.
239 */
240 struct lttng_kernel_filter_bytecode bc;
241};
242
243/*
244 * Filter return value masks.
245 */
246enum lttng_filter_ret {
247 LTTNG_FILTER_DISCARD = 0,
248 LTTNG_FILTER_RECORD_FLAG = (1ULL << 0),
249 /* Other bits are kept for future use. */
250};
251
252struct lttng_bytecode_runtime {
253 /* Associated bytecode */
254 struct lttng_filter_bytecode_node *bc;
79150a49
JD
255 uint64_t (*filter)(void *filter_data, struct lttng_probe_ctx *lttng_probe_ctx,
256 const char *filter_stack_data);
07dfc1d0
MD
257 int link_failed;
258 struct list_head node; /* list of bytecode runtime in event */
2dfda770 259 struct lttng_ctx *ctx;
07dfc1d0
MD
260};
261
3c997079
MD
262/*
263 * Objects in a linked-list of enablers, owned by an event.
264 */
265struct lttng_enabler_ref {
266 struct list_head node; /* enabler ref list */
267 struct lttng_enabler *ref; /* backward ref */
268};
269
3aed4dca
FD
270struct lttng_uprobe_handler {
271 struct lttng_event *event;
272 loff_t offset;
273 struct uprobe_consumer up_consumer;
274 struct list_head node;
275};
276
badfe9f5
MD
277enum lttng_syscall_entryexit {
278 LTTNG_SYSCALL_ENTRY,
279 LTTNG_SYSCALL_EXIT,
280};
281
282enum lttng_syscall_abi {
283 LTTNG_SYSCALL_ABI_NATIVE,
284 LTTNG_SYSCALL_ABI_COMPAT,
285};
286
85a9ca7f 287/*
a90917c3 288 * lttng_event structure is referred to by the tracing fast path. It must be
85a9ca7f
MD
289 * kept small.
290 */
a90917c3 291struct lttng_event {
3c997079 292 enum lttng_event_type evtype; /* First field. */
85a9ca7f 293 unsigned int id;
a90917c3 294 struct lttng_channel *chan;
e64957da 295 int enabled;
d3dbe23c 296 const struct lttng_event_desc *desc;
85a9ca7f 297 void *filter;
f1676205 298 struct lttng_ctx *ctx;
38d024ae 299 enum lttng_kernel_instrumentation instrumentation;
d6d808f3
MD
300 union {
301 struct {
302 struct kprobe kp;
303 char *symbol_name;
304 } kprobe;
7371f44c
MD
305 struct {
306 struct lttng_krp *lttng_krp;
307 char *symbol_name;
308 } kretprobe;
149b9a9d 309 struct {
149b9a9d 310 struct inode *inode;
3aed4dca 311 struct list_head head;
149b9a9d 312 } uprobe;
badfe9f5
MD
313 struct {
314 char *syscall_name;
315 enum lttng_syscall_entryexit entryexit;
316 enum lttng_syscall_abi abi;
317 } syscall;
d6d808f3 318 } u;
3c997079 319 struct list_head list; /* Event list in session */
9cccf98a 320 unsigned int metadata_dumped:1;
3c997079
MD
321
322 /* Backward references: list of lttng_enabler_ref (ref to enablers) */
323 struct list_head enablers_ref_head;
324 struct hlist_node hlist; /* session ht of events */
325 int registered; /* has reg'd tracepoint probe */
07dfc1d0
MD
326 /* list of struct lttng_bytecode_runtime, sorted by seqnum */
327 struct list_head bytecode_runtime_head;
328 int has_enablers_without_bytecode;
3c997079
MD
329};
330
dffef45d
FD
331// FIXME: Really similar to lttng_event above. Could those be merged ?
332struct lttng_event_notifier {
333 enum lttng_event_type evtype; /* First field. */
334 uint64_t user_token;
335 int enabled;
336 int registered; /* has reg'd tracepoint probe */
337 const struct lttng_event_desc *desc;
338 void *filter;
339 struct list_head list; /* event_notifier list in event_notifier group */
340
341 enum lttng_kernel_instrumentation instrumentation;
342 union {
343 } u;
344
345 /* Backward references: list of lttng_enabler_ref (ref to enablers) */
346 struct list_head enablers_ref_head;
347 struct hlist_node hlist; /* session ht of event_notifiers */
348 /* list of struct lttng_bytecode_runtime, sorted by seqnum */
349 struct list_head bytecode_runtime_head;
350 int has_enablers_without_bytecode;
351
21f58fb7 352 void (*send_notification)(struct lttng_event_notifier *event_notifier);
dffef45d
FD
353 struct lttng_event_notifier_group *group; /* Weak ref */
354};
355
3b861b22
FD
356enum lttng_enabler_format_type {
357 LTTNG_ENABLER_FORMAT_STAR_GLOB,
358 LTTNG_ENABLER_FORMAT_NAME,
3c997079
MD
359};
360
361/*
362 * Enabler field, within whatever object is enabling an event. Target of
363 * backward reference.
364 */
365struct lttng_enabler {
366 enum lttng_event_type evtype; /* First field. */
367
3b861b22 368 enum lttng_enabler_format_type format_type;
3c997079 369
07dfc1d0
MD
370 /* head list of struct lttng_ust_filter_bytecode_node */
371 struct list_head filter_bytecode_head;
3c997079
MD
372
373 struct lttng_kernel_event event_param;
b2bc0bc8 374 unsigned int enabled:1;
dffef45d
FD
375
376 uint64_t user_token; /* User-provided token. */
b2bc0bc8
FD
377};
378
379struct lttng_event_enabler {
380 struct lttng_enabler base;
381 struct list_head node; /* per-session list of enablers */
3c997079 382 struct lttng_channel *chan;
2954b37c
FD
383 /*
384 * Unused, but kept around to make it explicit that the tracer can do
385 * it.
386 */
3c997079 387 struct lttng_ctx *ctx;
85a9ca7f
MD
388};
389
dffef45d
FD
390struct lttng_event_notifier_enabler {
391 struct lttng_enabler base;
392 struct list_head node; /* List of event_notifier enablers */
393 struct lttng_event_notifier_group *group;
394};
395
b2bc0bc8
FD
396static inline
397struct lttng_enabler *lttng_event_enabler_as_enabler(
398 struct lttng_event_enabler *event_enabler)
399{
400 return &event_enabler->base;
401}
402
dffef45d
FD
403static inline
404struct lttng_enabler *lttng_event_notifier_enabler_as_enabler(
405 struct lttng_event_notifier_enabler *event_notifier_enabler)
406{
407 return &event_notifier_enabler->base;
408}
b2bc0bc8 409
a90917c3 410struct lttng_channel_ops {
85a9ca7f 411 struct channel *(*channel_create)(const char *name,
5cf4b87c 412 void *priv,
85a9ca7f
MD
413 void *buf_addr,
414 size_t subbuf_size, size_t num_subbuf,
415 unsigned int switch_timer_interval,
416 unsigned int read_timer_interval);
417 void (*channel_destroy)(struct channel *chan);
418 struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan);
f71ecafa 419 int (*buffer_has_read_closed_stream)(struct channel *chan);
85a9ca7f 420 void (*buffer_read_close)(struct lib_ring_buffer *buf);
4e1f08f4 421 int (*event_reserve)(struct lib_ring_buffer_ctx *ctx,
64c796d8 422 uint32_t event_id);
85a9ca7f
MD
423 void (*event_commit)(struct lib_ring_buffer_ctx *ctx);
424 void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src,
425 size_t len);
4ea00e4f
JD
426 void (*event_write_from_user)(struct lib_ring_buffer_ctx *ctx,
427 const void *src, size_t len);
58aa5d24
MD
428 void (*event_memset)(struct lib_ring_buffer_ctx *ctx,
429 int c, size_t len);
16f78f3a
MD
430 void (*event_strcpy)(struct lib_ring_buffer_ctx *ctx, const char *src,
431 size_t len);
432 void (*event_strcpy_from_user)(struct lib_ring_buffer_ctx *ctx,
433 const char __user *src, size_t len);
1ec3f75a
MD
434 /*
435 * packet_avail_size returns the available size in the current
436 * packet. Note that the size returned is only a hint, since it
437 * may change due to concurrent writes.
438 */
439 size_t (*packet_avail_size)(struct channel *chan);
71c1d843 440 wait_queue_head_t *(*get_writer_buf_wait_queue)(struct channel *chan, int cpu);
24cedcfe
MD
441 wait_queue_head_t *(*get_hp_wait_queue)(struct channel *chan);
442 int (*is_finalized)(struct channel *chan);
254ec7bc 443 int (*is_disabled)(struct channel *chan);
3b731ab1
JD
444 int (*timestamp_begin) (const struct lib_ring_buffer_config *config,
445 struct lib_ring_buffer *bufb,
446 uint64_t *timestamp_begin);
447 int (*timestamp_end) (const struct lib_ring_buffer_config *config,
448 struct lib_ring_buffer *bufb,
449 uint64_t *timestamp_end);
450 int (*events_discarded) (const struct lib_ring_buffer_config *config,
451 struct lib_ring_buffer *bufb,
452 uint64_t *events_discarded);
453 int (*content_size) (const struct lib_ring_buffer_config *config,
454 struct lib_ring_buffer *bufb,
455 uint64_t *content_size);
456 int (*packet_size) (const struct lib_ring_buffer_config *config,
457 struct lib_ring_buffer *bufb,
458 uint64_t *packet_size);
459 int (*stream_id) (const struct lib_ring_buffer_config *config,
460 struct lib_ring_buffer *bufb,
461 uint64_t *stream_id);
2348ca17
JD
462 int (*current_timestamp) (const struct lib_ring_buffer_config *config,
463 struct lib_ring_buffer *bufb,
464 uint64_t *ts);
5b3cf4f9
JD
465 int (*sequence_number) (const struct lib_ring_buffer_config *config,
466 struct lib_ring_buffer *bufb,
467 uint64_t *seq);
5594698f
JD
468 int (*instance_id) (const struct lib_ring_buffer_config *config,
469 struct lib_ring_buffer *bufb,
470 uint64_t *id);
85a9ca7f
MD
471};
472
a90917c3 473struct lttng_transport {
a33c9927
MD
474 char *name;
475 struct module *owner;
476 struct list_head node;
a90917c3 477 struct lttng_channel_ops ops;
a33c9927
MD
478};
479
80f87dd2
MD
480struct lttng_syscall_filter;
481
3c997079
MD
482#define LTTNG_EVENT_HT_BITS 12
483#define LTTNG_EVENT_HT_SIZE (1U << LTTNG_EVENT_HT_BITS)
484
485struct lttng_event_ht {
486 struct hlist_head table[LTTNG_EVENT_HT_SIZE];
487};
488
dffef45d
FD
489#define LTTNG_EVENT_NOTIFIER_HT_BITS 12
490#define LTTNG_EVENT_NOTIFIER_HT_SIZE (1U << LTTNG_EVENT_NOTIFIER_HT_BITS)
491
492struct lttng_event_notifier_ht {
493 struct hlist_head table[LTTNG_EVENT_NOTIFIER_HT_SIZE];
494};
495
a90917c3 496struct lttng_channel {
c099397a 497 unsigned int id;
85a9ca7f 498 struct channel *chan; /* Channel buffers */
e64957da 499 int enabled;
f1676205 500 struct lttng_ctx *ctx;
85a9ca7f 501 /* Event ID management */
a90917c3 502 struct lttng_session *session;
85a9ca7f
MD
503 struct file *file; /* File associated to channel */
504 unsigned int free_event_id; /* Next event ID to allocate */
505 struct list_head list; /* Channel list */
a90917c3
MD
506 struct lttng_channel_ops *ops;
507 struct lttng_transport *transport;
508 struct lttng_event **sc_table; /* for syscall tracing */
509 struct lttng_event **compat_sc_table;
5b7ac358
MD
510 struct lttng_event **sc_exit_table; /* for syscall exit tracing */
511 struct lttng_event **compat_sc_exit_table;
a90917c3
MD
512 struct lttng_event *sc_unknown; /* for unknown syscalls */
513 struct lttng_event *sc_compat_unknown;
5b7ac358
MD
514 struct lttng_event *sc_exit_unknown;
515 struct lttng_event *compat_sc_exit_unknown;
80f87dd2 516 struct lttng_syscall_filter *sc_filter;
9115fbdc 517 int header_type; /* 0: unset, 1: compact, 2: large */
d83004aa 518 enum channel_type channel_type;
badfe9f5 519 int syscall_all;
80f87dd2
MD
520 unsigned int metadata_dumped:1,
521 sys_enter_registered:1,
522 sys_exit_registered:1,
3c997079 523 tstate:1; /* Transient enable state */
85a9ca7f
MD
524};
525
d83004aa
JD
526struct lttng_metadata_stream {
527 void *priv; /* Ring buffer private data */
528 struct lttng_metadata_cache *metadata_cache;
f613e3e6
MD
529 unsigned int metadata_in; /* Bytes read from the cache */
530 unsigned int metadata_out; /* Bytes consumed from stream */
d83004aa
JD
531 int finalized; /* Has channel been finalized */
532 wait_queue_head_t read_wait; /* Reader buffer-level wait queue */
533 struct list_head list; /* Stream list */
b3b8072b 534 struct lttng_transport *transport;
9616f0bf 535 uint64_t version; /* Current version of the metadata cache */
8b97fd42 536 bool coherent; /* Stream in a coherent state */
d83004aa
JD
537};
538
114667d5
MD
539#define LTTNG_DYNAMIC_LEN_STACK_SIZE 128
540
541struct lttng_dynamic_len_stack {
542 size_t stack[LTTNG_DYNAMIC_LEN_STACK_SIZE];
543 size_t offset;
544};
545
546DECLARE_PER_CPU(struct lttng_dynamic_len_stack, lttng_dynamic_len_stack);
e0130fab
MD
547
548/*
d1f652f8 549 * struct lttng_id_tracker declared in header due to deferencing of *v
e0130fab
MD
550 * in RCU_INITIALIZER(v).
551 */
d1f652f8
MD
552#define LTTNG_ID_HASH_BITS 6
553#define LTTNG_ID_TABLE_SIZE (1 << LTTNG_ID_HASH_BITS)
e0130fab 554
d1f652f8
MD
555enum tracker_type {
556 TRACKER_PID,
557 TRACKER_VPID,
558 TRACKER_UID,
559 TRACKER_VUID,
560 TRACKER_GID,
561 TRACKER_VGID,
562
563 TRACKER_UNKNOWN,
564};
565
566struct lttng_id_tracker_rcu {
567 struct hlist_head id_hash[LTTNG_ID_TABLE_SIZE];
568};
569
570struct lttng_id_tracker {
571 struct lttng_session *session;
572 enum tracker_type tracker_type;
573 struct lttng_id_tracker_rcu *p; /* RCU dereferenced. */
e0130fab
MD
574};
575
d1f652f8 576struct lttng_id_hash_node {
7e6f9ef6 577 struct hlist_node hlist;
d1f652f8 578 int id;
7e6f9ef6
MD
579};
580
a90917c3 581struct lttng_session {
85a9ca7f 582 int active; /* Is trace session active ? */
8070f5c0 583 int been_active; /* Has trace session been active ? */
85a9ca7f
MD
584 struct file *file; /* File associated to session */
585 struct list_head chan; /* Channel list head */
586 struct list_head events; /* Event list head */
587 struct list_head list; /* Session list */
c099397a 588 unsigned int free_chan_id; /* Next chan ID to allocate */
d793d5e1 589 uuid_le uuid; /* Trace session unique ID */
d83004aa 590 struct lttng_metadata_cache *metadata_cache;
d1f652f8
MD
591 struct lttng_id_tracker pid_tracker;
592 struct lttng_id_tracker vpid_tracker;
593 struct lttng_id_tracker uid_tracker;
594 struct lttng_id_tracker vuid_tracker;
595 struct lttng_id_tracker gid_tracker;
596 struct lttng_id_tracker vgid_tracker;
3c997079
MD
597 unsigned int metadata_dumped:1,
598 tstate:1; /* Transient enable state */
b2bc0bc8 599 /* List of event enablers */
3c997079
MD
600 struct list_head enablers_head;
601 /* Hash table of events */
602 struct lttng_event_ht events_ht;
7f859fbf 603 char name[LTTNG_KERNEL_SESSION_NAME_LEN];
1c88f269 604 char creation_time[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN];
85a9ca7f
MD
605};
606
750b05f2
FD
607struct lttng_event_notifier_group {
608 struct file *file; /* File associated to event notifier group */
21f58fb7 609 struct file *notif_file; /* File used to expose notifications to userspace. */
750b05f2 610 struct list_head node; /* event notifier group list */
dffef45d
FD
611 struct list_head enablers_head; /* List of enablers */
612 struct list_head event_notifiers_head; /* List of event notifier */
613 struct lttng_event_notifier_ht event_notifiers_ht; /* Hash table of event notifiers */
750b05f2
FD
614 struct lttng_ctx *ctx; /* Contexts for filters. */
615 struct lttng_channel_ops *ops;
616 struct lttng_transport *transport;
617 struct channel *chan; /* Ring buffer channel for event notifier group. */
618 struct lib_ring_buffer *buf; /* Ring buffer for event notifier group. */
21f58fb7
FD
619 wait_queue_head_t read_wait;
620 struct irq_work wakeup_pending; /* Pending wakeup irq work. */
750b05f2
FD
621};
622
d83004aa
JD
623struct lttng_metadata_cache {
624 char *data; /* Metadata cache */
625 unsigned int cache_alloc; /* Metadata allocated size (bytes) */
626 unsigned int metadata_written; /* Number of bytes written in metadata cache */
3e75e2a7 627 atomic_t producing; /* Metadata being produced (incomplete) */
d83004aa
JD
628 struct kref refcount; /* Metadata cache usage */
629 struct list_head metadata_stream; /* Metadata stream list */
a36580d5 630 uuid_le uuid; /* Trace session unique ID (copy) */
9616f0bf
JD
631 struct mutex lock; /* Produce/consume lock */
632 uint64_t version; /* Current version of the metadata */
d83004aa
JD
633};
634
3c997079
MD
635void lttng_lock_sessions(void);
636void lttng_unlock_sessions(void);
637
638struct list_head *lttng_get_probe_list_head(void);
639
b2bc0bc8
FD
640struct lttng_event_enabler *lttng_event_enabler_create(
641 enum lttng_enabler_format_type format_type,
3c997079
MD
642 struct lttng_kernel_event *event_param,
643 struct lttng_channel *chan);
644
b2bc0bc8
FD
645int lttng_event_enabler_enable(struct lttng_event_enabler *event_enabler);
646int lttng_event_enabler_disable(struct lttng_event_enabler *event_enabler);
dffef45d
FD
647struct lttng_event_notifier_enabler *lttng_event_notifier_enabler_create(
648 struct lttng_event_notifier_group *event_notifier_group,
649 enum lttng_enabler_format_type format_type,
650 struct lttng_kernel_event_notifier *event_notifier_param);
651
652int lttng_event_notifier_enabler_enable(
653 struct lttng_event_notifier_enabler *event_notifier_enabler);
654int lttng_event_notifier_enabler_disable(
655 struct lttng_event_notifier_enabler *event_notifier_enabler);
3c997079
MD
656int lttng_fix_pending_events(void);
657int lttng_session_active(void);
658
a90917c3
MD
659struct lttng_session *lttng_session_create(void);
660int lttng_session_enable(struct lttng_session *session);
661int lttng_session_disable(struct lttng_session *session);
662void lttng_session_destroy(struct lttng_session *session);
9616f0bf 663int lttng_session_metadata_regenerate(struct lttng_session *session);
601252cf 664int lttng_session_statedump(struct lttng_session *session);
d83004aa 665void metadata_cache_destroy(struct kref *kref);
4e3c1b9b 666
750b05f2
FD
667struct lttng_event_notifier_group *lttng_event_notifier_group_create(void);
668void lttng_event_notifier_group_destroy(
669 struct lttng_event_notifier_group *event_notifier_group);
670
a90917c3 671struct lttng_channel *lttng_channel_create(struct lttng_session *session,
5dbbdb43
MD
672 const char *transport_name,
673 void *buf_addr,
674 size_t subbuf_size, size_t num_subbuf,
675 unsigned int switch_timer_interval,
d83004aa
JD
676 unsigned int read_timer_interval,
677 enum channel_type channel_type);
a90917c3 678struct lttng_channel *lttng_global_channel_create(struct lttng_session *session,
4e3c1b9b
MD
679 int overwrite, void *buf_addr,
680 size_t subbuf_size, size_t num_subbuf,
681 unsigned int switch_timer_interval,
682 unsigned int read_timer_interval);
4e3c1b9b 683
d83004aa 684void lttng_metadata_channel_destroy(struct lttng_channel *chan);
a90917c3 685struct lttng_event *lttng_event_create(struct lttng_channel *chan,
3c997079
MD
686 struct lttng_kernel_event *event_param,
687 void *filter,
688 const struct lttng_event_desc *event_desc,
689 enum lttng_kernel_instrumentation itype);
33a39a3c
MD
690struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
691 struct lttng_kernel_event *event_param,
692 void *filter,
693 const struct lttng_event_desc *event_desc,
694 enum lttng_kernel_instrumentation itype);
6dccd6c1
JD
695struct lttng_event *lttng_event_compat_old_create(struct lttng_channel *chan,
696 struct lttng_kernel_old_event *old_event_param,
697 void *filter,
698 const struct lttng_event_desc *internal_desc);
c0e31d2e 699
dffef45d
FD
700struct lttng_event_notifier *lttng_event_notifier_create(
701 const struct lttng_event_desc *event_notifier_desc,
702 uint64_t id,
703 struct lttng_event_notifier_group *event_notifier_group,
704 struct lttng_kernel_event_notifier *event_notifier_param,
705 void *filter,
706 enum lttng_kernel_instrumentation itype);
707struct lttng_event_notifier *_lttng_event_notifier_create(
708 const struct lttng_event_desc *event_notifier_desc,
709 uint64_t id,
710 struct lttng_event_notifier_group *event_notifier_group,
711 struct lttng_kernel_event_notifier *event_notifier_param,
712 void *filter,
713 enum lttng_kernel_instrumentation itype);
714
a90917c3
MD
715int lttng_channel_enable(struct lttng_channel *channel);
716int lttng_channel_disable(struct lttng_channel *channel);
717int lttng_event_enable(struct lttng_event *event);
718int lttng_event_disable(struct lttng_event *event);
e64957da 719
a90917c3
MD
720void lttng_transport_register(struct lttng_transport *transport);
721void lttng_transport_unregister(struct lttng_transport *transport);
11b5a3c2 722
360f38ea 723void synchronize_trace(void);
80996790 724int lttng_abi_init(void);
6dccd6c1 725int lttng_abi_compat_old_init(void);
80996790 726void lttng_abi_exit(void);
6dccd6c1 727void lttng_abi_compat_old_exit(void);
1c25284c 728
a90917c3
MD
729int lttng_probe_register(struct lttng_probe_desc *desc);
730void lttng_probe_unregister(struct lttng_probe_desc *desc);
0bcedee9
FD
731const struct lttng_event_desc *lttng_event_desc_get(const char *name);
732void lttng_event_desc_put(const struct lttng_event_desc *desc);
a90917c3
MD
733int lttng_probes_init(void);
734void lttng_probes_exit(void);
1ec65de1 735
b3b8072b 736int lttng_metadata_output_channel(struct lttng_metadata_stream *stream,
8b97fd42 737 struct channel *chan, bool *coherent);
d83004aa 738
d1f652f8
MD
739int lttng_id_tracker_get_node_id(const struct lttng_id_hash_node *node);
740int lttng_id_tracker_empty_set(struct lttng_id_tracker *lf);
741void lttng_id_tracker_destroy(struct lttng_id_tracker *lf, bool rcu);
742bool lttng_id_tracker_lookup(struct lttng_id_tracker_rcu *p, int id);
743int lttng_id_tracker_add(struct lttng_id_tracker *lf, int id);
744int lttng_id_tracker_del(struct lttng_id_tracker *lf, int id);
e0130fab 745
d1f652f8
MD
746int lttng_session_track_id(struct lttng_session *session,
747 enum tracker_type tracker_type, int id);
748int lttng_session_untrack_id(struct lttng_session *session,
749 enum tracker_type tracker_type, int id);
e0130fab 750
d1f652f8
MD
751int lttng_session_list_tracker_ids(struct lttng_session *session,
752 enum tracker_type tracker_type);
7e6f9ef6 753
2754583e
MD
754void lttng_clock_ref(void);
755void lttng_clock_unref(void);
756
3a523f5b 757#if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
a90917c3
MD
758int lttng_syscalls_register(struct lttng_channel *chan, void *filter);
759int lttng_syscalls_unregister(struct lttng_channel *chan);
badfe9f5 760int lttng_syscalls_destroy(struct lttng_channel *chan);
80f87dd2 761int lttng_syscall_filter_enable(struct lttng_channel *chan,
badfe9f5 762 struct lttng_event *event);
80f87dd2 763int lttng_syscall_filter_disable(struct lttng_channel *chan,
badfe9f5 764 struct lttng_event *event);
12e579db
MD
765long lttng_channel_syscall_mask(struct lttng_channel *channel,
766 struct lttng_kernel_syscall_mask __user *usyscall_mask);
1ec65de1 767#else
a90917c3 768static inline int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
1ec65de1
MD
769{
770 return -ENOSYS;
771}
772
a90917c3 773static inline int lttng_syscalls_unregister(struct lttng_channel *chan)
1ec65de1
MD
774{
775 return 0;
776}
80f87dd2 777
badfe9f5
MD
778static inline int lttng_syscalls_destroy(struct lttng_channel *chan)
779{
780 return 0;
781}
782
f127e61e 783static inline int lttng_syscall_filter_enable(struct lttng_channel *chan,
badfe9f5 784 struct lttng_event *event);
80f87dd2
MD
785{
786 return -ENOSYS;
787}
788
f127e61e 789static inline int lttng_syscall_filter_disable(struct lttng_channel *chan,
badfe9f5 790 struct lttng_event *event);
80f87dd2
MD
791{
792 return -ENOSYS;
793}
12e579db 794
f127e61e 795static inline long lttng_channel_syscall_mask(struct lttng_channel *channel,
12e579db
MD
796 struct lttng_kernel_syscall_mask __user *usyscall_mask)
797{
798 return -ENOSYS;
799}
dffef45d 800
1ec65de1
MD
801#endif
802
07dfc1d0 803void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime);
b2bc0bc8 804int lttng_event_enabler_attach_bytecode(struct lttng_event_enabler *event_enabler,
07dfc1d0 805 struct lttng_kernel_filter_bytecode __user *bytecode);
dffef45d
FD
806int lttng_event_notifier_enabler_attach_bytecode(
807 struct lttng_event_notifier_enabler *event_notifier_enabler,
808 struct lttng_kernel_filter_bytecode __user *bytecode);
2dfda770
FD
809
810void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc,
811 struct lttng_ctx *ctx,
812 struct list_head *bytecode_runtime_head,
813 struct lttng_enabler *enabler);
07dfc1d0 814
114667d5
MD
815int lttng_probes_init(void);
816
07dfc1d0
MD
817extern struct lttng_ctx *lttng_static_ctx;
818
819int lttng_context_init(void);
820void lttng_context_exit(void);
2dccf128 821struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx);
c02eb859
MD
822ssize_t lttng_append_context_index(struct lttng_ctx **ctx_p);
823struct lttng_ctx_field *lttng_get_context_field_from_index(struct lttng_ctx *ctx,
824 size_t index);
a9dd15da 825void lttng_context_update(struct lttng_ctx *ctx);
44252f0f 826int lttng_find_context(struct lttng_ctx *ctx, const char *name);
07dfc1d0 827int lttng_get_context_index(struct lttng_ctx *ctx, const char *name);
8289661d
MD
828void lttng_remove_context_field(struct lttng_ctx **ctx,
829 struct lttng_ctx_field *field);
c02eb859 830void lttng_remove_context_field_index(struct lttng_ctx **ctx_p, size_t index);
2dccf128 831void lttng_destroy_context(struct lttng_ctx *ctx);
8070f5c0 832int lttng_add_pid_to_ctx(struct lttng_ctx **ctx);
b3699d90 833int lttng_add_cpu_id_to_ctx(struct lttng_ctx **ctx);
a2563e83 834int lttng_add_procname_to_ctx(struct lttng_ctx **ctx);
a8ad3613 835int lttng_add_prio_to_ctx(struct lttng_ctx **ctx);
53f1f0ca 836int lttng_add_nice_to_ctx(struct lttng_ctx **ctx);
b64bc438
MD
837int lttng_add_vpid_to_ctx(struct lttng_ctx **ctx);
838int lttng_add_tid_to_ctx(struct lttng_ctx **ctx);
839int lttng_add_vtid_to_ctx(struct lttng_ctx **ctx);
840int lttng_add_ppid_to_ctx(struct lttng_ctx **ctx);
841int lttng_add_vppid_to_ctx(struct lttng_ctx **ctx);
975da2c0 842int lttng_add_hostname_to_ctx(struct lttng_ctx **ctx);
79150a49
JD
843int lttng_add_interruptible_to_ctx(struct lttng_ctx **ctx);
844int lttng_add_need_reschedule_to_ctx(struct lttng_ctx **ctx);
845#if defined(CONFIG_PREEMPT_RT_FULL) || defined(CONFIG_PREEMPT)
846int lttng_add_preemptible_to_ctx(struct lttng_ctx **ctx);
847#else
848static inline
849int lttng_add_preemptible_to_ctx(struct lttng_ctx **ctx)
850{
851 return -ENOSYS;
852}
853#endif
854#ifdef CONFIG_PREEMPT_RT_FULL
855int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx);
856#else
857static inline
858int lttng_add_migratable_to_ctx(struct lttng_ctx **ctx)
859{
860 return -ENOSYS;
861}
862#endif
2fa2d39a
FG
863
864int lttng_add_callstack_to_ctx(struct lttng_ctx **ctx, int type);
865
a6cf40a4
MJ
866#if defined(CONFIG_CGROUPS) && \
867 ((LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) || \
868 LTTNG_UBUNTU_KERNEL_RANGE(4,4,0,0, 4,5,0,0))
869int lttng_add_cgroup_ns_to_ctx(struct lttng_ctx **ctx);
870#else
871static inline
872int lttng_add_cgroup_ns_to_ctx(struct lttng_ctx **ctx)
873{
874 return -ENOSYS;
875}
876#endif
877
878#if defined(CONFIG_IPC_NS) && \
879 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
880int lttng_add_ipc_ns_to_ctx(struct lttng_ctx **ctx);
881#else
882static inline
883int lttng_add_ipc_ns_to_ctx(struct lttng_ctx **ctx)
884{
885 return -ENOSYS;
886}
887#endif
888
889#if !defined(LTTNG_MNT_NS_MISSING_HEADER) && \
890 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
891int lttng_add_mnt_ns_to_ctx(struct lttng_ctx **ctx);
892#else
893static inline
894int lttng_add_mnt_ns_to_ctx(struct lttng_ctx **ctx)
895{
896 return -ENOSYS;
897}
898#endif
899
900#if defined(CONFIG_NET_NS) && \
901 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
902int lttng_add_net_ns_to_ctx(struct lttng_ctx **ctx);
903#else
904static inline
905int lttng_add_net_ns_to_ctx(struct lttng_ctx **ctx)
906{
907 return -ENOSYS;
908}
909#endif
910
911#if defined(CONFIG_PID_NS) && \
912 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
913int lttng_add_pid_ns_to_ctx(struct lttng_ctx **ctx);
914#else
915static inline
916int lttng_add_pid_ns_to_ctx(struct lttng_ctx **ctx)
917{
918 return -ENOSYS;
919}
920#endif
921
922#if defined(CONFIG_USER_NS) && \
923 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
924int lttng_add_user_ns_to_ctx(struct lttng_ctx **ctx);
925#else
926static inline
927int lttng_add_user_ns_to_ctx(struct lttng_ctx **ctx)
928{
929 return -ENOSYS;
930}
931#endif
932
933#if defined(CONFIG_UTS_NS) && \
934 (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
935int lttng_add_uts_ns_to_ctx(struct lttng_ctx **ctx);
936#else
937static inline
938int lttng_add_uts_ns_to_ctx(struct lttng_ctx **ctx)
939{
940 return -ENOSYS;
941}
942#endif
943
876e2e92
MJ
944#if defined(CONFIG_TIME_NS) && \
945 (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
946int lttng_add_time_ns_to_ctx(struct lttng_ctx **ctx);
947#else
948static inline
949int lttng_add_time_ns_to_ctx(struct lttng_ctx **ctx)
950{
951 return -ENOSYS;
952}
953#endif
954
dc923e75
MJ
955int lttng_add_uid_to_ctx(struct lttng_ctx **ctx);
956int lttng_add_euid_to_ctx(struct lttng_ctx **ctx);
957int lttng_add_suid_to_ctx(struct lttng_ctx **ctx);
958int lttng_add_gid_to_ctx(struct lttng_ctx **ctx);
959int lttng_add_egid_to_ctx(struct lttng_ctx **ctx);
960int lttng_add_sgid_to_ctx(struct lttng_ctx **ctx);
961int lttng_add_vuid_to_ctx(struct lttng_ctx **ctx);
962int lttng_add_veuid_to_ctx(struct lttng_ctx **ctx);
963int lttng_add_vsuid_to_ctx(struct lttng_ctx **ctx);
964int lttng_add_vgid_to_ctx(struct lttng_ctx **ctx);
965int lttng_add_vegid_to_ctx(struct lttng_ctx **ctx);
966int lttng_add_vsgid_to_ctx(struct lttng_ctx **ctx);
967
8a3af9ee 968#if defined(CONFIG_PERF_EVENTS)
c24a0d71
MD
969int lttng_add_perf_counter_to_ctx(uint32_t type,
970 uint64_t config,
971 const char *name,
972 struct lttng_ctx **ctx);
1e367326
MD
973int lttng_cpuhp_perf_counter_online(unsigned int cpu,
974 struct lttng_cpuhp_node *node);
975int lttng_cpuhp_perf_counter_dead(unsigned int cpu,
976 struct lttng_cpuhp_node *node);
1d443b34
MD
977#else
978static inline
979int lttng_add_perf_counter_to_ctx(uint32_t type,
980 uint64_t config,
981 const char *name,
982 struct lttng_ctx **ctx)
983{
984 return -ENOSYS;
985}
1e367326
MD
986static inline
987int lttng_cpuhp_perf_counter_online(unsigned int cpu,
988 struct lttng_cpuhp_node *node)
989{
990 return 0;
991}
992static inline
993int lttng_cpuhp_perf_counter_dead(unsigned int cpu,
994 struct lttng_cpuhp_node *node)
995{
996 return 0;
997}
1d443b34 998#endif
02119ee5 999
0c956676
MD
1000int lttng_logger_init(void);
1001void lttng_logger_exit(void);
1002
c337ddc2
MD
1003extern int lttng_statedump_start(struct lttng_session *session);
1004
acd614cc 1005#ifdef CONFIG_KPROBES
f17701fb
MD
1006int lttng_kprobes_register(const char *name,
1007 const char *symbol_name,
1008 uint64_t offset,
1009 uint64_t addr,
a90917c3
MD
1010 struct lttng_event *event);
1011void lttng_kprobes_unregister(struct lttng_event *event);
1012void lttng_kprobes_destroy_private(struct lttng_event *event);
acd614cc
MD
1013#else
1014static inline
1015int lttng_kprobes_register(const char *name,
1016 const char *symbol_name,
1017 uint64_t offset,
1018 uint64_t addr,
a90917c3 1019 struct lttng_event *event)
acd614cc
MD
1020{
1021 return -ENOSYS;
1022}
1023
25f53c39 1024static inline
a90917c3 1025void lttng_kprobes_unregister(struct lttng_event *event)
acd614cc
MD
1026{
1027}
edeb3137
MD
1028
1029static inline
a90917c3 1030void lttng_kprobes_destroy_private(struct lttng_event *event)
edeb3137
MD
1031{
1032}
acd614cc 1033#endif
d6d808f3 1034
3aed4dca
FD
1035int lttng_event_add_callsite(struct lttng_event *event,
1036 struct lttng_kernel_event_callsite *callsite);
e33fc900 1037
149b9a9d
YB
1038#ifdef CONFIG_UPROBES
1039int lttng_uprobes_register(const char *name,
3aed4dca
FD
1040 int fd, struct lttng_event *event);
1041int lttng_uprobes_add_callsite(struct lttng_event *event,
1042 struct lttng_kernel_event_callsite *callsite);
149b9a9d
YB
1043void lttng_uprobes_unregister(struct lttng_event *event);
1044void lttng_uprobes_destroy_private(struct lttng_event *event);
1045#else
1046static inline
1047int lttng_uprobes_register(const char *name,
3aed4dca
FD
1048 int fd, struct lttng_event *event)
1049{
1050 return -ENOSYS;
1051}
1052
1053static inline
1054int lttng_uprobes_add_callsite(struct lttng_event *event,
e33fc900 1055 struct lttng_kernel_event_callsite *callsite)
149b9a9d
YB
1056{
1057 return -ENOSYS;
1058}
1059
1060static inline
1061void lttng_uprobes_unregister(struct lttng_event *event)
1062{
1063}
1064
1065static inline
1066void lttng_uprobes_destroy_private(struct lttng_event *event)
1067{
1068}
1069#endif
1070
7371f44c
MD
1071#ifdef CONFIG_KRETPROBES
1072int lttng_kretprobes_register(const char *name,
1073 const char *symbol_name,
1074 uint64_t offset,
1075 uint64_t addr,
a90917c3
MD
1076 struct lttng_event *event_entry,
1077 struct lttng_event *event_exit);
1078void lttng_kretprobes_unregister(struct lttng_event *event);
1079void lttng_kretprobes_destroy_private(struct lttng_event *event);
a0493bef
MD
1080int lttng_kretprobes_event_enable_state(struct lttng_event *event,
1081 int enable);
7371f44c
MD
1082#else
1083static inline
1084int lttng_kretprobes_register(const char *name,
1085 const char *symbol_name,
1086 uint64_t offset,
1087 uint64_t addr,
a90917c3
MD
1088 struct lttng_event *event_entry,
1089 struct lttng_event *event_exit)
7371f44c
MD
1090{
1091 return -ENOSYS;
1092}
1093
1094static inline
a90917c3 1095void lttng_kretprobes_unregister(struct lttng_event *event)
7371f44c
MD
1096{
1097}
1098
1099static inline
a90917c3 1100void lttng_kretprobes_destroy_private(struct lttng_event *event)
7371f44c
MD
1101{
1102}
a0493bef
MD
1103
1104static inline
1105int lttng_kretprobes_event_enable_state(struct lttng_event *event,
1106 int enable)
1107{
1108 return -ENOSYS;
1109}
7371f44c
MD
1110#endif
1111
3db41b2c 1112int lttng_calibrate(struct lttng_kernel_calibrate *calibrate);
57105fc2 1113
271b6681 1114extern const struct file_operations lttng_tracepoint_list_fops;
2d2464bd 1115extern const struct file_operations lttng_syscall_list_fops;
271b6681 1116
ef200626 1117#define TRACEPOINT_HAS_DATA_ARG
ef200626 1118
ceabb767
MD
1119static inline bool lttng_is_bytewise_integer(const struct lttng_type *type)
1120{
1121 if (type->atype != atype_integer)
1122 return false;
1123 switch (type->u.integer.size) {
1124 case 8: /* Fall-through. */
1125 case 16: /* Fall-through. */
1126 case 32: /* Fall-through. */
1127 case 64:
1128 break;
1129 default:
1130 return false;
1131 }
1132 return true;
1133}
1134
a90917c3 1135#endif /* _LTTNG_EVENTS_H */
This page took 0.101996 seconds and 4 git commands to generate.