struct lttng_ctx_field *fields;
unsigned int nr_fields;
unsigned int allocated_fields;
+ size_t largest_align; /* in bytes */
};
struct lttng_event_desc {
struct mutex lock;
};
+
+/*
+ * struct lttng_pid_tracker declared in header due to deferencing of *v
+ * in RCU_INITIALIZER(v).
+ */
+#define LTTNG_PID_HASH_BITS 6
+#define LTTNG_PID_TABLE_SIZE (1 << LTTNG_PID_HASH_BITS)
+
+struct lttng_pid_tracker {
+ struct hlist_head pid_hash[LTTNG_PID_TABLE_SIZE];
+};
+
struct lttng_session {
int active; /* Is trace session active ? */
int been_active; /* Has trace session been active ? */
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_pid_tracker *pid_tracker;
unsigned int metadata_dumped:1;
};
int lttng_metadata_output_channel(struct lttng_metadata_stream *stream,
struct channel *chan);
+struct lttng_pid_tracker *lttng_pid_tracker_create(void);
+void lttng_pid_tracker_destroy(struct lttng_pid_tracker *lpf);
+bool lttng_pid_tracker_lookup(struct lttng_pid_tracker *lpf, int pid);
+int lttng_pid_tracker_add(struct lttng_pid_tracker *lpf, int pid);
+int lttng_pid_tracker_del(struct lttng_pid_tracker *lpf, int pid);
+
+int lttng_session_track_pid(struct lttng_session *session, int pid);
+int lttng_session_untrack_pid(struct lttng_session *session, int pid);
+
#if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
int lttng_syscalls_register(struct lttng_channel *chan, void *filter);
int lttng_syscalls_unregister(struct lttng_channel *chan);
const char *name);
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)
{
return 0;
}
+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,
const char *name)
{
return -ENOSYS;
}
+
+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
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);
void lttng_remove_context_field(struct lttng_ctx **ctx,
struct lttng_ctx_field *field);
int lttng_calibrate(struct lttng_kernel_calibrate *calibrate);
extern const struct file_operations lttng_tracepoint_list_fops;
+extern const struct file_operations lttng_syscall_list_fops;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
#define TRACEPOINT_HAS_DATA_ARG