X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt-events.c;h=42d486c195d73c8cdfd265b6a54a5d2bd20950ec;hb=c6485006a92b1b86fbb48c2b277732d3405295c9;hp=40e8e459183efacae2744fcc6a6071bd9625e5b1;hpb=d01202ff1f043dd04f62ab77aacea3c26cb65eb3;p=lttng-modules.git diff --git a/ltt-events.c b/ltt-events.c index 40e8e459..42d486c1 100644 --- a/ltt-events.c +++ b/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,54 @@ end: return ret; } +int ltt_channel_enable(struct ltt_channel *channel) +{ + int old; + + if (channel == channel->session->metadata) + return -EPERM; + old = xchg(&channel->enabled, 1); + if (old) + return -EEXIST; + return 0; +} + +int ltt_channel_disable(struct ltt_channel *channel) +{ + int old; + + if (channel == channel->session->metadata) + return -EPERM; + old = xchg(&channel->enabled, 0); + if (!old) + return -EEXIST; + return 0; +} + +int ltt_event_enable(struct ltt_event *event) +{ + int old; + + if (event->chan == event->chan->session->metadata) + return -EPERM; + old = xchg(&event->enabled, 1); + if (old) + return -EEXIST; + return 0; +} + +int ltt_event_disable(struct ltt_event *event) +{ + int old; + + if (event->chan == event->chan->session->metadata) + return -EPERM; + 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 +228,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 +281,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();