Version 2.12.17
[lttng-modules.git] / probes / lttng-tracepoint-event-impl.h
index 3fe9d995cf310bbc9d15b794b92892dd475c9afd..b40fbd8107a2f0d38f437dff5fd465ce08df4b53 100644 (file)
 #include <probes/lttng.h>
 #include <probes/lttng-types.h>
 #include <probes/lttng-probe-user.h>
-#include <wrapper/vmalloc.h>   /* for wrapper_vmalloc_sync_all() */
+#include <wrapper/vmalloc.h>   /* for wrapper_vmalloc_sync_mappings() */
 #include <wrapper/ringbuffer/frontend_types.h>
 #include <wrapper/ringbuffer/backend.h>
 #include <wrapper/rcu.h>
+#include <wrapper/user_namespace.h>
 #include <lttng-events.h>
 #include <lttng-tracer-core.h>
 #include <lttng-tp-mempool.h>
@@ -256,9 +257,8 @@ void __event_template_proto___##_name(void);
 #define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \
        {                                                       \
          .name = #_item,                                       \
-         .type = __type_integer(_type, 0, 0, -1, _byte_order, _base, none),\
+         .type = __type_integer(_type, 0, 0, -1, _byte_order, _user, _base, none),\
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 #undef _ctf_array_encoded
@@ -272,13 +272,12 @@ void __event_template_proto___##_name(void);
                        {                                       \
                          .array =                              \
                                {                               \
-                                 .elem_type = __type_integer(_type, 0, 0, 0, _byte_order, _base, _encoding), \
+                                 .elem_type = __type_integer(_type, 0, 0, 0, _byte_order, _user, _base, _encoding), \
                                  .length = _length,            \
                                }                               \
                        }                                       \
                },                                              \
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 #undef _ctf_array_bitfield
@@ -292,14 +291,13 @@ void __event_template_proto___##_name(void);
                        {                                       \
                          .array =                              \
                                {                               \
-                                 .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none), \
+                                 .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, _user, 10, none), \
                                  .length = (_length) * sizeof(_type) * CHAR_BIT, \
                                  .elem_alignment = lttng_alignof(_type), \
                                }                               \
                        }                                       \
                },                                              \
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 
@@ -316,13 +314,12 @@ void __event_template_proto___##_name(void);
                        {                                       \
                          .sequence =                           \
                                {                               \
-                                 .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 10, none), \
-                                 .elem_type = __type_integer(_type, 0, 0, -1, _byte_order, _base, _encoding), \
+                                 .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 0, 10, none), \
+                                 .elem_type = __type_integer(_type, 0, 0, -1, _byte_order, _user, _base, _encoding), \
                                },                              \
                        },                                      \
                },                                              \
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 #undef _ctf_sequence_bitfield
@@ -338,14 +335,13 @@ void __event_template_proto___##_name(void);
                        {                                       \
                          .sequence =                           \
                                {                               \
-                                 .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 10, none), \
-                                 .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none), \
+                                 .length_type = __type_integer(_length_type, 0, 0, 0, __BYTE_ORDER, 0, 10, none), \
+                                 .elem_type = __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, _user, 10, none), \
                                  .elem_alignment = lttng_alignof(_type), \
                                },                              \
                        },                                      \
                },                                              \
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 #undef _ctf_string
@@ -357,11 +353,10 @@ void __event_template_proto___##_name(void);
                  .atype = atype_string,                        \
                  .u =                                          \
                        {                                       \
-                         .basic = { .string = { .encoding = lttng_encode_UTF8 } } \
+                         .basic = { .string = { .encoding = lttng_encode_UTF8, .user = (_user), } } \
                        },                                      \
                },                                              \
          .nowrite = _nowrite,                                  \
-         .user = _user,                                        \
        },
 
 #undef _ctf_enum
@@ -379,6 +374,7 @@ void __event_template_proto___##_name(void);
                                                        .alignment = lttng_alignof(_type) * CHAR_BIT, \
                                                        .signedness = lttng_is_signed_type(_type), \
                                                        .reverse_byte_order = 0, \
+                                                       .user = (_user), \
                                                        .base = 10, \
                                                        .encoding = lttng_encode_none, \
                                                },              \
@@ -387,7 +383,6 @@ void __event_template_proto___##_name(void);
                        },                                      \
                },                                              \
                .nowrite = _nowrite,                            \
-               .user = _user,                                  \
        },
 
 #undef ctf_custom_field
@@ -396,7 +391,6 @@ void __event_template_proto___##_name(void);
                .name = #_item,                                 \
                .type = { _type },                              \
                .nowrite = 0,                                   \
-               .user = 0,                                      \
        },
 
 #undef ctf_custom_type
