Rename "tsc" to "timestamp"
[lttng-modules.git] / src / lttng-events.c
index 9d1861160936638d44e7f9134c37639f4b9e0901..a0bd232228c8dd6a3120134bce7cd16d2c5db33e 100644 (file)
@@ -23,7 +23,6 @@
 #include <linux/seq_file.h>
 #include <linux/file.h>
 #include <linux/anon_inodes.h>
-#include <wrapper/file.h>
 #include <linux/uaccess.h>
 #include <linux/vmalloc.h>
 #include <linux/dmi.h>
 #include <lttng/utils.h>
 #include <ringbuffer/backend.h>
 #include <ringbuffer/frontend.h>
-#include <wrapper/time.h>
+
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,16,0) \
+       || LTTNG_RHEL_KERNEL_RANGE(5,14,0,162,0,0, 5,15,0,0,0,0))
+#include <linux/stdarg.h>
+#else
+#include <stdarg.h>
+#endif
 
 #define METADATA_CACHE_DEFAULT_SIZE 4096
 
@@ -71,7 +76,7 @@ static void lttng_event_enabler_sync(struct lttng_event_enabler_common *event_en
 
 static void _lttng_event_destroy(struct lttng_kernel_event_common *event);
 static void _lttng_channel_destroy(struct lttng_kernel_channel_buffer *chan);
-static int _lttng_event_unregister(struct lttng_kernel_event_common *event);
+static void _lttng_event_unregister(struct lttng_kernel_event_common *event);
 static
 int _lttng_event_recorder_metadata_statedump(struct lttng_kernel_event_common *event);
 static
@@ -97,15 +102,9 @@ void synchronize_trace(void)
        synchronize_sched();
 #endif
 
-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0))
 #ifdef CONFIG_PREEMPT_RT_FULL
        synchronize_rcu();
 #endif
-#else /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */
-#ifdef CONFIG_PREEMPT_RT
-       synchronize_rcu();
-#endif
-#endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */
 }
 
 void lttng_lock_sessions(void)
@@ -360,10 +359,8 @@ void lttng_session_destroy(struct lttng_kernel_session *session)
                ret = lttng_syscalls_unregister_syscall_table(&chan_priv->parent.syscall_table);
                WARN_ON(ret);
        }
