+enum lttng_event_container_type {
+ LTTNG_EVENT_CONTAINER_CHANNEL,
+ LTTNG_EVENT_CONTAINER_COUNTER,
+};
+
+/*
+ * An event can be contained within either a channel or a counter.
+ */
+struct lttng_event_container {
+ enum lttng_event_container_type type;
+
+ struct file *file; /* File associated to event container */
+ struct lttng_session *session; /* Session containing the container */
+ int enabled;
+ struct hlist_head *sc_table; /* for syscall tracing */
+ struct hlist_head *compat_sc_table;
+ struct hlist_head *sc_exit_table; /* for syscall exit tracing */
+ struct hlist_head *compat_sc_exit_table;
+
+ /*
+ * Combining all unknown syscall events works as long as they
+ * are only matched by "all" syscalls enablers, but will require
+ * a design change when we allow matching by syscall number, for
+ * instance by allocating sc_tables accomodating NR_syscalls
+ * entries.
+ */
+ struct hlist_head sc_unknown; /* for unknown syscalls */
+ struct hlist_head sc_compat_unknown;
+ struct hlist_head sc_exit_unknown;
+ struct hlist_head compat_sc_exit_unknown;
+
+ struct lttng_syscall_filter *sc_filter;
+ int syscall_all_entry;
+ int syscall_all_exit;
+ unsigned int sys_enter_registered:1,
+ sys_exit_registered:1,
+ tstate:1; /* Transient enable state */
+ bool coalesce_hits;
+};
+