@@ -1127,18 +1121,37 @@ static void __event_probe__##_name(void *__data, _proto)                      \
        struct probe_local_vars __tp_locvar;                                  \
        struct probe_local_vars *tp_locvar __attribute__((unused)) =          \
                        &__tp_locvar;                                         \
-       struct lttng_pid_tracker *__lpf;                                      \
+       struct lttng_id_tracker_rcu *__lf;                                    \
                                                                              \
        if (!_TP_SESSION_CHECK(session, __session))                           \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__session->active)))                          \
+       if (unlikely(!LTTNG_READ_ONCE(__session->active)))                    \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__chan->enabled)))                            \
+       if (unlikely(!LTTNG_READ_ONCE(__chan->enabled)))                      \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__event->enabled)))                           \
+       if (unlikely(!LTTNG_READ_ONCE(__event->enabled)))                     \
                return;                                                       \
-       __lpf = lttng_rcu_dereference(__session->pid_tracker);                \
-       if (__lpf && likely(!lttng_pid_tracker_lookup(__lpf, current->tgid))) \
+       __lf = lttng_rcu_dereference(__session->pid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid)))    \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->vpid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->uid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_uid())))                                \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->vuid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_vuid())))                               \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->gid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_gid())))                                \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->vgid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_vgid())))                               \
                return;                                                       \
        __orig_dynamic_len_offset = this_cpu_ptr(&lttng_dynamic_len_stack)->offset; \
        __dynamic_len_idx = __orig_dynamic_len_offset;                        \
@@ -1201,18 +1214,37 @@ static void __event_probe__##_name(void *__data)                              \
        struct probe_local_vars __tp_locvar;                                  \
        struct probe_local_vars *tp_locvar __attribute__((unused)) =          \
                        &__tp_locvar;                                         \
-       struct lttng_pid_tracker *__lpf;                                      \
+       struct lttng_id_tracker_rcu *__lf;                                    \
                                                                              \
        if (!_TP_SESSION_CHECK(session, __session))                           \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__session->active)))                          \
+       if (unlikely(!LTTNG_READ_ONCE(__session->active)))                    \
+               return;                                                       \
+       if (unlikely(!LTTNG_READ_ONCE(__chan->enabled)))                      \
+               return;                                                       \
+       if (unlikely(!LTTNG_READ_ONCE(__event->enabled)))                     \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->pid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid)))    \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->vpid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \
+               return;                                                       \
+       __lf = lttng_rcu_dereference(__session->uid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_uid())))                                \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__chan->enabled)))                            \
+       __lf = lttng_rcu_dereference(__session->vuid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_vuid())))                               \
                return;                                                       \
-       if (unlikely(!READ_ONCE(__event->enabled)))                           \
+       __lf = lttng_rcu_dereference(__session->gid_tracker.p);               \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_gid())))                                \
                return;                                                       \
-       __lpf = lttng_rcu_dereference(__session->pid_tracker);                \
-       if (__lpf && likely(!lttng_pid_tracker_lookup(__lpf, current->tgid)))  \
+       __lf = lttng_rcu_dereference(__session->vgid_tracker.p);              \
+       if (__lf && likely(!lttng_id_tracker_lookup(__lf,                     \
+                       lttng_current_vgid())))                               \
                return;                                                       \
        __orig_dynamic_len_offset = this_cpu_ptr(&lttng_dynamic_len_stack)->offset; \
        __dynamic_len_idx = __orig_dynamic_len_offset;                        \
@@ -1305,7 +1337,7 @@ static const struct lttng_event_desc __event_desc___##_map = {            \
 #define TP_ID1(_token, _system)        _token##_system
 #define TP_ID(_token, _system) TP_ID1(_token, _system)
 
-static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = {
+static const struct lttng_event_desc *TP_ID(__provider_event_desc___, TRACE_SYSTEM)[] = {
 #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
 };
 
@@ -1324,8 +1356,8 @@ static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = {
 /* non-const because list head will be modified when registered. */
 static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = {
        .provider = __stringify(TRACE_SYSTEM),
-       .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM),
-       .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)),
+       .event_desc = TP_ID(__provider_event_desc___, TRACE_SYSTEM),
+       .nr_events = ARRAY_SIZE(TP_ID(__provider_event_desc___, TRACE_SYSTEM)),
        .head = { NULL, NULL },
        .lazy_init_head = { NULL, NULL },
        .lazy = 0,
@@ -1352,7 +1384,7 @@ static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = {
 #ifndef TP_MODULE_NOINIT
 static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void)
 {
-       wrapper_vmalloc_sync_all();
+       wrapper_vmalloc_sync_mappings();
        return lttng_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM));
 }
 
This page took 0.027803 seconds and 4 git commands to generate.