*/
#include <linux/list.h>
+#include <linux/uuid.h>
+#include <linux/kprobes.h>
#include "ltt-debugfs-abi.h"
struct ltt_channel;
.u.basic.integer = \
{ \
.size = sizeof(_type), \
- .alignment = __alignof__(_type), \
+ .alignment = ltt_alignof(_type) * CHAR_BIT, \
.signedness = is_signed_type(_type), \
.reverse_byte_order = _byte_order != __BYTE_ORDER, \
}, \
struct lttng_event_field {
const char *name;
- const struct lttng_type type;
+ struct lttng_type type;
};
struct lttng_event_desc {
struct ltt_event {
unsigned int id;
struct ltt_channel *chan;
- const struct lttng_event_desc *desc;
+ struct lttng_event_desc *desc;
void *filter;
- enum instrum_type itype;
+ enum lttng_kernel_instrumentation instrumentation;
+ union {
+ struct {
+ struct kprobe kp;
+ char *symbol_name;
+ } kprobe;
+ } u;
struct list_head list; /* Event list */
int metadata_dumped:1;
};
struct ltt_channel_ops {
struct channel *(*channel_create)(const char *name,
- struct ltt_session *session,
+ struct ltt_channel *ltt_chan,
void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
unsigned int switch_timer_interval,
void (*event_commit)(struct lib_ring_buffer_ctx *ctx);
void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src,
size_t len);
+ /*
+ * packet_avail_size returns the available size in the current
+ * packet. Note that the size returned is only a hint, since it
+ * may change due to concurrent writes.
+ */
+ size_t (*packet_avail_size)(struct channel *chan);
wait_queue_head_t *(*get_reader_wait_queue)(struct ltt_channel *chan);
};
struct list_head list; /* Channel list */
wait_queue_head_t notify_wait; /* Channel addition notif. waitqueue */
struct ltt_channel_ops *ops;
+ int header_type; /* 0: unset, 1: compact, 2: large */
int metadata_dumped:1;
- int header_type:2; /* 0: unset, 1: compact, 2: large */
};
struct ltt_session {
struct list_head events; /* Event list head */
struct list_head list; /* Session list */
unsigned int free_chan_id; /* Next chan ID to allocate */
+ uuid_le uuid; /* Trace session unique ID */
int metadata_dumped:1;
};
struct ltt_event *ltt_event_create(struct ltt_channel *chan,
char *name,
- enum instrum_type itype,
+ struct lttng_kernel_event *event_param,
const struct lttng_event_desc *event_desc,
void *filter);
-int _ltt_event_unregister(struct ltt_event *event);
-void _ltt_event_destroy(struct ltt_event *event);
+int ltt_event_unregister(struct ltt_event *event);
void ltt_transport_register(struct ltt_transport *transport);
void ltt_transport_unregister(struct ltt_transport *transport);
int ltt_probes_init(void);
void ltt_probes_exit(void);
+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);
+
#endif /* _LTT_EVENTS_H */