X-Git-Url: http://git.lttng.org/?p=lttng-modules.git;a=blobdiff_plain;f=lttng-events.h;h=46d80bcdb0edcd1a6d3599e7f630f240ecb28b0f;hp=35806a919f3d68aefa6a565e9378359da71cf7eb;hb=b3c40230ad700b12c39640d8593aece428a2702b;hpb=c337ddc219f608d4d35f461bdc9d2246324d6708 diff --git a/lttng-events.h b/lttng-events.h index 35806a91..46d80bcd 100644 --- a/lttng-events.h +++ b/lttng-events.h @@ -4,23 +4,38 @@ /* * lttng-events.h * - * Copyright 2010-2011 (c) - Mathieu Desnoyers - * * Holds LTTng per-session event registry. * - * Dual LGPL v2.1/GPL v2 license. + * Copyright (C) 2010-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include +#include #include "wrapper/uuid.h" #include "lttng-abi.h" +#include "lttng-abi-old.h" -#undef is_signed_type -#define is_signed_type(type) (((type)(-1)) < 0) +#define lttng_is_signed_type(type) (((type)(-1)) < 0) struct lttng_channel; struct lttng_session; +struct lttng_metadata_cache; struct lib_ring_buffer_ctx; struct perf_event; struct perf_event_attr; @@ -45,6 +60,11 @@ enum lttng_string_encodings { NR_STRING_ENCODINGS, }; +enum channel_type { + PER_CPU_CHANNEL, + METADATA_CHANNEL, +}; + struct lttng_enum_entry { unsigned long long start, end; /* start and end are inclusive */ const char *string; @@ -57,7 +77,7 @@ struct lttng_enum_entry { { \ .size = sizeof(_type) * CHAR_BIT, \ .alignment = lttng_alignof(_type) * CHAR_BIT, \ - .signedness = is_signed_type(_type), \ + .signedness = lttng_is_signed_type(_type), \ .reverse_byte_order = _byte_order != __BYTE_ORDER, \ .base = _base, \ .encoding = lttng_encode_##_encoding, \ @@ -251,43 +271,68 @@ struct lttng_channel { struct lttng_event *sc_compat_unknown; struct lttng_event *sc_exit; /* for syscall exit */ int header_type; /* 0: unset, 1: compact, 2: large */ + enum channel_type channel_type; unsigned int metadata_dumped:1; }; +struct lttng_metadata_stream { + void *priv; /* Ring buffer private data */ + struct lttng_metadata_cache *metadata_cache; + unsigned int metadata_cache_read; /* Bytes read from the cache */ + int finalized; /* Has channel been finalized */ + wait_queue_head_t read_wait; /* Reader buffer-level wait queue */ + struct list_head list; /* Stream list */ +}; + struct lttng_session { int active; /* Is trace session active ? */ int been_active; /* Has trace session been active ? */ struct file *file; /* File associated to session */ - struct lttng_channel *metadata; /* Metadata channel */ struct list_head chan; /* Channel list head */ 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 */ + struct lttng_metadata_cache *metadata_cache; unsigned int metadata_dumped:1; }; +struct lttng_metadata_cache { + char *data; /* Metadata cache */ + unsigned int cache_alloc; /* Metadata allocated size (bytes) */ + unsigned int metadata_written; /* Number of bytes written in metadata cache */ + struct kref refcount; /* Metadata cache usage */ + struct list_head metadata_stream; /* Metadata stream list */ +}; + struct lttng_session *lttng_session_create(void); int lttng_session_enable(struct lttng_session *session); int lttng_session_disable(struct lttng_session *session); void lttng_session_destroy(struct lttng_session *session); +void metadata_cache_destroy(struct kref *kref); struct lttng_channel *lttng_channel_create(struct lttng_session *session, const char *transport_name, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, - unsigned int read_timer_interval); + unsigned int read_timer_interval, + enum channel_type channel_type); struct lttng_channel *lttng_global_channel_create(struct lttng_session *session, int overwrite, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, unsigned int read_timer_interval); +void lttng_metadata_channel_destroy(struct lttng_channel *chan); struct lttng_event *lttng_event_create(struct lttng_channel *chan, struct lttng_kernel_event *event_param, void *filter, const struct lttng_event_desc *internal_desc); +struct lttng_event *lttng_event_compat_old_create(struct lttng_channel *chan, + struct lttng_kernel_old_event *old_event_param, + void *filter, + const struct lttng_event_desc *internal_desc); int lttng_channel_enable(struct lttng_channel *channel); int lttng_channel_disable(struct lttng_channel *channel); @@ -299,7 +344,9 @@ void lttng_transport_unregister(struct lttng_transport *transport); void synchronize_trace(void); int lttng_abi_init(void); +int lttng_abi_compat_old_init(void); void lttng_abi_exit(void); +void lttng_abi_compat_old_exit(void); int lttng_probe_register(struct lttng_probe_desc *desc); void lttng_probe_unregister(struct lttng_probe_desc *desc); @@ -308,7 +355,10 @@ void lttng_event_put(const struct lttng_event_desc *desc); int lttng_probes_init(void); void lttng_probes_exit(void); -#ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS +int lttng_metadata_output_channel(struct lttng_channel *chan, + struct lttng_metadata_stream *stream); + +#if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS) int lttng_syscalls_register(struct lttng_channel *chan, void *filter); int lttng_syscalls_unregister(struct lttng_channel *chan); #else @@ -337,6 +387,7 @@ int lttng_add_tid_to_ctx(struct lttng_ctx **ctx); int lttng_add_vtid_to_ctx(struct lttng_ctx **ctx); int lttng_add_ppid_to_ctx(struct lttng_ctx **ctx); int lttng_add_vppid_to_ctx(struct lttng_ctx **ctx); +int lttng_add_hostname_to_ctx(struct lttng_ctx **ctx); #if defined(CONFIG_PERF_EVENTS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) int lttng_add_perf_counter_to_ctx(uint32_t type, uint64_t config,