-       list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node) {
-               ret = _lttng_event_unregister(&event_recorder_priv->pub->parent);
-               WARN_ON(ret);
-       }
+       list_for_each_entry(event_recorder_priv, &session->priv->events, parent.node)
+               _lttng_event_unregister(&event_recorder_priv->pub->parent);
        synchronize_trace();    /* Wait for in-flight events to complete */
        list_for_each_entry(chan_priv, &session->priv->chan, node) {
                ret = lttng_syscalls_destroy_syscall_table(&chan_priv->parent.syscall_table);
@@ -410,10 +407,8 @@ void lttng_event_notifier_group_destroy(
        WARN_ON(ret);
 
        list_for_each_entry_safe(event_notifier_priv, tmpevent_notifier_priv,
-                       &event_notifier_group->event_notifiers_head, parent.node) {
-               ret = _lttng_event_unregister(&event_notifier_priv->pub->parent);
-               WARN_ON(ret);
-       }
+                       &event_notifier_group->event_notifiers_head, parent.node)
+               _lttng_event_unregister(&event_notifier_priv->pub->parent);
 
        /* Wait for in-flight event notifier to complete */
        synchronize_trace();
@@ -1268,10 +1263,6 @@ struct lttng_kernel_event_common *_lttng_kernel_event_create(struct lttng_event_
                WARN_ON_ONCE(!ret);
                break;
 
-       case LTTNG_KERNEL_ABI_FUNCTION:
-               lttng_fallthrough;
-       case LTTNG_KERNEL_ABI_NOOP:
-               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -1337,20 +1328,19 @@ int lttng_kernel_counter_clear(struct lttng_counter *counter,
        return counter->ops->counter_clear(counter->counter, dim_indexes);
 }
 
-/* Only used for tracepoints for now. */
+/* Only used for tracepoints and system calls for now. */
 static
 void register_event(struct lttng_kernel_event_common *event)
 {
        const struct lttng_kernel_event_desc *desc;
        int ret = -EINVAL;
 
-       if (event->priv->registered)
-               return;
+       WARN_ON_ONCE(event->priv->registered);
 
        desc = event->priv->desc;
        switch (event->priv->instrumentation) {
        case LTTNG_KERNEL_ABI_TRACEPOINT:
-               ret = lttng_wrapper_tracepoint_probe_register(desc->event_kname,
+               ret = lttng_tracepoint_probe_register(desc->event_kname,
                                                  desc->tp_class->probe_callback,
                                                  event);
                break;
@@ -1383,23 +1373,24 @@ void register_event(struct lttng_kernel_event_common *event)
        default:
                WARN_ON_ONCE(1);
        }
+       WARN_ON_ONCE(ret);
        if (!ret)
                event->priv->registered = 1;
 }
 
-int _lttng_event_unregister(struct lttng_kernel_event_common *event)
+static
+void unregister_event(struct lttng_kernel_event_common *event)
 {
        struct lttng_kernel_event_common_private *event_priv = event->priv;
        const struct lttng_kernel_event_desc *desc;
        int ret = -EINVAL;
 
-       if (!event_priv->registered)
-               return 0;
+       WARN_ON_ONCE(!event->priv->registered);
 
        desc = event_priv->desc;
        switch (event_priv->instrumentation) {
        case LTTNG_KERNEL_ABI_TRACEPOINT:
-               ret = lttng_wrapper_tracepoint_probe_unregister(event_priv->desc->event_kname,
+               ret = lttng_tracepoint_probe_unregister(event_priv->desc->event_kname,
                                                  event_priv->desc->tp_class->probe_callback,
                                                  event);
                break;
@@ -1446,9 +1437,16 @@ int _lttng_event_unregister(struct lttng_kernel_event_common *event)
        default:
                WARN_ON_ONCE(1);
        }
+       WARN_ON_ONCE(ret);
        if (!ret)
                event_priv->registered = 0;
-       return ret;
+}
+
+static
+void _lttng_event_unregister(struct lttng_kernel_event_common *event)
+{
+       if (event->priv->registered)
+               unregister_event(event);
 }
 
 /*
@@ -1764,7 +1762,7 @@ int lttng_session_list_tracker_ids(struct lttng_kernel_session *session,
        struct seq_file *m;
        int file_fd, ret;
 
-       file_fd = lttng_get_unused_fd();
+       file_fd = get_unused_fd_flags(0);
        if (file_fd < 0) {
                ret = file_fd;
                goto fd_error;
@@ -2063,7 +2061,7 @@ struct lttng_enabler_ref *lttng_enabler_ref(
 }
 
 static
-void lttng_create_tracepoint_event_if_missing(struct lttng_event_enabler_common *event_enabler)
+void lttng_event_enabler_create_tracepoint_events_if_missing(struct lttng_event_enabler_common *event_enabler)
 {
        struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(event_enabler);
        struct lttng_kernel_probe_desc *probe_desc;
@@ -2079,7 +2077,7 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_enabler_common
         */
        list_for_each_entry(probe_desc, probe_list, head) {
                for (i = 0; i < probe_desc->nr_events; i++) {
-                       int found = 0;
+                       bool found = false;
                        struct hlist_head *head;
                        struct lttng_kernel_event_common *event;
                        struct lttng_kernel_event_common_private *event_priv;
@@ -2093,8 +2091,10 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_enabler_common
                         */
                        head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name);
                        lttng_hlist_for_each_entry(event_priv, head, hlist_node) {
-                               if (lttng_event_enabler_desc_match_event(event_enabler, desc, event_priv->pub))
-                                       found = 1;
+                               if (lttng_event_enabler_desc_match_event(event_enabler, desc, event_priv->pub)) {
+                                       found = true;
+                                       break;
+                               }
                        }
                        if (found)
                                continue;
@@ -2103,7 +2103,7 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_enabler_common
                         * We need to create an event for this event probe.
                         */
                        event = _lttng_kernel_event_create(event_enabler, desc);
-                       if (!event) {
+                       if (IS_ERR(event)) {
                                printk(KERN_INFO "LTTng: Unable to create event %s\n",
                                        probe_desc->event_desc[i]->event_name);
                        }
@@ -2111,29 +2111,23 @@ void lttng_create_tracepoint_event_if_missing(struct lttng_event_enabler_common
        }
 }
 
-static
-void lttng_create_syscall_event_if_missing(struct lttng_event_enabler_common *event_enabler)
-{
-       int ret;
-
-       ret = lttng_syscalls_register_event(event_enabler);
-       WARN_ON_ONCE(ret);
-}
-
 /*
  * Create event if it is missing and present in the list of tracepoint probes.
  * Should be called with sessions mutex held.
  */
 static
-void lttng_create_event_if_missing(struct lttng_event_enabler_common *event_enabler)
+void lttng_event_enabler_create_events_if_missing(struct lttng_event_enabler_common *event_enabler)
 {
+       int ret;
+
        switch (event_enabler->event_param.instrumentation) {
        case LTTNG_KERNEL_ABI_TRACEPOINT:
-               lttng_create_tracepoint_event_if_missing(event_enabler);
+               lttng_event_enabler_create_tracepoint_events_if_missing(event_enabler);
                break;
 
        case LTTNG_KERNEL_ABI_SYSCALL:
-               lttng_create_syscall_event_if_missing(event_enabler);
+               ret = lttng_event_enabler_create_syscall_events_if_missing(event_enabler);
+               WARN_ON_ONCE(ret);
                break;
 
        default:
@@ -2191,7 +2185,7 @@ int lttng_event_enabler_ref_events(struct lttng_event_enabler_common *event_enab
        lttng_syscall_table_set_wildcard_all(event_enabler);
 
        /* First ensure that probe events are created for this enabler. */
-       lttng_create_event_if_missing(event_enabler);
+       lttng_event_enabler_create_events_if_missing(event_enabler);
 
        /* Link the created event with its associated enabler. */
        list_for_each_entry(event_priv, event_list_head, node) {
@@ -2656,9 +2650,11 @@ void lttng_sync_event_list(struct list_head *event_enabler_list,
                 * Sync tracepoint registration with event enabled state.
                 */
                if (enabled) {
-                       register_event(event);
+                       if (!event_priv->registered)
+                               register_event(event);
                } else {
-                       _lttng_event_unregister(event);
+                       if (event_priv->registered)
+                               unregister_event(event);
                }
 
                lttng_event_sync_filter_state(event);
@@ -3686,20 +3682,12 @@ int64_t measure_clock_offset(void)
        uint64_t tcf = trace_clock_freq();
        int64_t offset;
        unsigned long flags;
-#ifdef LTTNG_KERNEL_HAS_TIMESPEC64
        struct timespec64 rts = { 0, 0 };
-#else
-       struct timespec rts = { 0, 0 };
-#endif
 
        /* Disable interrupts to increase correlation precision. */
        local_irq_save(flags);
        monotonic[0] = trace_clock_read64();
-#ifdef LTTNG_KERNEL_HAS_TIMESPEC64
        ktime_get_real_ts64(&rts);
-#else
-       getnstimeofday(&rts);
-#endif
        monotonic[1] = trace_clock_read64();
        local_irq_restore(flags);
 
@@ -4159,13 +4147,7 @@ static int __init lttng_events_init(void)
 {
        int ret;
 
-       ret = wrapper_lttng_fixup_sig(THIS_MODULE);
-       if (ret)
-               return ret;
        ret = wrapper_get_pfnblock_flags_mask_init();
-       if (ret)
-               return ret;
-       ret = wrapper_get_pageblock_flags_mask_init();
        if (ret)
                return ret;
        ret = lttng_probes_init();
This page took 0.027573 seconds and 4 git commands to generate.