Update readme
[lttng-modules.git] / ltt-events.c
index 40e8e459183efacae2744fcc6a6071bd9625e5b1..e9e076d802238bc07e1aef14e0bb4f1e2914df6b 100644 (file)
@@ -14,7 +14,7 @@
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/jiffies.h>
-#include <linux/uuid.h>
+#include "wrapper/uuid.h"
 #include "wrapper/vmalloc.h"   /* for wrapper_vmalloc_sync_all() */
 #include "ltt-events.h"
 #include "ltt-tracer.h"
@@ -34,8 +34,6 @@ int _ltt_event_metadata_statedump(struct ltt_session *session,
 static
 int _ltt_session_metadata_statedump(struct ltt_session *session);
 
-
-static
 void synchronize_trace(void)
 {
        synchronize_sched();
@@ -82,7 +80,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;
@@ -108,18 +106,15 @@ int ltt_session_start(struct ltt_session *session)
 
        ACCESS_ONCE(session->active) = 1;
        ACCESS_ONCE(session->been_active) = 1;
-       synchronize_trace();    /* Wait for in-flight events to complete */
        ret = _ltt_session_metadata_statedump(session);
-       if (ret) {
+       if (ret)
                ACCESS_ONCE(session->active) = 0;
-               synchronize_trace();    /* Wait for in-flight events to complete */
-       }
 end:
        mutex_unlock(&sessions_mutex);
        return ret;
 }
 
-int ltt_session_stop(struct ltt_session *session)
+int ltt_session_disable(struct ltt_session *session)
 {
        int ret = 0;
 
@@ -129,12 +124,59 @@ int ltt_session_stop(struct ltt_session *session)
                goto end;
        }
        ACCESS_ONCE(session->active) = 0;
-       synchronize_trace();    /* Wait for in-flight events to complete */
 end:
        mutex_unlock(&sessions_mutex);
        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 +222,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 +275,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();
This page took 0.024574 seconds and 4 git commands to generate.