+static
+void register_event(struct lttng_event *event)
+{
+ int ret;
+ const struct lttng_event_desc *desc;
+
+ assert(event->registered == 0);
+ desc = event->desc;
+ ret = __tracepoint_probe_register(desc->name,
+ desc->probe_callback,
+ event, desc->signature);
+ WARN_ON_ONCE(ret);
+ if (!ret)
+ event->registered = 1;
+}
+
+static
+void unregister_event(struct lttng_event *event)
+{
+ int ret;
+ const struct lttng_event_desc *desc;
+
+ assert(event->registered == 1);
+ desc = event->desc;
+ ret = __tracepoint_probe_unregister(desc->name,
+ desc->probe_callback,
+ event);
+ WARN_ON_ONCE(ret);
+ if (!ret)
+ event->registered = 0;
+}
+
+/*
+ * Only used internally at session destruction.
+ */
+static
+void _lttng_event_unregister(struct lttng_event *event)
+{
+ if (event->registered)
+ unregister_event(event);
+}
+