fix: Add one digit to SLES minor release version
[lttng-modules.git] / lttng-events.c
index ee0e7f9056a9a594cb9be70763077fe2598199f7..469316529515dd5dccb81f162c3bb9e8993d3e72 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,21 +90,21 @@ int _lttng_field_statedump(struct lttng_session *session,
 
 void synchronize_trace(void)
 {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,1,0))
        synchronize_rcu();
 #else
        synchronize_sched();
 #endif
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0))
 #ifdef CONFIG_PREEMPT_RT_FULL
        synchronize_rcu();
 #endif
-#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */
+#else /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */
 #ifdef CONFIG_PREEMPT_RT
        synchronize_rcu();
 #endif
-#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) */
+#endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) */
 }
 
 void lttng_lock_sessions(void)
@@ -414,13 +415,13 @@ int lttng_event_enable(struct lttng_event *event)
                ret = -EINVAL;
                break;
        case LTTNG_KERNEL_KPROBE:
-       case LTTNG_KERNEL_FUNCTION:
        case LTTNG_KERNEL_NOOP:
                WRITE_ONCE(event->enabled, 1);
                break;
        case LTTNG_KERNEL_KRETPROBE:
                ret = lttng_kretprobes_event_enable_state(event, 1);
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -449,13 +450,13 @@ int lttng_event_disable(struct lttng_event *event)
                ret = -EINVAL;
                break;
        case LTTNG_KERNEL_KPROBE:
-       case LTTNG_KERNEL_FUNCTION:
        case LTTNG_KERNEL_NOOP:
                WRITE_ONCE(event->enabled, 0);
                break;
        case LTTNG_KERNEL_KRETPROBE:
                ret = lttng_kretprobes_event_enable_state(event, 0);
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -597,11 +598,11 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
                break;
        case LTTNG_KERNEL_KPROBE:
        case LTTNG_KERNEL_KRETPROBE:
-       case LTTNG_KERNEL_FUNCTION:
        case LTTNG_KERNEL_NOOP:
        case LTTNG_KERNEL_SYSCALL:
                event_name = event_param->name;
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -724,27 +725,6 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
                list_add(&event_return->list, &chan->session->events);
                break;
        }
-       case LTTNG_KERNEL_FUNCTION:
-               /*
-                * Needs to be explicitly enabled after creation, since
-                * we may want to apply filters.
-                */
-               event->enabled = 0;
-               event->registered = 1;
-               /*
-                * Populate lttng_event structure before event
-                * registration.
-                */
-               smp_wmb();
-               ret = lttng_ftrace_register(event_name,
-                               event_param->u.ftrace.symbol_name,
-                               event);
-               if (ret) {
-                       goto register_error;
-               }
-               ret = try_module_get(event->desc->owner);
-               WARN_ON_ONCE(!ret);
-               break;
        case LTTNG_KERNEL_NOOP:
        case LTTNG_KERNEL_SYSCALL:
                /*
@@ -759,6 +739,7 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
                        goto register_error;
                }
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -822,10 +803,10 @@ void register_event(struct lttng_event *event)
                break;
        case LTTNG_KERNEL_KPROBE:
        case LTTNG_KERNEL_KRETPROBE:
-       case LTTNG_KERNEL_FUNCTION:
        case LTTNG_KERNEL_NOOP:
                ret = 0;
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
        default:
                WARN_ON_ONCE(1);
        }
@@ -859,10 +840,6 @@ int _lttng_event_unregister(struct lttng_event *event)
                lttng_kretprobes_unregister(event);
                ret = 0;
                break;
-       case LTTNG_KERNEL_FUNCTION:
-               lttng_ftrace_unregister(event);
-               ret = 0;
-               break;
        case LTTNG_KERNEL_SYSCALL:
                ret = lttng_syscall_filter_disable(event->chan,
                        desc->name);
@@ -870,6 +847,7 @@ int _lttng_event_unregister(struct lttng_event *event)
        case LTTNG_KERNEL_NOOP:
                ret = 0;
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
        default:
                WARN_ON_ONCE(1);
        }
@@ -896,13 +874,10 @@ void _lttng_event_destroy(struct lttng_event *event)
                module_put(event->desc->owner);
                lttng_kretprobes_destroy_private(event);
                break;
-       case LTTNG_KERNEL_FUNCTION:
-               module_put(event->desc->owner);
-               lttng_ftrace_destroy_private(event);
-               break;
        case LTTNG_KERNEL_NOOP:
        case LTTNG_KERNEL_SYSCALL:
                break;
+       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
        default:
                WARN_ON_ONCE(1);
        }
@@ -2415,6 +2390,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)
@@ -2422,13 +2400,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);
 
@@ -2651,7 +2637,7 @@ void lttng_transport_unregister(struct lttng_transport *transport)
 }
 EXPORT_SYMBOL_GPL(lttng_transport_unregister);
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0))
 
 enum cpuhp_state lttng_hp_prepare;
 enum cpuhp_state lttng_hp_online;
@@ -2767,7 +2753,7 @@ static void __exit lttng_exit_cpu_hotplug(void)
        cpuhp_remove_multi_state(lttng_hp_prepare);
 }
 
-#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
+#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */
 static int lttng_init_cpu_hotplug(void)
 {
        return 0;
@@ -2775,7 +2761,7 @@ static int lttng_init_cpu_hotplug(void)
 static void lttng_exit_cpu_hotplug(void)
 {
 }
-#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
+#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */
 
 
 static int __init lttng_events_init(void)
This page took 0.025732 seconds and 4 git commands to generate.