X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt-events.c;h=a94e8f9a1dde6a6e315133e59c66e3659455f99d;hb=e64957da15e3652322dcf6a5389beb01901de8e6;hp=7c08def9d2d4d8935bd5393e832fcdea3ff83a30;hpb=8fefc8a2d93a06a032c7983cf621ab3fb0c2acde;p=lttng-modules.git diff --git a/ltt-events.c b/ltt-events.c index 7c08def9..a94e8f9a 100644 --- a/ltt-events.c +++ b/ltt-events.c @@ -4,6 +4,8 @@ * Copyright 2010 (c) - Mathieu Desnoyers * * Holds LTTng per-session event registry. + * + * Dual LGPL v2.1/GPL v2 license. */ #include @@ -80,7 +82,7 @@ void ltt_session_destroy(struct ltt_session *session) kfree(session); } -int ltt_session_start(struct ltt_session *session) +int ltt_session_enable(struct ltt_session *session) { int ret = 0; struct ltt_channel *chan; @@ -117,7 +119,7 @@ end: return ret; } -int ltt_session_stop(struct ltt_session *session) +int ltt_session_disable(struct ltt_session *session) { int ret = 0; @@ -133,6 +135,46 @@ end: return ret; } +int ltt_channel_enable(struct ltt_channel *channel) +{ + int old; + + old = xchg(&channel->enabled, 1); + if (old) + return -EEXIST; + return 0; +} + +int ltt_channel_disable(struct ltt_channel *channel) +{ + int old; + + old = xchg(&channel->enabled, 0); + if (!old) + return -EEXIST; + return 0; +} + +int ltt_event_enable(struct ltt_event *event) +{ + int old; + + old = xchg(&event->enabled, 1); + if (old) + return -EEXIST; + return 0; +} + +int ltt_event_disable(struct ltt_event *event) +{ + int old; + + old = xchg(&event->enabled, 0); + if (!old) + return -EEXIST; + return 0; +} + static struct ltt_transport *ltt_transport_find(const char *name) { struct ltt_transport *transport; @@ -167,7 +209,6 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session, if (!chan) goto nomem; chan->session = session; - init_waitqueue_head(&chan->notify_wait); chan->id = session->free_chan_id++; /* * Note: the channel creation op already writes into the packet @@ -179,6 +220,7 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session, read_timer_interval); if (!chan->chan) goto create_error; + chan->enabled = 1; chan->ops = &transport->ops; list_add(&chan->list, &session->chan); mutex_unlock(&sessions_mutex); @@ -231,6 +273,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, event->chan = chan; event->filter = filter; event->id = chan->free_event_id++; + event->enabled = 1; event->instrumentation = event_param->instrumentation; /* Populate ltt_event structure before tracepoint registration. */ smp_wmb(); @@ -383,7 +426,7 @@ int lttng_metadata_printf(struct ltt_session *session, * we need to bail out after timeout or being * interrupted. */ - waitret = wait_event_interruptible_timeout(*chan->ops->get_reader_wait_queue(chan), + waitret = wait_event_interruptible_timeout(*chan->ops->get_reader_wait_queue(chan->chan), ({ ret = chan->ops->event_reserve(&ctx, 0); ret != -ENOBUFS || !ret; @@ -397,7 +440,7 @@ int lttng_metadata_printf(struct ltt_session *session, ret = waitret; goto end; } - chan->ops->event_write(&ctx, &str[pos], len); + chan->ops->event_write(&ctx, &str[pos], reserve_len); chan->ops->event_commit(&ctx); } end: @@ -470,31 +513,34 @@ int _ltt_field_statedump(struct ltt_session *session, length_type = &field->type.u.sequence.length_type; ret = lttng_metadata_printf(session, " integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } __%s_length;\n", - " integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } %s[ __%s_length ];\n", length_type->u.basic.integer.size, - length_type->u.basic.integer.alignment, + (unsigned int) length_type->u.basic.integer.alignment, length_type->u.basic.integer.signedness, (length_type->u.basic.integer.encoding == lttng_encode_none) ? "none" - : (length_type->u.basic.integer.encoding == lttng_encode_UTF8) + : ((length_type->u.basic.integer.encoding == lttng_encode_UTF8) ? "UTF8" - : "ASCII", + : "ASCII"), length_type->u.basic.integer.base, #ifdef __BIG_ENDIAN length_type->u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", #else - length_type->u.basic.integer.reverse_byte_order -? " byte_order = be;" : "", + length_type->u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", #endif - field->name, + field->name); + if (ret) + return ret; + + ret = lttng_metadata_printf(session, + " integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } %s[ __%s_length ];\n", elem_type->u.basic.integer.size, - elem_type->u.basic.integer.alignment, + (unsigned int) elem_type->u.basic.integer.alignment, elem_type->u.basic.integer.signedness, (elem_type->u.basic.integer.encoding == lttng_encode_none) ? "none" - : (elem_type->u.basic.integer.encoding == lttng_encode_UTF8) + : ((elem_type->u.basic.integer.encoding == lttng_encode_UTF8) ? "UTF8" - : "ASCII", + : "ASCII"), elem_type->u.basic.integer.base, #ifdef __BIG_ENDIAN elem_type->u.basic.integer.reverse_byte_order ? " byte_order = le;" : "", @@ -502,8 +548,7 @@ int _ltt_field_statedump(struct ltt_session *session, elem_type->u.basic.integer.reverse_byte_order ? " byte_order = be;" : "", #endif field->name, - field->name - ); + field->name); break; } @@ -860,9 +905,6 @@ static int __init ltt_events_init(void) { int ret; - ret = wrapper_task_prio_init(); - if (ret) - return ret; event_cache = KMEM_CACHE(ltt_event, 0); if (!event_cache) return -ENOMEM;