Comment buffer creation behavior wrt packet headers
[lttng-modules.git] / ltt-events.c
index 5c4ebb16ee2c236c9a49d4bb7a3a15cf8c0601a9..17d87095c5a1b4bea0c15f9e8906fcb7bab47992 100644 (file)
@@ -169,12 +169,17 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session,
                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
+        * headers. Therefore the "chan" information used as input
+        * should be already accessible.
+        */
        chan->chan = transport->ops.channel_create("[lttng]", chan, buf_addr,
                        subbuf_size, num_subbuf, switch_timer_interval,
                        read_timer_interval);
        if (!chan->chan)
                goto create_error;
-       chan->id = session->free_chan_id++;
        chan->ops = &transport->ops;
        list_add(&chan->list, &session->chan);
        mutex_unlock(&sessions_mutex);
@@ -203,7 +208,7 @@ void _ltt_channel_destroy(struct ltt_channel *chan)
 /*
  * Supports event creation while tracing session is active.
  */
-struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
+struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                                   struct lttng_kernel_event *event_param,
                                   void *filter)
 {
@@ -218,7 +223,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
         * creation). Might require a hash if we have lots of events.
         */
        list_for_each_entry(event, &chan->session->events, list)
-               if (!strcmp(event->desc->name, name))
+               if (!strcmp(event->desc->name, event_param->name))
                        goto exist;
        event = kmem_cache_zalloc(event_cache, GFP_KERNEL);
        if (!event)
@@ -231,17 +236,17 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
        smp_wmb();
        switch (event_param->instrumentation) {
        case LTTNG_KERNEL_TRACEPOINTS:
-               event->desc = ltt_event_get(name);
+               event->desc = ltt_event_get(event_param->name);
                if (!event->desc)
                        goto register_error;
-               ret = tracepoint_probe_register(name,
+               ret = tracepoint_probe_register(event_param->name,
                                event->desc->probe_callback,
                                event);
                if (ret)
                        goto register_error;
                break;
        case LTTNG_KERNEL_KPROBES:
-               ret = lttng_kprobes_register(name,
+               ret = lttng_kprobes_register(event_param->name,
                                event_param->u.kprobe.symbol_name,
                                event_param->u.kprobe.offset,
                                event_param->u.kprobe.addr,
@@ -250,7 +255,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
                        goto register_error;
                break;
        case LTTNG_KERNEL_FUNCTION_TRACER:
-               ret = lttng_ftrace_register(name,
+               ret = lttng_ftrace_register(event_param->name,
                                event_param->u.ftrace.symbol_name,
                                event);
                if (ret)
@@ -267,7 +272,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
        return event;
 
 statedump_error:
-       WARN_ON_ONCE(tracepoint_probe_unregister(name,
+       WARN_ON_ONCE(tracepoint_probe_unregister(event_param->name,
                                event->desc->probe_callback,
                                event));
        ltt_event_put(event->desc);
@@ -362,7 +367,7 @@ int lttng_metadata_printf(struct ltt_session *session,
                 */
                waitret = wait_event_interruptible_timeout(*chan->ops->get_reader_wait_queue(chan),
                        ({
-                               ret = chan->ops->event_reserve(&ctx);
+                               ret = chan->ops->event_reserve(&ctx, 0);
                                ret != -ENOBUFS || !ret;
                        }),
                        msecs_to_jiffies(LTTNG_METADATA_TIMEOUT_MSEC));
@@ -522,7 +527,7 @@ int _ltt_event_metadata_statedump(struct ltt_session *session,
                "       name = %s;\n"
                "       id = %u;\n"
                "       stream_id = %u;\n"
-               "       event.fields := struct {\n",
+               "       fields := struct {\n",
                event->desc->name,
                event->id,
                event->chan->id);
@@ -589,7 +594,7 @@ int _ltt_stream_packet_context_declare(struct ltt_session *session)
                "       uint32_t content_size;\n"
                "       uint32_t packet_size;\n"
                "       uint32_t cpu_id;\n"
-               "};\n"
+               "};\n\n"
                );
 }
 
@@ -642,7 +647,8 @@ int _ltt_event_header_declare(struct ltt_session *session)
 static
 int _ltt_session_metadata_statedump(struct ltt_session *session)
 {
-       char uuid_s[37];
+       unsigned char *uuid_c = session->uuid.b;
+       unsigned char uuid_s[37];
        struct ltt_channel *chan;
        struct ltt_event *event;
        int ret = 0;
@@ -657,11 +663,11 @@ int _ltt_session_metadata_statedump(struct ltt_session *session)
        }
 
        snprintf(uuid_s, sizeof(uuid_s),
-               "%x%x%x%x-%x%x-%x%x-%x%x-%x%x%x%x%x%x",
-               uuid_s[0], uuid_s[1], uuid_s[2], uuid_s[3],
-               uuid_s[4], uuid_s[5], uuid_s[6], uuid_s[7],
-               uuid_s[8], uuid_s[9], uuid_s[10], uuid_s[11],
-               uuid_s[12], uuid_s[13], uuid_s[14], uuid_s[15]);
+               "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+               uuid_c[0], uuid_c[1], uuid_c[2], uuid_c[3],
+               uuid_c[4], uuid_c[5], uuid_c[6], uuid_c[7],
+               uuid_c[8], uuid_c[9], uuid_c[10], uuid_c[11],
+               uuid_c[12], uuid_c[13], uuid_c[14], uuid_c[15]);
 
        ret = lttng_metadata_printf(session,
                "typealias integer { size = 8; align = %u; signed = false; } := uint8_t;\n"
@@ -674,7 +680,7 @@ int _ltt_session_metadata_statedump(struct ltt_session *session)
                "trace {\n"
                "       major = %u;\n"
                "       minor = %u;\n"
-               "       uuid = %s;\n"
+               "       uuid = \"%s\";\n"
                "       byte_order = %s;\n"
                "       packet.header := struct {\n"
                "               uint32_t magic;\n"
@@ -714,7 +720,7 @@ skip_session:
        }
 
        list_for_each_entry(event, &session->events, list) {
-               ret = _ltt_event_metadata_statedump(session, chan, event);
+               ret = _ltt_event_metadata_statedump(session, event->chan, event);
                if (ret)
                        goto end;
        }
This page took 0.02597 seconds and 4 git commands to generate.