detailed syscall tracing (work in progress)
[lttng-modules.git] / ltt-events.c
index 9c4ba27bc2300012ebbfa1a631451e01d0f3db18..c64c20368aa6ec07b4afa6a8b08e9a27ba5ad6af 100644 (file)
@@ -66,6 +66,10 @@ void ltt_session_destroy(struct ltt_session *session)
 
        mutex_lock(&sessions_mutex);
        ACCESS_ONCE(session->active) = 0;
+       list_for_each_entry(chan, &session->chan, list) {
+               ret = lttng_syscalls_unregister(chan);
+               WARN_ON(ret);
+       }
        list_for_each_entry(event, &session->events, list) {
                ret = _ltt_event_unregister(event);
                WARN_ON(ret);
@@ -262,7 +266,8 @@ void _ltt_channel_destroy(struct ltt_channel *chan)
  */
 struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                                   struct lttng_kernel_event *event_param,
-                                  void *filter)
+                                  void *filter,
+                                  const struct lttng_event_desc *internal_desc)
 {
        struct ltt_event *event;
        int ret;
@@ -361,6 +366,11 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                ret = try_module_get(event->desc->owner);
                WARN_ON_ONCE(!ret);
                break;
+       case LTTNG_KERNEL_NOOP:
+               event->desc = internal_desc;
+               if (!event->desc)
+                       goto register_error;
+               break;
        default:
                WARN_ON_ONCE(1);
        }
@@ -372,10 +382,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan,
        return event;
 
 statedump_error:
-       WARN_ON_ONCE(tracepoint_probe_unregister(event_param->name,
-                               event->desc->probe_callback,
-                               event));
-       ltt_event_put(event->desc);
+       /* If a statedump error occurs, events will not be readable. */
 register_error:
        kmem_cache_free(event_cache, event);
 cache_error:
@@ -412,6 +419,9 @@ int _ltt_event_unregister(struct ltt_event *event)
                lttng_ftrace_unregister(event);
                ret = 0;
                break;
+       case LTTNG_KERNEL_NOOP:
+               ret = 0;
+               break;
        default:
                WARN_ON_ONCE(1);
        }
@@ -440,6 +450,8 @@ void _ltt_event_destroy(struct ltt_event *event)
                module_put(event->desc->owner);
                lttng_ftrace_destroy_private(event);
                break;
+       case LTTNG_KERNEL_NOOP:
+               break;
        default:
                WARN_ON_ONCE(1);
        }
@@ -487,7 +499,7 @@ int lttng_metadata_printf(struct ltt_session *session,
                 * we need to bail out after timeout or being
                 * interrupted.
                 */
-               waitret = wait_event_interruptible_timeout(*chan->ops->get_reader_wait_queue(chan->chan),
+               waitret = wait_event_interruptible_timeout(*chan->ops->get_writer_buf_wait_queue(chan->chan, -1),
                        ({
                                ret = chan->ops->event_reserve(&ctx, 0);
                                ret != -ENOBUFS || !ret;
This page took 0.027705 seconds and 4 git commands to generate.