From 976fe9eaae642a5263ec6d7a1572251fa81dbd2f Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 27 Jun 2011 12:04:33 -0400 Subject: [PATCH] Merge LTTng commit e64957da15e3652322dcf6a5389beb01901de8e6 Signed-off-by: Mathieu Desnoyers --- libust/ltt-events.c | 46 +++++++++++++++++++++++++++++++++++++++++++-- libust/ltt-events.h | 11 +++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/libust/ltt-events.c b/libust/ltt-events.c index 40e8e459..a94e8f9a 100644 --- a/libust/ltt-events.c +++ b/libust/ltt-events.c @@ -82,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; @@ -119,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; @@ -135,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; @@ -180,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); @@ -232,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(); diff --git a/libust/ltt-events.h b/libust/ltt-events.h index 05eff540..787868a9 100644 --- a/libust/ltt-events.h +++ b/libust/ltt-events.h @@ -164,6 +164,7 @@ struct lttng_probe_desc { struct ltt_event { unsigned int id; struct ltt_channel *chan; + int enabled; const struct lttng_event_desc *desc; void *filter; struct lttng_ctx *ctx; @@ -211,6 +212,7 @@ struct ltt_channel_ops { struct ltt_channel { unsigned int id; struct channel *chan; /* Channel buffers */ + int enabled; struct lttng_ctx *ctx; /* Event ID management */ struct ltt_session *session; @@ -243,8 +245,8 @@ struct ltt_transport { }; struct ltt_session *ltt_session_create(void); -int ltt_session_start(struct ltt_session *session); -int ltt_session_stop(struct ltt_session *session); +int ltt_session_enable(struct ltt_session *session); +int ltt_session_disable(struct ltt_session *session); void ltt_session_destroy(struct ltt_session *session); struct ltt_channel *ltt_channel_create(struct ltt_session *session, @@ -263,6 +265,11 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, struct lttng_kernel_event *event_param, void *filter); +int ltt_channel_enable(struct ltt_channel *channel); +int ltt_channel_disable(struct ltt_channel *channel); +int ltt_event_enable(struct ltt_event *event); +int ltt_event_disable(struct ltt_event *event); + void ltt_transport_register(struct ltt_transport *transport); void ltt_transport_unregister(struct ltt_transport *transport); -- 2.34.1