X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=include%2Fust%2Flttng-events.h;h=303d0dafc0a9d6393bb25ff8ff12b789c1e26455;hb=8165c8da23fb8a3395d7e829f3d5734e18dd7db9;hp=743ff161953e1629f13ae0ac525d0e50bdea71a8;hpb=0a42beb627df1b9ea5cce4b1908e8a9cefaa1631;p=lttng-ust.git diff --git a/include/ust/lttng-events.h b/include/ust/lttng-events.h index 743ff161..303d0daf 100644 --- a/include/ust/lttng-events.h +++ b/include/ust/lttng-events.h @@ -15,9 +15,9 @@ #include #include #include - -#undef is_signed_type -#define is_signed_type(type) (((type)(-1)) < 0) +#include +#include +#include struct ltt_channel; struct ltt_session; @@ -32,6 +32,7 @@ enum abstract_types { atype_array, atype_sequence, atype_string, + atype_float, NR_ABSTRACT_TYPES, }; @@ -54,8 +55,8 @@ struct lttng_enum_entry { .u.basic.integer = \ { \ .size = sizeof(_type) * CHAR_BIT, \ - .alignment = ltt_alignof(_type) * CHAR_BIT, \ - .signedness = is_signed_type(_type), \ + .alignment = lttng_alignof(_type) * CHAR_BIT, \ + .signedness = lttng_is_signed_type(_type), \ .reverse_byte_order = _byte_order != __BYTE_ORDER, \ .base = _base, \ .encoding = lttng_encode_##_encoding, \ @@ -71,6 +72,32 @@ struct lttng_integer_type { enum lttng_string_encodings encoding; }; +#define _float_mant_dig(_type) \ + (sizeof(_type) == sizeof(float) ? FLT_MANT_DIG \ + : (sizeof(_type) == sizeof(double) ? DBL_MANT_DIG \ + : (sizeof(_type) == sizeof(long double) ? LDBL_MANT_DIG \ + : 0))) + +#define __type_float(_type) \ + { \ + .atype = atype_float, \ + .u.basic._float = \ + { \ + .exp_dig = sizeof(_type) * CHAR_BIT \ + - _float_mant_dig(_type), \ + .mant_dig = _float_mant_dig(_type), \ + .alignment = lttng_alignof(_type) * CHAR_BIT, \ + .reverse_byte_order = __BYTE_ORDER != __FLOAT_WORD_ORDER, \ + }, \ + } \ + +struct lttng_float_type { + unsigned int exp_dig; /* exponent digits, in bits */ + unsigned int mant_dig; /* mantissa digits, in bits */ + unsigned short alignment; /* in bits */ + unsigned int reverse_byte_order:1; +}; + union _lttng_basic_type { struct lttng_integer_type integer; struct { @@ -79,6 +106,7 @@ union _lttng_basic_type { struct { enum lttng_string_encodings encoding; } string; + struct lttng_float_type _float; }; struct lttng_basic_type { @@ -148,6 +176,8 @@ struct lttng_probe_desc { struct cds_list_head head; /* chain registered probes */ }; +struct ust_pending_probe; + /* * ltt_event structure is referred to by the tracing fast path. It must be * kept small. @@ -163,20 +193,25 @@ struct ltt_event { union { } u; struct cds_list_head list; /* Event list */ + struct ust_pending_probe *pending_probe; int metadata_dumped:1; }; +struct channel; +struct shm_handle; + struct ltt_channel_ops { - struct channel *(*channel_create)(const char *name, + struct ltt_channel *(*channel_create)(const char *name, struct ltt_channel *ltt_chan, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, - unsigned int read_timer_interval, - int *shmid); - void (*channel_destroy)(struct channel *chan); - struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan); - void (*buffer_read_close)(struct lib_ring_buffer *buf); + unsigned int read_timer_interval); + void (*channel_destroy)(struct ltt_channel *ltt_chan); + struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan, + struct shm_handle *handle); + void (*buffer_read_close)(struct lib_ring_buffer *buf, + struct shm_handle *handle); int (*event_reserve)(struct lib_ring_buffer_ctx *ctx, uint32_t event_id); void (*event_commit)(struct lib_ring_buffer_ctx *ctx); @@ -187,7 +222,8 @@ struct ltt_channel_ops { * 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); + size_t (*packet_avail_size)(struct channel *chan, + struct shm_handle *handle); //wait_queue_head_t *(*get_reader_wait_queue)(struct channel *chan); //wait_queue_head_t *(*get_hp_wait_queue)(struct channel *chan); int (*is_finalized)(struct channel *chan); @@ -203,10 +239,11 @@ struct ltt_channel { struct ltt_session *session; int objd; /* Object associated to channel */ unsigned int free_event_id; /* Next event ID to allocate */ + unsigned int used_event_id; /* Max allocated event IDs */ struct cds_list_head list; /* Channel list */ struct ltt_channel_ops *ops; int header_type; /* 0: unset, 1: compact, 2: large */ - int shmid; /* shared memory ID */ + struct shm_handle *handle; /* shared-memory handle */ int metadata_dumped:1; }; @@ -264,6 +301,7 @@ void synchronize_trace(void); int ltt_probe_register(struct lttng_probe_desc *desc); void ltt_probe_unregister(struct lttng_probe_desc *desc); +int pending_probe_fix_events(const struct lttng_event_desc *desc); const struct lttng_event_desc *ltt_event_get(const char *name); void ltt_event_put(const struct lttng_event_desc *desc); int ltt_probes_init(void);