page alloc wrapper: Fix get_pfnblock_flags_mask prototype
[lttng-modules.git] / lttng-events.c
index 4c0b04a09597bef396dba066fd4d64a0733cf206..410302818f819954559508ec853327fcd9327f57 100644 (file)
 #include <lttng-abi-old.h>
 #include <lttng-endian.h>
 #include <lttng-string-utils.h>
+#include <wrapper/compiler_attributes.h>
 #include <wrapper/ringbuffer/backend.h>
 #include <wrapper/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
 
 static LIST_HEAD(sessions);
@@ -77,21 +85,22 @@ 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) || \
+       LTTNG_RHEL_KERNEL_RANGE(4,18,0,193,0,0, 4,19,0,0,0,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)
@@ -429,7 +438,8 @@ int lttng_event_enable(struct lttng_event *event)
        case LTTNG_KERNEL_KRETPROBE:
                ret = lttng_kretprobes_event_enable_state(event, 1);
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -465,7 +475,8 @@ int lttng_event_disable(struct lttng_event *event)
        case LTTNG_KERNEL_KRETPROBE:
                ret = lttng_kretprobes_event_enable_state(event, 0);
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -612,7 +623,8 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
        case LTTNG_KERNEL_SYSCALL:
                event_name = event_param->name;
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through. */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -704,6 +716,8 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
                event_return->enabled = 0;
                event_return->registered = 1;
                event_return->instrumentation = itype;
+               INIT_LIST_HEAD(&event_return->bytecode_runtime_head);
+               INIT_LIST_HEAD(&event_return->enablers_ref_head);
                /*
                 * Populate lttng_event structure before kretprobe registration.
                 */
@@ -793,7 +807,8 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
                ret = try_module_get(event->desc->owner);
                WARN_ON_ONCE(!ret);
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
                ret = -EINVAL;
@@ -860,7 +875,8 @@ void register_event(struct lttng_event *event)
        case LTTNG_KERNEL_NOOP:
                ret = 0;
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
        }
@@ -904,7 +920,8 @@ int _lttng_event_unregister(struct lttng_event *event)
                lttng_uprobes_unregister(event);
                ret = 0;
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
        }
@@ -919,6 +936,8 @@ int _lttng_event_unregister(struct lttng_event *event)
 static
 void _lttng_event_destroy(struct lttng_event *event)
 {
+       struct lttng_enabler_ref *enabler_ref, *tmp_enabler_ref;
+
        switch (event->instrumentation) {
        case LTTNG_KERNEL_TRACEPOINT:
                lttng_event_put(event->desc);
@@ -938,12 +957,18 @@ void _lttng_event_destroy(struct lttng_event *event)
                module_put(event->desc->owner);
                lttng_uprobes_destroy_private(event);
                break;
-       case LTTNG_KERNEL_FUNCTION:     /* Fall-through */
+       case LTTNG_KERNEL_FUNCTION:
+               lttng_fallthrough;
        default:
                WARN_ON_ONCE(1);
        }
        list_del(&event->list);
        lttng_destroy_context(event->ctx);
+       lttng_free_event_filter_runtime(event);
+       /* Free event enabler refs */
+       list_for_each_entry_safe(enabler_ref, tmp_enabler_ref,
+                                &event->enablers_ref_head, node)
+               kfree(enabler_ref);
        kmem_cache_free(event_cache, event);
 }
 
@@ -2639,7 +2664,7 @@ int print_escaped_ctf_string(struct lttng_session *session, const char *string)
                        if (ret)
                                goto error;
                        /* We still print the current char */
-                       /* Fallthrough */
+                       lttng_fallthrough;
                default:
                        ret = lttng_metadata_printf(session, "%c", cur);
                        break;
@@ -2908,7 +2933,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;
@@ -3024,7 +3049,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;
@@ -3032,7 +3057,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)
@@ -3087,6 +3112,9 @@ static int __init lttng_events_init(void)
 #else
                "");
 #endif
+#ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM
+       printk(KERN_NOTICE "LTTng: Experimental bitwise enum enabled.\n");
+#endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */
        return 0;
 
 error_hotplug:
This page took 0.025565 seconds and 4 git commands to generate.