struct ltt_channel;
struct ltt_session;
struct lib_ring_buffer_ctx;
+struct perf_event;
+struct perf_event_attr;
/* Type description */
struct lttng_type type;
};
+struct lttng_ctx_field {
+ const char *name;
+ struct lttng_type type;
+ void *callback;
+ union {
+ struct {
+ struct perf_event **e; /* per-cpu array */
+ struct list_head head;
+ struct perf_event_attr *attr;
+ } perf_counter;
+ } u;
+};
+
+struct lttng_ctx {
+ struct lttng_ctx_field *fields;
+ unsigned int nr_fields;
+ unsigned int allocated_fields;
+};
+
struct lttng_event_desc {
- const struct lttng_event_field *fields;
const char *name;
void *probe_callback;
+ const struct lttng_event_ctx *ctx; /* context */
+ const struct lttng_event_field *fields; /* event payload */
unsigned int nr_fields;
};
int ltt_probes_init(void);
void ltt_probes_exit(void);
+#ifdef CONFIG_KPROBES
int lttng_kprobes_register(const char *name,
const char *symbol_name,
uint64_t offset,
uint64_t addr,
struct ltt_event *event);
void lttng_kprobes_unregister(struct ltt_event *event);
+#else
+static inline
+int lttng_kprobes_register(const char *name,
+ const char *symbol_name,
+ uint64_t offset,
+ uint64_t addr,
+ struct ltt_event *event)
+{
+ return -ENOSYS;
+}
+
+void lttng_kprobes_unregister(struct ltt_event *event)
+{
+}
+#endif
#ifdef CONFIG_DYNAMIC_FTRACE
int lttng_ftrace_register(const char *name,
const char *symbol_name,
struct ltt_event *event)
{
- return 0;
+ return -ENOSYS;
}
static inline