1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 #include <side/trace.h>
11 #define SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK 0x80000000
13 struct side_rcu_gp_state rcu_gp
= {
17 .gp_lock
= PTHREAD_MUTEX_INITIALIZER
,
21 * Lazy initialization for early use within library constructors.
23 static bool initialized
;
27 __attribute__((constructor
));
29 void side_call(const struct side_event_description
*desc
, const struct side_arg_vec_description
*sav_desc
)
31 if (side_unlikely(!initialized
))
33 if (side_unlikely(desc
->flags
& SIDE_EVENT_FLAG_VARIADIC
)) {
34 printf("ERROR: unexpected variadic event description\n");
37 if (side_unlikely(*desc
->enabled
& SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK
)) {
38 // TODO: call kernel write.
40 //TODO: replace tracer_call by rcu iteration on list of registered callbacks
41 tracer_call(desc
, sav_desc
, NULL
);
44 void side_call_variadic(const struct side_event_description
*desc
,
45 const struct side_arg_vec_description
*sav_desc
,
46 const struct side_arg_dynamic_event_struct
*var_struct
)
48 if (side_unlikely(!initialized
))
50 if (side_unlikely(*desc
->enabled
& SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK
)) {
51 // TODO: call kernel write.
53 //TODO: replace tracer_call by rcu iteration on list of registered callbacks
54 tracer_call_variadic(desc
, sav_desc
, var_struct
, NULL
);
61 rcu_gp
.nr_cpus
= get_possible_cpus_array_len();