Fix: unregister cpu hotplug notifier on buffer alloc error
[lttng-modules.git] / lttng-events.c
index f2a9a8a58498f1f1a833e8ec1b97e76093391982..176908bf6d2a4587d1d341e0e9126311a4970a00 100644 (file)
@@ -213,6 +213,16 @@ void lttng_session_destroy(struct lttng_session *session)
        kfree(session);
 }
 
+int lttng_session_statedump(struct lttng_session *session)
+{
+       int ret;
+
+       mutex_lock(&sessions_mutex);
+       ret = lttng_statedump_start(session);
+       mutex_unlock(&sessions_mutex);
+       return ret;
+}
+
 int lttng_session_enable(struct lttng_session *session)
 {
        int ret = 0;
@@ -244,8 +254,10 @@ int lttng_session_enable(struct lttng_session *session)
        lttng_session_sync_enablers(session);
 
        /* Clear each stream's quiescent state. */
-       list_for_each_entry(chan, &session->chan, list)
-               lib_ring_buffer_clear_quiescent_channel(chan->chan);
+       list_for_each_entry(chan, &session->chan, list) {
+               if (chan->channel_type != METADATA_CHANNEL)
+                       lib_ring_buffer_clear_quiescent_channel(chan->chan);
+       }
 
        ACCESS_ONCE(session->active) = 1;
        ACCESS_ONCE(session->been_active) = 1;
@@ -279,8 +291,10 @@ int lttng_session_disable(struct lttng_session *session)
        lttng_session_sync_enablers(session);
 
        /* Set each stream's quiescent state. */
-       list_for_each_entry(chan, &session->chan, list)
-               lib_ring_buffer_set_quiescent_channel(chan->chan);
+       list_for_each_entry(chan, &session->chan, list) {
+               if (chan->channel_type != METADATA_CHANNEL)
+                       lib_ring_buffer_set_quiescent_channel(chan->chan);
+       }
 end:
        mutex_unlock(&sessions_mutex);
        return ret;
@@ -1895,7 +1909,7 @@ int _lttng_enum_statedump(struct lttng_session *session,
        if (ret)
                goto end;
        ret = lttng_metadata_printf(session,
-               "enum : integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u; } {\n",
+               "enum : integer { size = %u; align = %u; signed = %u; encoding = %s; base = %u;%s } {\n",
                container_type->size,
                container_type->alignment,
                container_type->signedness,
@@ -1904,7 +1918,13 @@ int _lttng_enum_statedump(struct lttng_session *session,
                        : (container_type->encoding == lttng_encode_UTF8)
                                ? "UTF8"
                                : "ASCII",
-               container_type->base);
+               container_type->base,
+#if __BYTE_ORDER == __BIG_ENDIAN
+               container_type->reverse_byte_order ? " byte_order = le;" : ""
+#else
+               container_type->reverse_byte_order ? " byte_order = be;" : ""
+#endif
+               );
        if (ret)
                goto end;
        /* Dump all entries */
@@ -1941,33 +1961,46 @@ int _lttng_enum_statedump(struct lttng_session *session,
                        if (ret)
                                goto end;
                }
-               ret = lttng_metadata_printf(session,
-                               "\" = ");
-               if (ret)
-                       goto end;
-               if (entry->start.signedness)
-                       ret = lttng_metadata_printf(session,
-                               "%lld", (long long) entry->start.value);
-               else
-                       ret = lttng_metadata_printf(session,
-                               "%llu", entry->start.value);
+               ret = lttng_metadata_printf(session, "\"");
                if (ret)
                        goto end;
-               if (entry->start.signedness == entry->end.signedness &&
-                               entry->start.value == entry->end.value) {
-                       ret = lttng_metadata_printf(session,
-                               ",\n");
+
+               if (entry->options.is_auto) {
+                       ret = lttng_metadata_printf(session, ",\n");
+                       if (ret)
+                               goto end;
                } else {
-                       if (entry->end.signedness) {
+                       ret = lttng_metadata_printf(session,
+                                       " = ");
+                       if (ret)
+                               goto end;
+                       if (entry->start.signedness)
                                ret = lttng_metadata_printf(session,
-                                       " ... %lld,\n", (long long) entry->end.value);
-                       } else {
+                                       "%lld", (long long) entry->start.value);
+                       else
                                ret = lttng_metadata_printf(session,
-                                       " ... %llu,\n", entry->end.value);
+                                       "%llu", entry->start.value);
+                       if (ret)
+                               goto end;
+                       if (entry->start.signedness == entry->end.signedness &&
+                                       entry->start.value
+                                               == entry->end.value) {
+                               ret = lttng_metadata_printf(session,
+                                       ",\n");
+                       } else {
+                               if (entry->end.signedness) {
+                                       ret = lttng_metadata_printf(session,
+                                               " ... %lld,\n",
+                                               (long long) entry->end.value);
+                               } else {
+                                       ret = lttng_metadata_printf(session,
+                                               " ... %llu,\n",
+                                               entry->end.value);
+                               }
                        }
+                       if (ret)
+                               goto end;
                }
-               if (ret)
-                       goto end;
        }
        ret = print_tabs(session, nesting);
        if (ret)
@@ -2388,7 +2421,7 @@ int64_t measure_clock_offset(void)
        /* Disable interrupts to increase correlation precision. */
        local_irq_save(flags);
        monotonic[0] = trace_clock_read64();
-       getnstimeofday(&rts);      
+       getnstimeofday(&rts);
        monotonic[1] = trace_clock_read64();
        local_irq_restore(flags);
 
This page took 0.045009 seconds and 4 git commands to generate.