1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
3 * lttng/events-internal.h
5 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 #ifndef _LTTNG_EVENTS_INTERNAL_H
9 #define _LTTNG_EVENTS_INTERNAL_H
11 #include <lttng/events.h>
13 struct lttng_kernel_event_common_private
{
14 struct lttng_kernel_event_common
*pub
; /* Public event interface */
16 const struct lttng_kernel_event_desc
*desc
;
17 /* Backward references: list of lttng_enabler_ref (ref to enablers) */
18 struct list_head enablers_ref_head
;
19 int registered
; /* has reg'd tracepoint probe */
22 int has_enablers_without_filter_bytecode
;
23 /* list of struct lttng_kernel_bytecode_runtime, sorted by seqnum */
24 struct list_head filter_bytecode_runtime_head
;
25 enum lttng_kernel_abi_instrumentation instrumentation
;
26 /* Selected by instrumentation */
28 struct lttng_kprobe kprobe
;
29 struct lttng_uprobe uprobe
;
31 struct lttng_krp
*lttng_krp
;
35 enum lttng_syscall_entryexit entryexit
;
36 enum lttng_syscall_abi abi
;
37 struct hlist_node node
; /* chain registered syscall event_notifier */
38 unsigned int syscall_id
;
43 struct lttng_kernel_event_recorder_private
{
44 struct lttng_kernel_event_common_private parent
;
46 struct lttng_kernel_event_recorder
*pub
; /* Public event interface */
47 struct list_head node
; /* Event recorder list */
48 struct hlist_node hlist
; /* Hash table of event recorders */
49 struct lttng_kernel_ctx
*ctx
;
51 unsigned int metadata_dumped
:1;
54 struct lttng_kernel_event_notifier_private
{
55 struct lttng_kernel_event_common_private parent
;
57 struct lttng_kernel_event_notifier
*pub
; /* Public event notifier interface */
58 struct lttng_event_notifier_group
*group
; /* weak ref */
59 size_t num_captures
; /* Needed to allocate the msgpack array. */
60 uint64_t error_counter_index
;
61 struct list_head node
; /* Event notifier list */
62 struct hlist_node hlist
; /* Hash table of event notifiers */
63 struct list_head capture_bytecode_runtime_head
;
68 const struct lttng_kernel_type_integer
*lttng_kernel_get_type_integer(const struct lttng_kernel_type_common
*type
)
70 if (type
->type
!= lttng_kernel_type_integer
)
72 return container_of(type
, const struct lttng_kernel_type_integer
, parent
);
76 const struct lttng_kernel_type_string
*lttng_kernel_get_type_string(const struct lttng_kernel_type_common
*type
)
78 if (type
->type
!= lttng_kernel_type_string
)
80 return container_of(type
, const struct lttng_kernel_type_string
, parent
);
84 const struct lttng_kernel_type_enum
*lttng_kernel_get_type_enum(const struct lttng_kernel_type_common
*type
)
86 if (type
->type
!= lttng_kernel_type_enum
)
88 return container_of(type
, const struct lttng_kernel_type_enum
, parent
);
92 const struct lttng_kernel_type_array
*lttng_kernel_get_type_array(const struct lttng_kernel_type_common
*type
)
94 if (type
->type
!= lttng_kernel_type_array
)
96 return container_of(type
, const struct lttng_kernel_type_array
, parent
);
100 const struct lttng_kernel_type_sequence
*lttng_kernel_get_type_sequence(const struct lttng_kernel_type_common
*type
)
102 if (type
->type
!= lttng_kernel_type_sequence
)
104 return container_of(type
, const struct lttng_kernel_type_sequence
, parent
);
108 const struct lttng_kernel_type_struct
*lttng_kernel_get_type_struct(const struct lttng_kernel_type_common
*type
)
110 if (type
->type
!= lttng_kernel_type_struct
)
112 return container_of(type
, const struct lttng_kernel_type_struct
, parent
);
116 const struct lttng_kernel_type_variant
*lttng_kernel_get_type_variant(const struct lttng_kernel_type_common
*type
)
118 if (type
->type
!= lttng_kernel_type_variant
)
120 return container_of(type
, const struct lttng_kernel_type_variant
, parent
);
123 static inline bool lttng_kernel_type_is_bytewise_integer(const struct lttng_kernel_type_common
*type
)
125 const struct lttng_kernel_type_integer
*type_integer
= lttng_kernel_get_type_integer(type
);
129 switch (type_integer
->size
) {
130 case 8: /* Fall-through. */
131 case 16: /* Fall-through. */
132 case 32: /* Fall-through. */
141 #endif /* _LTTNG_EVENTS_INTERNAL_H */