fix: use timespec64 on kernels that have it
[lttng-modules.git] / lttng-events.c
index 9ff8ac9912f5a20f296718b98b51176f8e310f1a..3d0ef98464cfdfa0c2bec1040b8b52159fa0dcf6 100644 (file)
@@ -56,6 +56,7 @@
 #include <wrapper/vzalloc.h>
 #include <wrapper/ringbuffer/backend.h>
 #include <wrapper/ringbuffer/frontend.h>
+#include <wrapper/time.h>
 
 #define METADATA_CACHE_DEFAULT_SIZE 4096
 
@@ -89,7 +90,12 @@ int _lttng_field_statedump(struct lttng_session *session,
 
 void synchronize_trace(void)
 {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0))
+       synchronize_rcu();
+#else
        synchronize_sched();
+#endif
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
 #ifdef CONFIG_PREEMPT_RT_FULL
        synchronize_rcu();
@@ -1117,8 +1123,8 @@ int lttng_session_list_tracker_pids(struct lttng_session *session)
                ret = PTR_ERR(tracker_pids_list_file);
                goto file_error;
        }
-       if (atomic_long_add_unless(&session->file->f_count,
-               1, INT_MAX) == INT_MAX) {
+       if (!atomic_long_add_unless(&session->file->f_count, 1, LONG_MAX)) {
+               ret = -EOVERFLOW;
                goto refcount_error;
        }
        ret = lttng_tracker_pids_list_fops.open(NULL, tracker_pids_list_file);
@@ -2410,6 +2416,9 @@ int _lttng_event_header_declare(struct lttng_session *session)
  * in future versions.
  * This function may return a negative offset. It may happen if the
  * system sets the REALTIME clock to 0 after boot.
+ *
+ * Use 64bit timespec on kernels that have it, this makes 32bit arch
+ * y2038 compliant.
  */
 static
 int64_t measure_clock_offset(void)
@@ -2417,13 +2426,21 @@ int64_t measure_clock_offset(void)
        uint64_t monotonic_avg, monotonic[2], realtime;
        uint64_t tcf = trace_clock_freq();
        int64_t offset;
-       struct timespec rts = { 0, 0 };
        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);
 
@@ -2809,12 +2826,22 @@ static int __init lttng_events_init(void)
        ret = lttng_init_cpu_hotplug();
        if (ret)
                goto error_hotplug;
-       printk(KERN_NOTICE "LTTng: Loaded modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Loaded modules v%s.%s.%s%s (%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
        return 0;
 
 error_hotplug:
@@ -2827,12 +2854,22 @@ error_kmem:
        lttng_tracepoint_exit();
 error_tp:
        lttng_context_exit();
-       printk(KERN_NOTICE "LTTng: Failed to load modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Failed to load modules v%s.%s.%s%s (%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
        return ret;
 }
 
@@ -2850,16 +2887,33 @@ static void __exit lttng_events_exit(void)
        kmem_cache_destroy(event_cache);
        lttng_tracepoint_exit();
        lttng_context_exit();
-       printk(KERN_NOTICE "LTTng: Unloaded modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Unloaded modules v%s.%s.%s%s (%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
 }
 
 module_exit(lttng_events_exit);
 
+#include "extra_version/patches.i"
+#ifdef LTTNG_EXTRA_VERSION_GIT
+MODULE_INFO(extra_version_git, LTTNG_EXTRA_VERSION_GIT);
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+MODULE_INFO(extra_version_name, LTTNG_EXTRA_VERSION_NAME);
+#endif
 MODULE_LICENSE("GPL and additional rights");
 MODULE_AUTHOR("Mathieu Desnoyers <mathieu.desnoyers@efficios.com>");
 MODULE_DESCRIPTION("LTTng Events");
This page took 0.025801 seconds and 4 git commands to generate.